This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [PATCH] Unwinding CFI for x86_64 signal frame (__restore_rt)
Hi Jakub,
On Mon, 27 Nov 2006 12:43:39 +0100, Jakub Jelinek wrote:
...
> I plan to change fix that on the gas side soon,
you plan to support DW_OP_* as pseudoinstructions for gas(1)? That would be
great. Sure I could code it into the `.eh_frame' section by hand but that's
ugly and currently this bug is not a stopper, signal frame unwinding came just
as logical related bugfix.
If it is a part of your planned CFI GCC extension it could be soon.
I'll try to propose something if the implementation would take too long.
> > +/* Define if CFI x86_64 rflags is available. */
> > +#undef HAVE_ASM_CFI_RFLAGS
>
> I don't think this conditional is needed, we can use numbers instead
> of register names and they will work with any unwinder.
As missing CFI is not a showstopper I chose the better code readability.
OK, you would like more the commented numbers.
...
> > +/* sizeof (struct rt_sigframe) */
> > +#define FRAME_SIZE 0x238
...
> I think you should use here (and in the offsets of the various registers)
> a *.sym file to precompute macros and use them.
I see now, thanks for the suggestion.
> Another, more important thing, you are assuming the size of signal
> frame is always 0x238 bytes.
...
> This can be represented in DWARF3 with DW_CFA_def_cfa_expression
> to define new CFA and DW_CFA_expression for all the registers
OK, thanks for pointing me this way is right.
* I believed these glibc parts are tightly bound to the kernel to accept
such ABI compatibility interdependencies.
* I missed gas(1) .cfi_* pseudoinstructions for the *_expression types.
Best Regards,
Jan