On 10/19/21 9:44 AM, Warner Losh wrote:
> + /*
> + * The code has to load r7 manually rather than using
> + * "ldr r7, =SYS_return to make sure the size of the
> + * code is correct.
> + */
This comment was applicable to the original freebsd asm source; it has no bearing on the
hex instructions below
Yea, the code size will always be correct...
> + uint32_t sigtramp_code[] = {
> + /* 1 */ 0xE1A0000D, /* mov r0, sp */
> + /* 2 */ 0xE2800000 + sigf_uc, /* add r0, r0, #SIGF_UC */
I guess this was a bit of thumb1 source that accidentally became ABI?
Otherwise I can't think why you wouldn't squish the mov into the add.
It's in our ABI. gdb and others know what the sigcode signature looks like for sigreturn
so we can't really change it without a lot of pain... So we're kinda stuck with very
old-school ARM code sequences for our modern armv7 port. There's likely no
reason to have the defensive call to sys_exit either, but like I said, we're kinda
stuck with it w/o replacing it in a number of external sources... You may see similar
issues with the aarch64 code I'll post next.
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
thanks!
Warner
r~