mirror of
https://github.com/torvalds/linux.git
synced 2026-05-12 16:18:45 +02:00
tools/nolibc: MIPS: fix clobbers of 'lo' and 'hi' registers on different ISAs
All MIPS ISAs before r6 use the 'lo' and 'hi' special registers. These are clobbered by system calls and need to be marked as such to avoid miscompilations. Currently nolibc ties the clobbers to the ABI. But this is wrong and leads to ISA<->ABI combinations which are not handled correctly, leading to compiler errors or miscompilations. Handle all different combinations of ABI and ISA. Fixes:a6a2a8a429("tools/nolibc: MIPS: add support for N64 and N32 ABIs") Fixes:66b6f755ad("rcutorture: Import a copy of nolibc") Suggested-by: Maciej W. Rozycki <macro@orcam.me.uk> Link: https://lore.kernel.org/lkml/alpine.DEB.2.21.2603141744240.55200@angie.orcam.me.uk/ Signed-off-by: Thomas Weißschuh <thomas.weissschuh@linutronix.de> Link: https://patch.msgid.link/20260317-nolibc-mips-clobber-v2-1-5b9a97761a9e@linutronix.de Signed-off-by: Thomas Weißschuh <linux@weissschuh.net>
This commit is contained in:
parent
9bc019e7ba
commit
e83b07dc8c
|
|
@ -39,11 +39,19 @@
|
|||
* - stack is 16-byte aligned
|
||||
*/
|
||||
|
||||
#if !defined(__mips_isa_rev) || __mips_isa_rev < 6
|
||||
#define _NOLIBC_SYSCALL_CLOBBER_HI_LO "hi", "lo"
|
||||
#else
|
||||
#define _NOLIBC_SYSCALL_CLOBBER_HI_LO "$0"
|
||||
#endif
|
||||
|
||||
#if defined(_ABIO32)
|
||||
|
||||
#define _NOLIBC_SYSCALL_CLOBBERLIST \
|
||||
"memory", "cc", "at", "v1", "hi", "lo", \
|
||||
"t0", "t1", "t2", "t3", "t4", "t5", "t6", "t7", "t8", "t9"
|
||||
"memory", "cc", "at", "v1", \
|
||||
"t0", "t1", "t2", "t3", "t4", "t5", "t6", "t7", "t8", "t9", \
|
||||
_NOLIBC_SYSCALL_CLOBBER_HI_LO
|
||||
|
||||
#define _NOLIBC_SYSCALL_STACK_RESERVE "addiu $sp, $sp, -32\n"
|
||||
#define _NOLIBC_SYSCALL_STACK_UNRESERVE "addiu $sp, $sp, 32\n"
|
||||
|
||||
|
|
@ -52,7 +60,8 @@
|
|||
/* binutils, GCC and clang disagree about register aliases, use numbers instead. */
|
||||
#define _NOLIBC_SYSCALL_CLOBBERLIST \
|
||||
"memory", "cc", "at", "v1", \
|
||||
"10", "11", "12", "13", "14", "15", "24", "25"
|
||||
"10", "11", "12", "13", "14", "15", "24", "25", \
|
||||
_NOLIBC_SYSCALL_CLOBBER_HI_LO
|
||||
|
||||
#define _NOLIBC_SYSCALL_STACK_RESERVE
|
||||
#define _NOLIBC_SYSCALL_STACK_UNRESERVE
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user