Re: [RFA] Pb stepping inside DLL function

Michael Snyder
2004-06-24T00:27:42Z

Joel, did you forget to attach the patch? ;-)

Joel Brobecker wrote:
> Hello,
>
> We have the following little C program (a.c):
>
> #include <stdio.h>
>
> extern _stdcall int sub ();
>
> main ()
> {
> int a = 0;
>
> a = sub ();
> printf ("%d\n", a);
> }
>
> ``sub()'' is a function provided by a DLL. It has all the necessary
> debug information. The following transcript shows that GDB is currently
> unable to step into sub():
>
> (gdb) start
> Breakpoint 1 at 0x4012d2: file a.c, line 7.
> Starting program: /[...]/a.exe
> main () at a.c:7
> 7 int a = 0;
> (gdb) step
> 9 a = sub ();
> (gdb) p a
> $1 = 0
> (gdb) step
> 10 printf ("%d\n", a);
> (gdb) print a
> $2 = 5
>
> During the step, GDB lands inside sub@0, which is the trampoline
> for sub(), but doesn't realize it. The fix is to teach GDB how to
> recognize them, and hand to find where they will eventually take us.
> For that, I found a function that was actually dead but did exactly
> what I needed, so I reused it.
>
> 2004-06-23 Joel Brobecker <brobecker@gnat.com>
>
> * i386-cygwin-tdep.c (i386-cygwin-tdep.c): New function.
> (i386_cygwin_in_solib_call_trampoline): New function.
> (i386_cygwin_init_abi): Initialize the in_solib_call_trampoline
> and skip_trampoline_code gdbarch methods.
>
> Tested on x86-windows (XP), no regression.
> OK to apply?
>
> Thanks,