scons: Don't force stabs debug format for Mingw.
authorJosé Fonseca <jfonseca@vmware.com>
Fri, 17 May 2013 12:23:04 +0000 (13:23 +0100)
committerJosé Fonseca <jfonseca@vmware.com>
Tue, 21 May 2013 11:34:19 +0000 (12:34 +0100)
- 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>
scons/crossmingw.py
src/gallium/auxiliary/SConscript
src/mapi/glapi/SConscript

index 23c56c0a2da573141a61b8756d47ee402fa92f53..1287e0ec8cc524607b8b964508968489fa3cc4fc 100644 (file)
@@ -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)
index bfd5ec34c04dfd35a74369015b7b2e9d6afb386a..31dfed316aa04017c03dd1a938838398e906b1af 100644 (file)
@@ -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,
index ac11148ffcf821b3e3662494a955f217743a5ad1..c4ac080aaa85eb7f591cad16a3133eb6182096e2 100644 (file)
@@ -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,