This is the mail archive of the gcc-help@gcc.gnu.org mailing list for the GCC 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]

Re: Recording of register saves in DWARF2 CFI


Andrew Haley wrote:
James Molloy wrote:
Hi,

I'm attempting to write a cross-platform debugger for a hobby kernel,
and as part of which I use DWARF-2's CFI stack unwinding functionality.

This works perfectly, however I would also like to obtain the parameters
given to each function call on the stack. I can do this easily in x86 as
all the parameters are passed via stack, however on x64 and MIPS I'm
having difficulty, as the first X parameters are passed via register.

The DWARF-2 specification makes allowance for this - the CFI system is
capable of determining the value of any and every register at the start
of any stack frame - but I have noticed that GCC doesn't record
unwinding rules for many registers (seemingly any register not essential
to the finding of the CFA or return address).

Is there any flag available to enable recording of every register, or,
even better, certain registers, for every stack frame? I've grepped the
manual to no avail.

Surely this is in the debuginfo, not the unwinder data. Aren't you looking in the wrong place?

Andrew.
Although it is indeed possible to pull this information out of the debuginfo, the debuginfo section is *massive* and gives far more information than I need or want - it describes the entire low level structure of the program - all I want is to be able to find where parameters are!

The .debug_frames section is far smaller by comparison and seeing as I already use it for stack unwinding I felt that using it along with an idea of the default ABI for a given architecture would provide a useful and compact way of determining function parameters and helping my developers.

The DWARF definition version 3.0 section 6.4 describes editing "activations" - this section seems to imply that the full register set should be available for editing for any unwound stack frame - not just select registers.


Has this been implemented in GCC? Or was there an assumption that most debuggers would use the .debug_info information anyway so it was redundant? (Or, am I interpreting things incorrectly!)


Thanks,

James Molloy


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]