Browse Source

fix riscv64 syscall asm constraint

having "+r"(a0) is redundant with "0"(a0) in syscalls with at least 1
arg, which is arguably a constraint violation (clang treats it as
such), and an invalid input with indeterminate value in the 0-arg
case. use the "=r"(a0) form instead.
master
Rich Felker 7 years ago
parent
commit
8eb49e0485
  1. 2
      arch/riscv64/syscall_arch.h

2
arch/riscv64/syscall_arch.h

@ -3,7 +3,7 @@
#define __asm_syscall(...) \ #define __asm_syscall(...) \
__asm__ __volatile__ ("ecall\n\t" \ __asm__ __volatile__ ("ecall\n\t" \
: "+r"(a0) : __VA_ARGS__ : "memory"); \ : "=r"(a0) : __VA_ARGS__ : "memory"); \
return a0; \ return a0; \
static inline long __syscall0(long n) static inline long __syscall0(long n)

Loading…
Cancel
Save