[Mesa-dev] [PATCH] scons: Don't force stabs debug format for Mingw.

jfonseca at vmware.com jfonseca at vmware.com
Fri May 17 06:33:50 PDT 2013


From: José Fonseca <jfonseca at vmware.com>

- 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

- it requires ugly hacks to prevent compilation failures

- it prevents proper back when stabs/dwarf is mixed (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
  [...]
---
 scons/crossmingw.py              |   42 --------------------------------------
 src/gallium/auxiliary/SConscript |    4 ----
 src/mapi/glapi/SConscript        |    5 -----
 3 files changed, 51 deletions(-)

diff --git a/scons/crossmingw.py b/scons/crossmingw.py
index 23c56c0..1287e0e 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 bfd5ec3..31dfed3 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 ac11148..c4ac080 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,
-- 
1.7.10.4



More information about the mesa-dev mailing list