[PATCH] dwarf: Multi-register CFI address support
Andrew Stubbs
ams@codesourcery.com
Fri Aug 28 12:04:51 GMT 2020
Hi all,
This patch introduces DWARF CFI support for architectures that require
multiple registers to hold pointers, such as the stack pointer, frame
pointer, and return address. The motivating case is the AMD GCN
architecture which has 64-bit address pointers, but 32-bit registers.
The current implementation permits program variables to span as many
registers as they need, but assumes that CFI expressions will only need
a single register for each frame value.
To be fair, the DWARF standard makes a similar assumption; the engineers
working on LLVM and GDB, at AMD, have therefore invented some new DWARF
operators that they plan to propose for a future standard. Only one is
relevant here, however: DW_OP_LLVM_piece_end. (Unfortunately this
clashes with an AArch64 extension, but I think we can cope using an
alias -- only GCC dumps will be confusing.)
My approach is to change the type representing a DWARF register
throughout the CFI code. This permits the register span information to
propagate to where it is needed.
I've taken advantage of C++ struct copies and operator== to minimize the
amount of refactoring required. I'm not sure this meets the GCC
guidelines exactly, but if not I can change that once the basic form is
agreed. (I also considered an operator= to make assigning single dwreg
values transparent, but that hid too many invalid assumptions.)
OK to commit? (Although, I'll hold off until AMD release the compatible
GDB.)
Thanks
Andrew
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 200828-dwarf-reg-spans.patch
Type: text/x-patch
Size: 29866 bytes
Desc: not available
URL: <https://gcc.gnu.org/pipermail/gcc-patches/attachments/20200828/c03808da/attachment-0001.bin>
More information about the Gcc-patches
mailing list