2005-06-06 H.J. Lu <hongjiu.lu@intel.com>
authorH.J. Lu <hjl.tools@gmail.com>
Mon, 6 Jun 2005 14:16:45 +0000 (14:16 +0000)
committerH.J. Lu <hjl.tools@gmail.com>
Mon, 6 Jun 2005 14:16:45 +0000 (14:16 +0000)
* dwarf2.c (decode_line_info): Properly set low_pc.

bfd/ChangeLog
bfd/dwarf2.c

index 85b883ca7a9496353cd6717520e127e036e1f208..2aef89f0b7bca0464cddddf1187c4c556a93f677 100644 (file)
@@ -1,3 +1,7 @@
+2005-06-06  H.J. Lu  <hongjiu.lu@intel.com>
+
+       * dwarf2.c (decode_line_info): Properly set low_pc.
+
 2005-06-06  Alan Modra  <amodra@bigpond.net.au>
 
        * elf64-pcc.c (ppc64_elf_gc_mark_hook): For the local sym in .opd
index d13fd756750434631cd6ede9d3d8e54ad6d392d2..1b08f283916e6a3fabbc8a6e372db0996608cf2b 100644 (file)
@@ -1070,6 +1070,7 @@ decode_line_info (struct comp_unit *unit, struct dwarf2_debug *stash)
         address, we must compare on every DW_LNS_copy, etc.  */
       bfd_vma low_pc  = 0;
       bfd_vma high_pc = 0;
+      bfd_boolean low_pc_set = FALSE;
 
       /* Decode the table.  */
       while (! end_sequence)
@@ -1087,8 +1088,11 @@ decode_line_info (struct comp_unit *unit, struct dwarf2_debug *stash)
              /* Append row to matrix using current values.  */
              add_line_info (table, address, filename, line, column, 0);
              basic_block = 1;
-             if (low_pc == 0 || address < low_pc)
-               low_pc = address;
+             if (!low_pc_set || address < low_pc)
+               {
+                 low_pc_set = TRUE;
+                 low_pc = address;
+               }
              if (address > high_pc)
                high_pc = address;
            }
@@ -1106,8 +1110,11 @@ decode_line_info (struct comp_unit *unit, struct dwarf2_debug *stash)
                  end_sequence = 1;
                  add_line_info (table, address, filename, line, column,
                                 end_sequence);
-                 if (low_pc == 0 || address < low_pc)
-                   low_pc = address;
+                 if (!low_pc_set || address < low_pc)
+                   {
+                     low_pc_set = TRUE;
+                     low_pc = address;
+                   }
                  if (address > high_pc)
                    high_pc = address;
                  arange_add (unit->abfd, &unit->arange, low_pc, high_pc);
@@ -1159,8 +1166,11 @@ decode_line_info (struct comp_unit *unit, struct dwarf2_debug *stash)
            case DW_LNS_copy:
              add_line_info (table, address, filename, line, column, 0);
              basic_block = 0;
-             if (low_pc == 0 || address < low_pc)
-               low_pc = address;
+             if (!low_pc_set || address < low_pc)
+               {
+                 low_pc_set = TRUE;
+                 low_pc = address;
+               }
              if (address > high_pc)
                high_pc = address;
              break;