[RFA] Pb stepping inside DLL function

Michael Snyder msnyder@redhat.com
Thu Jun 24 00:27:00 GMT 2004


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,




More information about the Gdb-patches mailing list