* breakpoint.c (expand_line_sal_maybe): When explicit_line,
authorJerome Guitton <guitton@adacore.com>
Fri, 19 Jun 2009 15:14:11 +0000 (15:14 +0000)
committerJerome Guitton <guitton@adacore.com>
Fri, 19 Jun 2009 15:14:11 +0000 (15:14 +0000)
skip prologue on each sals.
(skip_prologue_sal): Return explicit_line and explicit_pc
unmodified.

gdb/ChangeLog
gdb/breakpoint.c

index bdad408..ddaaff4 100644 (file)
@@ -1,3 +1,10 @@
+2009-06-19  Jerome Guitton  <guitton@adacore.com>
+
+       * breakpoint.c (expand_line_sal_maybe): When explicit_line,
+       skip prologue on each sals.
+       (skip_prologue_sal): Return explicit_line and explicit_pc
+       unmodified.
+
 2009-06-19  Tristan Gingold  <gingold@adacore.com>
 
        * darwin-nat.c (_initialize_darwin_inferior): Remove commented-out
index 99909e7..c32ad90 100644 (file)
@@ -207,6 +207,9 @@ static void disable_trace_command (char *, int);
 
 static void trace_pass_command (char *, int);
 
+static void skip_prologue_sal (struct symtab_and_line *sal);
+
+
 /* Flag indicating that a command has proceeded the inferior past the
    current breakpoint.  */
 
@@ -5436,6 +5439,15 @@ expand_line_sal_maybe (struct symtab_and_line sal)
            }
        }
     }
+  else
+    {
+      for (i = 0; i < expanded.nelts; ++i)
+       {
+         /* If this SAL corresponds to a breakpoint inserted using a
+            line number, then skip the function prologue if necessary.  */
+         skip_prologue_sal (&expanded.sals[i]);
+       }
+    }
 
   
   if (expanded.nelts <= 1)
@@ -5903,7 +5915,8 @@ set_breakpoint (char *address, char *condition,
 
 /* Adjust SAL to the first instruction past the function prologue.
    The end of the prologue is determined using the line table from
-   the debugging information.
+   the debugging information.  explicit_pc and explicit_line are
+   not modified.
 
    If SAL is already past the prologue, then do nothing.  */
 
@@ -5918,7 +5931,11 @@ skip_prologue_sal (struct symtab_and_line *sal)
 
   start_sal = find_function_start_sal (sym, 1);
   if (sal->pc < start_sal.pc)
-    *sal = start_sal;
+    {
+      start_sal.explicit_line = sal->explicit_line;
+      start_sal.explicit_pc = sal->explicit_pc;
+      *sal = start_sal;
+    }
 }
 
 /* Helper function for break_command_1 and disassemble_command.  */