As things stand, Darwin's 'as' cannot produce dwarf debug.

Unfortunately, if "-g" is given to -x assembler-with-cpp ... this results in 'as' being called with --stabs.

So, it can be the case that an exe ends up with some stabs debug in it - usually with a source file of "{standard input}" (and without an OSO entry).

This upsets the OSO parser in machoread.c (in gdb) causing gdb to fail with an OSO != NULL assert.

===

This patch prevents "as" being asked to give debug output unless stabs is the chosen debug scheme (so for the default on Darwin >= 9 asm files will not get any debug data).

It doesn't prevent the scenario completely - the user could still produce the situation manually (I have a gdb patch to work around it) ...

===

However, this does mean that a standard (ppc) build of gcc doesn't abort gdb (because the .S files in libgcc_s are causing this on ppc).

OK for trunk?
Iain

Index: gcc/config/darwin.h
===================================================================
--- gcc/config/darwin.h (revision 181436)
+++ gcc/config/darwin.h (working copy)
@@ -395,6 +395,11 @@ extern GTY(()) int darwin_ms_struct;
   %{Zforce_cpusubtype_ALL:-force_cpusubtype_ALL} \
   %{static}"
 
+/* Default ASM_DEBUG_SPEC.  Darwin's as cannot currently produce dwarf
+   debugging data.  */
+
+#define ASM_DEBUG_SPEC  "%{g*:%{!g0:%{!gdwarf*:--gstabs}}}"
+
 /* We still allow output of STABS.  */
 
 #define DBX_DEBUGGING_INFO 1
Index: gcc/config/darwin9.h
===================================================================
--- gcc/config/darwin9.h        (revision 181436)
+++ gcc/config/darwin9.h        (working copy)
@@ -41,6 +41,12 @@ along with GCC; see the file COPYING3.  If not see
      %{mdynamic-no-pic: %n'-mdynamic-no-pic' overrides '-pie', '-fpie' or 
'-fPIE'; \
       :-pie}}"
 
+/* Only ask as for debug data if the debug style is stabs (since as doesn't
+   yet generate dwarf.)  */
+
+#undef  ASM_DEBUG_SPEC
+#define ASM_DEBUG_SPEC  "%{g*:%{!g0:%{gstabs:--gstabs}}}"
+
 #undef  ASM_OUTPUT_ALIGNED_COMMON
 #define ASM_OUTPUT_ALIGNED_COMMON(FILE, NAME, SIZE, ALIGN)             \
   do {                                                                 \




Reply via email to