This is the mail archive of the binutils@sources.redhat.com mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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;


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]