[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v9 28/31] common-user: Add safe syscall handling for loongarc
From: |
Richard Henderson |
Subject: |
Re: [PATCH v9 28/31] common-user: Add safe syscall handling for loongarch64 hosts |
Date: |
Tue, 14 Dec 2021 11:29:51 -0800 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.14.0 |
On 12/14/21 12:01 AM, WANG Xuerui wrote:
+ move $t0, $a0 /* signal_pending pointer */
...
+safe_syscall_start:
+ /* If signal_pending is non-zero, don't do the call */
+ ld.w $t1, $t0, 0
+ bnez $t1, 2f
+ syscall 0
We need a non-syscall clobbered register for signal_pending, per the bug fixed in
5d9f3ea0817215ad4baac5aa30414e9ebbaaf0d6.
In the case of riscv, because of the way exceptions are delivered, there are no
syscall-clobbered registers (by the time syscall is distinguished from interrupt, all
registers have been saved).
In the case of mips, there are no non-syscall-clobbered registers that are not also
call-saved or syscall arguments, so I had to allocate a stack frame and save/restore s0.
For loongarch64, according to glibc,
#define __SYSCALL_CLOBBERS \
"$t0", "$t1", "$t2", "$t3", "$t4", "$t5", "$t6", "$t7", "$t8", "memory"
which does suggest that a6 is unused, saved across the syscall, and also call-clobbered
(so we don't have to allocate a stack frame).
I've had a browse through the loongarch kernel code and that seems to be all true.
(Curiously, loongarch restores more registers than it saves on the way out of
handle_syscall. There may be a subtle reason for that, or room for improvement.)
r~
- [PATCH v9 22/31] tcg/loongarch64: Implement simple load/store ops, (continued)
- [PATCH v9 22/31] tcg/loongarch64: Implement simple load/store ops, WANG Xuerui, 2021/12/14
- [PATCH v9 26/31] tcg/loongarch64: Implement tcg_target_init, WANG Xuerui, 2021/12/14
- [PATCH v9 27/31] tcg/loongarch64: Register the JIT, WANG Xuerui, 2021/12/14
- [PATCH v9 23/31] tcg/loongarch64: Add softmmu load/store helpers, implement qemu_ld/qemu_st ops, WANG Xuerui, 2021/12/14
- [PATCH v9 30/31] configure, meson.build: Mark support for loongarch64 hosts, WANG Xuerui, 2021/12/14
- [PATCH v9 29/31] linux-user: Implement CPU-specific signal handler for loongarch64 hosts, WANG Xuerui, 2021/12/14
- [PATCH v9 28/31] common-user: Add safe syscall handling for loongarch64 hosts, WANG Xuerui, 2021/12/14
- Re: [PATCH v9 28/31] common-user: Add safe syscall handling for loongarch64 hosts,
Richard Henderson <=