diff options
author | José Fonseca <jfonseca@vmware.com> | 2013-05-17 13:23:04 +0100 |
---|---|---|
committer | José Fonseca <jfonseca@vmware.com> | 2013-05-21 12:34:19 +0100 |
commit | 8cabc7be1dd61bd4acf3669ae605361da64a1e8a (patch) | |
tree | b97d2522fc31ba4059ff52737185ca146916741c | |
parent | 2b7463cf3a50e136b6e99cfbb309f6c38152ac8c (diff) |
scons: Don't force stabs debug format for Mingw.
- recent gdb handles DWARF fine (tested both with version
7.1.90.20100730 from mingw-w64 project, and 7.5-1 from mingw project)
- http://people.freedesktop.org/~jrfonseca/bfdhelp/ was updated to
handle DWARF
- stabs requires ugly hacks to prevent compilation failures
- mixing stabs/dwarf prevents proper backtraces (which is inevitable,
given that the MinGW C runtime is pre-built with DWARF)
For example, without this change I get:
(gdb) bt
#0 _wassert (_Message=0xf925060 L"Num < NumOperands && \"Invalid child # of SDNode!\"",
_File=0xf60b488 L"llvm/include/llvm/CodeGen/SelectionDAGNodes.h", _Line=534)
at ../../../../mingw-w64-crt/misc/wassert.c:51
#1 0x0368996b in _assert (_Message=0x39d7ee4 "Num < NumOperands && \"Invalid child # of SDNode!\"",
_File=0x39d7e94 "llvm/include/llvm/CodeGen/SelectionDAGNodes.h", _Line=534)
at ../../../../mingw-w64-crt/misc/wassert.c:44
#2 0x00000004 in ?? ()
#3 0x00000004 in ?? ()
#4 0x0f60b488 in ?? ()
#5 0x00000000 in ?? ()
While with this change I get:
(gdb) bt
#0 _wassert (_Message=0xfb982e8 L"Num < NumOperands && \"Invalid child # of SDNode!\"",
_File=0xefbcb40 L"llvm/include/llvm/CodeGen/SelectionDAGNodes.h", _Line=534)
at ../../../../mingw-w64-crt/misc/wassert.c:51
#1 0x039c996b in _assert (_Message=0x3d17f24 "Num < NumOperands && \"Invalid child # of SDNode!\"",
_File=0x3d17ed4 "llvm/include/llvm/CodeGen/SelectionDAGNodes.h", _Line=534)
at ../../../../mingw-w64-crt/misc/wassert.c:44
#2 0x033111cc in getOperand (Num=4, this=<optimized out>)
at llvm/include/llvm/CodeGen/SelectionDAGNodes.h:534
#3 getOperand (i=4, this=<optimized out>)
at llvm/include/llvm/CodeGen/SelectionDAGNodes.h:779
#4 llvm::SelectionDAG::getNode (this=0xf00cb08, Opcode=79, DL=..., VT=..., N1=..., N2=...)
at llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:2859
#5 0x03377b20 in llvm::SelectionDAGBuilder::visitExtractElement (this=0xfb45028, I=...)
at llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp:2803
[...]
Reviewed-by: Brian Paul <brianp@vmware.com>
-rw-r--r-- | scons/crossmingw.py | 42 | ||||
-rw-r--r-- | src/gallium/auxiliary/SConscript | 4 | ||||
-rw-r--r-- | src/mapi/glapi/SConscript | 5 |
3 files changed, 0 insertions, 51 deletions
diff --git a/scons/crossmingw.py b/scons/crossmingw.py index 23c56c0a2d..1287e0ec8c 100644 --- a/scons/crossmingw.py +++ b/scons/crossmingw.py @@ -130,40 +130,6 @@ SCons.Tool.SourceFileScanner.add_scanner('.rc', SCons.Defaults.CScan) -def compile_without_gstabs(env, sources, c_file): - '''This is a hack used to compile some source files without the - -gstabs option. - - It seems that some versions of mingw32's gcc (4.4.2 at least) die - when compiling large files with the -gstabs option. -gstabs is - related to debug symbols and can be omitted from the effected - files. - - This function compiles the given c_file without -gstabs, removes - the c_file from the sources list, then appends the new .o file to - sources. Then return the new sources list. - ''' - - # Modify CCFLAGS to not have -gstabs option: - env2 = env.Clone() - flags = str(env2['CCFLAGS']) - flags = flags.replace("-gstabs", "") - env2['CCFLAGS'] = SCons.Util.CLVar(flags) - - # Build the special-case files: - obj_file = env2.SharedObject(c_file) - - # Replace ".cpp" or ".c" with ".o" - o_file = c_file.replace(".cpp", ".o") - o_file = o_file.replace(".c", ".o") - - # Replace the .c files with the specially-compiled .o file - sources.remove(c_file) - sources.append(o_file) - - return sources - - def generate(env): mingw_prefix = find(env) @@ -221,13 +187,5 @@ def generate(env): env['LIBPREFIXES'] = [ 'lib', '' ] env['LIBSUFFIXES'] = [ '.a', '.lib' ] - # MinGW x86 port of gdb does not handle well dwarf debug info which is the - # default in recent gcc versions. The x64 port gdb from mingw-w64 seems to - # handle it fine though, so stick with the default there. - if env['machine'] != 'x86_64': - env.AppendUnique(CCFLAGS = ['-gstabs']) - - env.AddMethod(compile_without_gstabs, 'compile_without_gstabs') - def exists(env): return find(env) diff --git a/src/gallium/auxiliary/SConscript b/src/gallium/auxiliary/SConscript index bfd5ec34c0..31dfed316a 100644 --- a/src/gallium/auxiliary/SConscript +++ b/src/gallium/auxiliary/SConscript @@ -51,10 +51,6 @@ if env['llvm']: 'GALLIVM_CPP_SOURCES' ]) - if env['toolchain'] == 'crossmingw': - # compile lp_bld_misc.cpp without -gstabs option - source = env.compile_without_gstabs(source, "gallivm/lp_bld_misc.cpp") - gallium = env.ConvenienceLibrary( target = 'gallium', source = source, diff --git a/src/mapi/glapi/SConscript b/src/mapi/glapi/SConscript index ac11148ffc..c4ac080aaa 100644 --- a/src/mapi/glapi/SConscript +++ b/src/mapi/glapi/SConscript @@ -95,11 +95,6 @@ if (env['gcc'] or env['clang']) and \ else: pass -if env['toolchain'] == 'crossmingw': - # compile these files without -gstabs option - glapi_sources = env.compile_without_gstabs(glapi_sources, "glapi_dispatch.c") - glapi_sources = env.compile_without_gstabs(glapi_sources, "glapi_getproc.c") - glapi = env.ConvenienceLibrary( target = 'glapi', source = glapi_sources, |