summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog12
-rw-r--r--gcc/config/darwin.h2
-rw-r--r--gcc/doc/tm.texi4
-rw-r--r--gcc/doc/tm.texi.in2
-rw-r--r--gcc/dwarf2out.c16
-rw-r--r--gcc/target.def7
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/g++.dg/debug/dwarf2/pubnames-1.C2
8 files changed, 43 insertions, 6 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 832cf30a5db..45e211a531f 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,15 @@
+2010-07-07 Tom Tromey <tromey@redhat.com>
+
+ * doc/tm.texi: Update.
+ * doc/tm.texi.in (SDB and DWARF) <TARGET_WANT_DEBUG_PUB_SECTIONS>:
+ Add @hook.
+ * target.def (want_debug_pub_sections): New hook.
+ * config/darwin.h (TARGET_WANT_DEBUG_PUB_SECTIONS): Define.
+ * dwarf2out.c (add_pubname_string): Check
+ targetm.want_debug_pub_sections.
+ (add_pubname): Likewise.
+ (add_pubtype): Likewise.
+
2010-07-07 Jie Zhang <jie@codesourcery.com>
* genautomata.c (output_automata_list_min_issue_delay_code):
diff --git a/gcc/config/darwin.h b/gcc/config/darwin.h
index a1e805c6d5b..6b681ee4509 100644
--- a/gcc/config/darwin.h
+++ b/gcc/config/darwin.h
@@ -471,6 +471,8 @@ extern GTY(()) int darwin_ms_struct;
#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
diff --git a/gcc/doc/tm.texi b/gcc/doc/tm.texi
index 17b582f77b2..cb878afbe57 100644
--- a/gcc/doc/tm.texi
+++ b/gcc/doc/tm.texi
@@ -9278,6 +9278,10 @@ line debug info sections. This will result in much more compact line number
tables, and hence is desirable if it works.
@end defmac
+@deftypevr {Target Hook} bool TARGET_WANT_DEBUG_PUB_SECTIONS
+True if the @code{.debug_pubtypes} and @code{.debug_pubnames} sections should be emitted. These sections are not used on most platforms, and in particular GDB does not use them.
+@end deftypevr
+
@defmac ASM_OUTPUT_DWARF_DELTA (@var{stream}, @var{size}, @var{label1}, @var{label2})
A C statement to issue assembly directives that create a difference
@var{lab1} minus @var{lab2}, using an integer of the given @var{size}.
diff --git a/gcc/doc/tm.texi.in b/gcc/doc/tm.texi.in
index e79341d5db5..bab073e5ae0 100644
--- a/gcc/doc/tm.texi.in
+++ b/gcc/doc/tm.texi.in
@@ -9277,6 +9277,8 @@ line debug info sections. This will result in much more compact line number
tables, and hence is desirable if it works.
@end defmac
+@hook TARGET_WANT_DEBUG_PUB_SECTIONS
+
@defmac ASM_OUTPUT_DWARF_DELTA (@var{stream}, @var{size}, @var{label1}, @var{label2})
A C statement to issue assembly directives that create a difference
@var{lab1} minus @var{lab2}, using an integer of the given @var{size}.
diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c
index 55fef55ed3f..434783ac2a5 100644
--- a/gcc/dwarf2out.c
+++ b/gcc/dwarf2out.c
@@ -11238,17 +11238,20 @@ dwarf2_name (tree decl, int scope)
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)
@@ -11263,6 +11266,9 @@ add_pubtype (tree decl, dw_die_ref die)
{
pubname_entry e;
+ if (!targetm.want_debug_pub_sections)
+ return;
+
e.name = NULL;
if ((TREE_PUBLIC (decl)
|| die->die_parent == comp_unit_die)
diff --git a/gcc/target.def b/gcc/target.def
index 627092537f1..3eb52a6fe54 100644
--- a/gcc/target.def
+++ b/gcc/target.def
@@ -2337,6 +2337,13 @@ DEFHOOKPOD
"",
bool, false)
+DEFHOOKPOD
+(want_debug_pub_sections,
+ "True if the @code{.debug_pubtypes} and @code{.debug_pubnames} sections\
+ should be emitted. These sections are not used on most platforms, and\
+ in particular GDB does not use them.",
+ bool, false)
+
/* Leave the boolean fields at the end. */
/* Empty macro arguments are undefined in C90, so use an empty macro. */
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index a031acc4098..189c556e130 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2010-07-07 Tom Tromey <tromey@redhat.com>
+
+ * g++.dg/debug/dwarf2/pubnames-1.C: Make darwin-specific.
+
2010-07-07 H.J. Lu <hongjiu.lu@intel.com>
PR target/44844
diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/pubnames-1.C b/gcc/testsuite/g++.dg/debug/dwarf2/pubnames-1.C
index 543439da323..18d1df0d952 100644
--- a/gcc/testsuite/g++.dg/debug/dwarf2/pubnames-1.C
+++ b/gcc/testsuite/g++.dg/debug/dwarf2/pubnames-1.C
@@ -1,7 +1,7 @@
// 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 }
//
// There should be one debug_pubnames section generated.
// On Darwin though, there is also a label pointing at the begining of the