Patchwork RFA: don't emit .debug_pub*

login
register
mail settings
Submitter Tom Tromey
Date June 21, 2010, 10:20 p.m.
Message ID <m3r5k0f2o9.fsf@fleche.redhat.com>
Download mbox | patch
Permalink /patch/56356/
State New
Headers show

Comments

Tom Tromey - June 21, 2010, 10:20 p.m.
Currently, GCC emits .debug_pubnames and .debug_pubtypes.
However, they are not used, except on Darwin.

GCC didn't even generate pubtypes (except on Darwin) until recently (4.5
maybe); and in any case a combination of historical bugginess, GDB
semantics, and lack of name canonicalization means that GDB is unlikely
to ever read these sections.

Also, to the best of my knowledge, no other program reads them.  (And
if a program does read them, it must do so defensively, because (1) they
are not required and (2) have historically been very buggy for C++).

This patch removes these sections.  I left them for Darwin, which does
seem to use them.  I don't have a way to test on Darwin, but this
bootstrapped and regtested on x86-64 Linux (compile farm).

Ok?

Tom

2010-06-21  Tom Tromey  <tromey@redhat.com>

	* config/darwin.h (TARGET_WANT_DEBUG_PUB_SECTIONS): Define.
	* target-def.h (TARGET_INITIALIZER): Update.
	(TARGET_WANT_DEBUG_PUB_SECTIONS): New define.
	* dwarf2out.c (add_pubname_string): Check
	targetm.want_debug_pub_sections.
	(add_pubname): Likewise.
	(add_pubtype): Likewise.
	* target.h (struct gcc_target) <want_debug_pub_sections>: New
	field.

2010-06-21  Tom Tromey  <tromey@redhat.com>

	* g++.dg/debug/dwarf2/pubnames-1.C: Add dg-do compile.
Mike Stump - June 23, 2010, 4:25 p.m.
On Jun 21, 2010, at 3:20 PM, Tom Tromey wrote:
> Currently, GCC emits .debug_pubnames and .debug_pubtypes.
> However, they are not used, except on Darwin.

> Ok?

I'm ok with this patch.  I've reviewed all the middle end bits, and they look fine.
Richard Henderson - June 29, 2010, 12:29 a.m.
On 06/21/2010 03:20 PM, Tom Tromey wrote:
> Index: target-def.h
> ===================================================================
> --- target-def.h	(revision 160567)
> +++ target-def.h	(working copy)
> @@ -680,6 +680,8 @@
>  
>  #define TARGET_ARM_EABI_UNWINDER false
>  
> +#define TARGET_WANT_DEBUG_PUB_SECTIONS false
> +
...
> Index: config/darwin.h
> ===================================================================
> --- config/darwin.h	(revision 160567)
> +++ config/darwin.h	(working copy)
> @@ -471,6 +471,8 @@
>  #define DEBUG_STR_SECTION	"__DWARF,__debug_str,regular,debug"
>  #define DEBUG_RANGES_SECTION	"__DWARF,__debug_ranges,regular,debug"
>  
> +#define TARGET_WANT_DEBUG_PUB_SECTIONS true

One of these either needs an undef or an ifdef.


r~

Patch

Index: target.h
===================================================================
--- target.h	(revision 160567)
+++ target.h	(working copy)
@@ -1284,6 +1284,11 @@ 
    */
   bool arm_eabi_unwinder;
 
+  /* True if the target wants .debug_pubtypes and .debug_pubnames.  In
+     most cases these are not interesting, as GDB and other tools do
+     not use them.  */
+  bool want_debug_pub_sections;
+
   /* Leave the boolean fields at the end.  */
 };
 
Index: testsuite/g++.dg/debug/dwarf2/pubnames-1.C
===================================================================
--- testsuite/g++.dg/debug/dwarf2/pubnames-1.C	(revision 160567)
+++ testsuite/g++.dg/debug/dwarf2/pubnames-1.C	(working copy)
@@ -1,5 +1,6 @@ 
 // Contributed by Dodji Seketeli <dodji@redhat.com>
 // Origin PR debug/39706
+// { dg-do compile { target *-*-darwin* } }
 // { dg-options "-g -dA -fno-merge-debug-strings" }
 // { dg-do compile }
 //
Index: dwarf2out.c
===================================================================
--- dwarf2out.c	(revision 160567)
+++ dwarf2out.c	(working copy)
@@ -11080,17 +11080,20 @@ 
 static void
 add_pubname_string (const char *str, dw_die_ref die)
 {
-  pubname_entry e;
+  if (targetm.want_debug_pub_sections)
+    {
+      pubname_entry e;
 
-  e.die = die;
-  e.name = xstrdup (str);
-  VEC_safe_push (pubname_entry, gc, pubname_table, &e);
+      e.die = die;
+      e.name = xstrdup (str);
+      VEC_safe_push (pubname_entry, gc, pubname_table, &e);
+    }
 }
 
 static void
 add_pubname (tree decl, dw_die_ref die)
 {
-  if (TREE_PUBLIC (decl))
+  if (targetm.want_debug_pub_sections && TREE_PUBLIC (decl))
     {
       const char *name = dwarf2_name (decl, 1);
       if (name)
@@ -11105,6 +11108,9 @@ 
 {
   pubname_entry e;
 
+  if (!targetm.want_debug_pub_sections)
+    return;
+
   e.name = NULL;
   if ((TREE_PUBLIC (decl)
        || die->die_parent == comp_unit_die)
Index: target-def.h
===================================================================
--- target-def.h	(revision 160567)
+++ target-def.h	(working copy)
@@ -680,6 +680,8 @@ 
 
 #define TARGET_ARM_EABI_UNWINDER false
 
+#define TARGET_WANT_DEBUG_PUB_SECTIONS false
+
 #define TARGET_PROMOTE_FUNCTION_MODE default_promote_function_mode
 #define TARGET_PROMOTE_PROTOTYPES hook_bool_const_tree_false
 
@@ -1085,7 +1087,8 @@ 
   TARGET_ASM_FILE_START_FILE_DIRECTIVE,		\
   TARGET_HANDLE_PRAGMA_EXTERN_PREFIX,		\
   TARGET_RELAXED_ORDERING,			\
-  TARGET_ARM_EABI_UNWINDER			\
+  TARGET_ARM_EABI_UNWINDER,			\
+  TARGET_WANT_DEBUG_PUB_SECTIONS		\
 }
 
 #define TARGET_HANDLE_C_OPTION default_handle_c_option
Index: config/darwin.h
===================================================================
--- config/darwin.h	(revision 160567)
+++ config/darwin.h	(working copy)
@@ -471,6 +471,8 @@ 
 #define DEBUG_STR_SECTION	"__DWARF,__debug_str,regular,debug"
 #define DEBUG_RANGES_SECTION	"__DWARF,__debug_ranges,regular,debug"
 
+#define TARGET_WANT_DEBUG_PUB_SECTIONS true
+
 /* When generating stabs debugging, use N_BINCL entries.  */
 
 #define DBX_USE_BINCL