* symtab.c (decode_line_1): If SKIP_PROLOGUE leaves us in
authorJohn Gilmore <gnu@cygnus>
Fri, 6 Dec 1991 09:22:33 +0000 (09:22 +0000)
committerJohn Gilmore <gnu@cygnus>
Fri, 6 Dec 1991 09:22:33 +0000 (09:22 +0000)
mid-line, be more careful about possibly advancing to the next line.

gdb/ChangeLog
gdb/dwarfread.c
gdb/symtab.c

index 456117eb58924ccc15c9551f5582a88243da3501..977dbecaf7b929f4fb6d18762ebf00a5219c68c0 100644 (file)
@@ -1,3 +1,8 @@
+Thu Dec  5 21:53:21 1991  John Gilmore  (gnu at cygnus.com)
+
+       * symtab.c (decode_line_1):  If SKIP_PROLOGUE leaves us in
+       mid-line, be more careful about possibly advancing to the next line.
+
 Thu Dec  5 18:59:51 1991  Michael Tiemann  (tiemann at cygnus.com)
 
        * cplus-dem.c (cplus_demangle): Call `string_need' when
index b2dcd87acc855fe3ad06de86aa76f1c1e92b054a..ab66d6f59e8b83a527ce19abd139e8bc8fca1625 100644 (file)
@@ -1,4 +1,3 @@
-
 /* DWARF debugging format support for GDB.
    Copyright (C) 1991 Free Software Foundation, Inc.
    Written by Fred Fish at Cygnus Support, portions based on dbxread.c,
index a03f7588504794cc99b121549d95b884e815ae08..cd5c28932c41152e555bcedb27beb97b1503d45f 100644 (file)
@@ -2114,7 +2114,16 @@ decode_line_1 (argptr, funfirstline, default_symtab, default_line)
          /* Convex: no need to suppress code on first line, if any */
          val.pc = pc;
 #else
-         val.pc = (val.end && val.pc != pc) ? val.end : pc;
+         /* If SKIP_PROLOGUE left us in mid-line, and the next line is still
+            part of the same function:
+               advance to next line, 
+               recalculate its line number (might not be N+1).  */
+         if (val.pc != pc && val.end &&
+             find_pc_misc_function (pc) == find_pc_misc_function (val.end)) {
+           pc = val.end;       /* First pc of next line */
+           val = find_pc_line (pc, 0);
+         }
+         val.pc = pc;
 #endif
          values.sals = (struct symtab_and_line *)xmalloc (sizeof (struct symtab_and_line));
          values.sals[0] = val;