This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB 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] | |
Hello,
This is the second attempt at fixing a problem that was documented in:
http://www.sourceware.org/ml/gdb-patches/2006-04/msg00345.html
A consensus seemed to have emerged while we discussed the patch I
submitted for it in:
http://www.sourceware.org/ml/gdb-patches/2006-04/msg00367.html
Summary of the problem: When we do next/step operations, we end up
parsing the top frame function prologue and creating a frame_info with
it. Unfortunately, at that point, the breakpoints are still inserted and
that causes the prologue analyzer to misinterpret the function prologue
and consequently breaks unwinding a bit.
I'm just only realizing that I didn't produce a new testcase for it,
so I will do that and send it tonight. Just to refresh our memory,
here is how to reproduce:
#include <stdio.h>
void
hello (void)
{
printf ("Hello world.\n");
}
int
main (void)
{
hello ();
return 0;
}
Compile this code on i386 using STABS. Using dwarf won't show the issue
because GDB doesn't need to do prologue analysis when the frame info is
available.
Then follow the guide:
(gdb) b *hello
Breakpoint 1 at 0x401050: file foo.c, line 5.
(gdb) run
Starting program: /[...]/foo.exe
Breakpoint 1, hello () at foo.c:5
5 {
(gdb) stepi
0x00401051 5 {
(gdb) bt
#0 0x00401051 in hello () at foo.c:5
#1 0x00401093 in main () at foo.c:12
(gdb) stepi
0x00401053 in hello () at foo.c:5
5 {
So we're at the third instruction of the function. Here is the backtrace
we get when I request it:
(gdb) bt
#0 0x00401053 in hello () at foo.c:5
#1 0x0022ee88 in ?? ()
#2 0x00401093 in main () at foo.c:12
We get an extra frame between hello() and main().
2006-07-26 Joel Brobecker <brobecker@adacore.com>
* i386-tdep.c (i386_follow_jump): Use read_memory_nobpt to read
instructions.
(i386_analyze_struct_return): Likewise.
(i386_skip_probe): Likewise.
(i386_match_insn): Likewise.
(i386_analyze_frame_setup): Likewise.
(i386_analyze_register_saves): Likewise.
(i386_skip_prologue): Likewise.
This patch requires that the patch submitted at the address below
be applied first (it undeprecates read_memory_nobpt):
http://www.sourceware.org/ml/gdb-patches/2006-07/msg00397.html
Tested on x86-linux with stabs as the debugging info format.
No regression.
OK to apply?
Thanks,
--
Joel
Attachment:
stepi.diff
Description: Text document
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |