* symtab.c (find_pc_sect_line): Revise method used for finding
authorKevin Buettner <kevinb@redhat.com>
Tue, 27 Mar 2001 01:17:47 +0000 (01:17 +0000)
committerKevin Buettner <kevinb@redhat.com>
Tue, 27 Mar 2001 01:17:47 +0000 (01:17 +0000)
the ending pc.

gdb/ChangeLog
gdb/symtab.c

index 1a21bc91fbcdfe8c4af532bc49d6979eda865cb9..e880aebd8088289acc1677e81146e387745b2b88 100644 (file)
@@ -1,3 +1,8 @@
+2001-03-26  Kevin Buettner  <kevinb@redhat.com>
+
+       * symtab.c (find_pc_sect_line): Revise method used for finding
+       the ending pc.
+
 2001-03-26  Mark Kettenis  <kettenis@gnu.org>
 
        * i386-linux-tdep.c (i386_linux_sigtramp_saved_pc,
index 515612e5ba66f5ec797761c6e2cc95010d978046..a51126a1d8c10262c0b20a278d27c856eb63bf98 100644 (file)
@@ -1759,11 +1759,18 @@ find_pc_sect_line (CORE_ADDR pc, struct sec *section, int notcurrent)
        {
          best = prev;
          best_symtab = s;
-         /* If another line is in the linetable, and its PC is closer
-            than the best_end we currently have, take it as best_end.  */
-         if (i < len && (best_end == 0 || best_end > item->pc))
-           best_end = item->pc;
+
+         /* Discard BEST_END if it's before the PC of the current BEST.  */
+         if (best_end <= best->pc)
+           best_end = 0;
        }
+
+      /* If another line (denoted by ITEM) is in the linetable and its
+         PC is after BEST's PC, but before the current BEST_END, then
+        use ITEM's PC as the new best_end.  */
+      if (best && i < len && item->pc > best->pc
+          && (best_end == 0 || best_end > item->pc))
+       best_end = item->pc;
     }
 
   if (!best_symtab)