diff mbox

Fix empty .debug_abbrev handling (PR debug/49364)

Message ID 20110629214058.GT16443@tyan-ft48-01.lab.bos.redhat.com
State New
Headers show

Commit Message

Jakub Jelinek June 29, 2011, 9:40 p.m. UTC
Hi!

Mark has recently changed dwarf2out to not emit anything into .debug_abbrev
section if there are no abbreviations, but as Rainer has reported, some
vendor tools are upset about it.  We were still emitting the .debug_abbrev
section, just with zero size, in order to emit the .Ldebug_abbrev0
symbol into it (which isn't used anywhere though).  So, I wonder if we
can fix that by not adding .section .debug_abbrev and emitting
the label in that case at all.  Rainer, does this make SGI tools
happy?

Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?

2011-06-29  Jakub Jelinek  <jakub@redhat.com>

	PR debug/49364
	* dwarf2out.c (output_abbrev_section): Don't return early
	if abbrev_die_table_in_use is 1.
	(dwarf2out_finish): Instead don't call output_abbrev_section
	nor emit abbrev_section_label in that case.


	Jakub

Comments

Jason Merrill June 29, 2011, 10:26 p.m. UTC | #1
OK.

Jason
Rainer Orth June 30, 2011, 3:25 p.m. UTC | #2
Jakub,

> the label in that case at all.  Rainer, does this make SGI tools
> happy?

to try this, I'll have to do a full rebuild which is quite slow.  I'll
see during the next bootstrap this weekend.

Thanks.
        Rainer
diff mbox

Patch

--- gcc/dwarf2out.c.jj	2011-06-28 16:12:08.000000000 +0200
+++ gcc/dwarf2out.c	2011-06-29 19:25:12.000000000 +0200
@@ -11358,9 +11358,6 @@  output_abbrev_section (void)
 {
   unsigned long abbrev_id;
 
-  if (abbrev_die_table_in_use == 1)
-    return;
-
   for (abbrev_id = 1; abbrev_id < abbrev_die_table_in_use; ++abbrev_id)
     {
       dw_die_ref abbrev = abbrev_die_table[abbrev_id];
@@ -25226,9 +25223,12 @@  dwarf2out_finish (const char *filename)
   output_comp_unit (comp_unit_die (), debug_info_level >= DINFO_LEVEL_VERBOSE);
 
   /* Output the abbreviation table.  */
-  switch_to_section (debug_abbrev_section);
-  ASM_OUTPUT_LABEL (asm_out_file, abbrev_section_label);
-  output_abbrev_section ();
+  if (abbrev_die_table_in_use != 1)
+    {
+      switch_to_section (debug_abbrev_section);
+      ASM_OUTPUT_LABEL (asm_out_file, abbrev_section_label);
+      output_abbrev_section ();
+    }
 
   /* Output location list section if necessary.  */
   if (have_location_lists)