* dwarf.c (display_debug_lines_raw): Do not treat .debug_line.dwo
authorNick Clifton <nickc@redhat.com>
Thu, 2 May 2013 10:18:38 +0000 (10:18 +0000)
committerNick Clifton <nickc@redhat.com>
Thu, 2 May 2013 10:18:38 +0000 (10:18 +0000)
sections as if they were fragmentary .debug_line sections.
(display_debug_lines_decoded): Likewise.

binutils/ChangeLog
binutils/dwarf.c

index 58f7657..9426e34 100644 (file)
@@ -1,3 +1,9 @@
+2013-05-02  Nick Clifton  <nickc@redhat.com>
+
+       * dwarf.c (display_debug_lines_raw): Do not treat .debug_line.dwo
+       sections as if they were fragmentary .debug_line sections.
+       (display_debug_lines_decoded): Likewise.
+
 2013-04-29  Nick Clifton  <nickc@redhat.com>
 
        * dwarf.c (read_debug_line_header): New function.  Reads in a
index b11169b..774904c 100644 (file)
@@ -2659,7 +2659,10 @@ display_debug_lines_raw (struct dwarf_section *section,
       unsigned char *end_of_sequence;
        int i;
 
-      if (const_strneq (section->name, ".debug_line."))
+      if (const_strneq (section->name, ".debug_line.")
+         /* Note: the following does not apply to .debug_line.dwo sections.
+            These are full debug_line sections.  */
+         && strcmp (section->name, ".debug_line.dwo") != 0)
        {
          /* Sections named .debug_line.<foo> are fragments of a .debug_line
             section containing just the Line Number Statements.  They are
@@ -2668,9 +2671,9 @@ display_debug_lines_raw (struct dwarf_section *section,
             garbage collection decides to discard a .text.<foo> section it
             can then also discard the line number information in .debug_line.<foo>.
 
-            Since the section is a fragmnent it does not have the details
+            Since the section is a fragment it does not have the details
             needed to fill out a LineInfo structure, so instead we use the
-            details from the last one we processed.  */
+            details from the last full debug_line section that we processed.  */
          end_of_sequence = end;
          standard_opcodes = NULL;
          linfo = saved_linfo;
@@ -2994,18 +2997,12 @@ display_debug_lines_decoded (struct dwarf_section *section,
       unsigned char **directory_table = NULL;
       unsigned int n_directories = 0;
 
-      if (const_strneq (section->name, ".debug_line."))
+      if (const_strneq (section->name, ".debug_line.")
+         /* Note: the following does not apply to .debug_line.dwo sections.
+            These are full debug_line sections.  */
+         && strcmp (section->name, ".debug_line.dwo") != 0)
         {
-         /* Sections named .debug_line.<foo> are fragments of a .debug_line
-            section containing just the Line Number Statements.  They are
-            created by the assembler and intended to be used alongside gcc's
-            -ffunction-sections command line option.  When the linker's
-            garbage collection decides to discard a .text.<foo> section it
-            can then also discard the line number information in .debug_line.<foo>.
-
-            Since the section is a fragmnent it does not have the details
-            needed to fill out a LineInfo structure, so instead we use the
-            details from the last one we processed.  */
+         /* See comment in display_debug_lines_raw().  */
          end_of_sequence = end;
          standard_opcodes = NULL;
          linfo = saved_linfo;