This is the mail archive of the
binutils@sources.redhat.com
mailing list for the binutils project.
PATCH: Properly set low_pc in dwarf2.c
- From: "H. J. Lu" <hjl at lucon dot org>
- To: binutils at sources dot redhat dot com
- Date: Sat, 4 Jun 2005 17:11:08 -0700
- Subject: PATCH: Properly set low_pc in dwarf2.c
decode_line_info assumes low_pc == 0 means low_pc is unset, which is
wrong. low_pc can set to 0. This patch fixes it.
H.J.
----
2005-06-04 H.J. Lu <hongjiu.lu@intel.com>
* dwarf2.c (decode_line_info): Properly set low_pc.
--- bfd/dwarf2.c.low 2005-06-04 10:32:14.000000000 -0700
+++ bfd/dwarf2.c 2005-06-04 16:59:54.000000000 -0700
@@ -1070,6 +1070,7 @@ decode_line_info (struct comp_unit *unit
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
/* 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
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
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;