Adding V-ext regs to signal context w/o expanding kernel struct sigcontext to avoid glibc ABI break
Richard Henderson
richard.henderson at linaro.org
Thu Dec 22 14:33:25 PST 2022
On 12/22/22 10:33, Andy Chiu wrote:
> I wrote a PoC patch for this and it has been pushed into the following git tree:
> https://github.com/sifive/riscv-linux/tree/dev/andyc/for-next-v13
I had a look at your include/uapi/, and it looks good.
Mere nits:
> struct __riscv_q_ext_state {
> __u64 f[64] __attribute__((aligned(16)));
> __u32 fcsr;
> /*
> * Reserved for expansion of sigcontext structure. Currently zeroed
> * upon signal, and must be zero upon sigreturn.
> */
> __u32 reserved[3];
> };
>
> struct __riscv_ctx_hdr {
> __u32 magic;
> __u32 size;
> __u32 reserved;
> };
Thinking about the _next_ extension on the chain, perhaps drop the 3rd word from here, so
that (&hdr + 1) is 8-byte aligned (which may be enough depending on what the extension
contains)?
> struct __riscv_extra_ext_header {
> __u64 ignored[64] __attribute__((aligned(16)));
> __u32 padding;
> /*
> * Reserved for expansion of sigcontext structure. Currently zeroed
> * upon signal, and must be zero upon sigreturn.
> */
> struct __riscv_ctx_hdr hdr;
> };
__u32 __padding[129]
or
__u64 __padding[65]
depending on your answer to the above?
It might reduce confusion to move (or replicate, for redundancy) the aligned(16) from the
innermost __riscv_q_ext_state.f[] to the outermost sc_fpregs and/or sigcontext.
More information about the linux-riscv
mailing list