Re: How to tell gdb about dlls using remote protocol

Joel Brobecker
2007-02-01T17:52:21Z

[-- Attachment #1: Type: text/plain, Size: 1143 bytes --]

Hi Daniel,

> > The problem that I have run into, is that I can find no way to let gdb know
> > what dll's are inside the
> > debugee using the remote protocol.
> >
> > Does anyone know if there is a way to do this ?
>
> There's no way to do this yet. If you look at the list archives for
> the last several months, you'll see a patch (in the "GDB solib
> interface" thread) that implements something which might help. But it
> hasn't been finalized or committed yet (sorry Stephen - I just haven't
> had time).

This makes me wonder how well the debugger can work in certain
situations like when backtracing from DLL code. If the debugger
doesn't know where it is, then it's probably let to prologue analysis
to do the unwinding. Except that it cannot determine where the prologue
is... In that case, I see that the i386 unwinder assumes that the frame
base can be deduced from the SP and the SP offset. Unfortunately,
this SP offset can only be deduced from prologue analysis. Catch 22?

Mark,

What do you think of this (untested) patch? We we couldn't find
the function start address, the safest seems to be relying on ebp.

--
Joel

[-- Attachment #2: i386-tdep.c.diff --]
[-- Type: text/plain, Size: 717 bytes --]

Index: i386-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/i386-tdep.c,v
retrieving revision 1.230
diff -u -p -r1.230 i386-tdep.c
--- i386-tdep.c 29 Jan 2007 17:31:06 -0000 1.230
+++ i386-tdep.c 1 Feb 2007 17:50:51 -0000
@@ -979,6 +979,12 @@ i386_frame_cache (struct frame_info *nex
/* This will be added back below. */
cache->saved_regs[I386_EIP_REGNUM] -= cache->base;
}
+ else if (cache->pc == 0)
+ {
+ /* We couldn't determine the function start address, bla
+ bla bla. */
+ cache->saved_regs[I386_EBP_REGNUM] = 0;
+ }
else
{
frame_unwind_register (next_frame, I386_ESP_REGNUM, buf);