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
Wed Dec 21 21:34:36 PST 2022
On 12/21/22 11:45, Vineet Gupta wrote:
>> + __extension__ union {
>> + unsigned long long int fpregs[66] __attribute__ ((__aligned__ (16)));
>> + /* Kernel uses struct __riscv_fp_state to save f0-f31 and fcsr
>> + to the signal context, so please use sc_fpregs to access these
>> + fpu registers from the signal context. */
>> + union __riscv_fp_state sc_fpregs;
>> + };
>> +
>> + __u8 sc_extn[] __attribute__((__aligned__(16)));
>> };
>>
>> #endif
>>
>>
>> This change can reduce memory waste size to 16 bytes in the worst
>> case. The best case happens when the sc_extn locates at a 16-byte
>> aligned address. The size of the struct sigcontext is still the same.
>
> Its a neat trick. But the additional stack alignment means we could still potentially
> changing the size of sigcontext - even if by 16 bytes - again for existing binaries.
The riscv sigcontext is already aligned by 16, via __riscv_q_ext_state, fwiw.
r~
More information about the linux-riscv
mailing list