Re: GDB interactions with GCC

Jean Christophe Beyler
2009-11-03T17:55:02Z

On Tue, Nov 3, 2009 at 12:38 PM, Paul Pluzhnikov <ppluzhnikov@google.com> wrote:
> On Tue, Nov 3, 2009 at 9:22 AM, Jean Christophe Beyler
> <jean.christophe.beyler@gmail.com> wrote:
>
>> If so, doesn't that mean that if we want GDB on an architecture that
>> does not require any stack copies, we still have to generate those
>> uselessly (except for GDB ;-)) ?
>
> You appear to be under mistaken assumption that GDB can only access stack
> in the inferior process.

Yes that I was aware of.

> GDB can access *any* memory in the inferior, as well as registers. DWARF
> debug info (which GCC generates) tells GDB where to find any variable. The
> location (described by DWARF) could be "in register", "in memory at address
> NNNN", or a complicated expression involving possibly multiple registers,
> offsets and memory.

Also, I know that, though I don't yet know how much GCC generates
automatically and how much work I must do in my port (but that's a GCC
issue).

> DWARF also describes how the register set changes when you step to
> previous frame, so once you get to (say) frame #5, GDB knows the values
> registers had in that frame, and can again (using DWARF debug info) tell you
> values of parameters, locals, etc.

My issue is this :

> so once you get to (say) frame #5, GDB knows the values registers had in that frame

How does it know if for example I do :

int foo (int a)
{
return bar (a + 1);
}

On my architecture, I can have the code for foo reduced to :

add FirstInputRegister, FirstInputRegister, 1
call bar
branch return.

Therefore, once I'm in bar, the input register that foo had has been
lost since it's been incremented. The original value of a has been
lost since it is not in a particular register, was not spilled.

In this case, how does GDB handle it ? Is it still something that is
generated by DWARF ? Or is it now lost and if I want to support this
for my architecture, I must update the ABI to at least spill that
input register?

> I think you should give http://dwarfstd.org/Dwarf3Std.php (and in particular
> 2.6: Location Descriptions) at least a quick read.

I was reading this version
http://www.eagercon.com/dwarf/dwarf-2.0.0.pdf since I saw in GCC the
support of DWARF 2 :-). I'll read the section you speak of.

Thanks for your help,
Jc