From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Cc: "Alistair Francis" <alistair.francis@wdc.com>,
alex.bennee@linaro.org, laurent@vivier.eu,
"Philippe Mathieu-Daudé" <f4bug@amsat.org>
Subject: [PATCH v5 20/26] linux-user/riscv: Implement setup_sigtramp
Date: Wed, 29 Sep 2021 09:05:47 -0400 [thread overview]
Message-ID: <20210929130553.121567-21-richard.henderson@linaro.org> (raw)
In-Reply-To: <20210929130553.121567-1-richard.henderson@linaro.org>
Create and record the rt signal trampoline.
This fixes a bug wrt libgcc fallback unwinding. It expects
the stack pointer to point to the siginfo_t, whereas we had
inexplicably placed our private signal trampoline at the start
of the signal frame instead of the end. Now moot because we
have removed it from the stack frame entirely.
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
linux-user/riscv/target_signal.h | 2 ++
linux-user/riscv/signal.c | 22 +++++++++++++---------
2 files changed, 15 insertions(+), 9 deletions(-)
diff --git a/linux-user/riscv/target_signal.h b/linux-user/riscv/target_signal.h
index f113ba9a55..3e36fddc9d 100644
--- a/linux-user/riscv/target_signal.h
+++ b/linux-user/riscv/target_signal.h
@@ -15,4 +15,6 @@ typedef struct target_sigaltstack {
#include "../generic/signal.h"
+#define TARGET_ARCH_HAS_SIGTRAMP_PAGE 1
+
#endif /* RISCV_TARGET_SIGNAL_H */
diff --git a/linux-user/riscv/signal.c b/linux-user/riscv/signal.c
index f7f33bc90a..a0f9542ce3 100644
--- a/linux-user/riscv/signal.c
+++ b/linux-user/riscv/signal.c
@@ -47,7 +47,6 @@ struct target_ucontext {
};
struct target_rt_sigframe {
- uint32_t tramp[2]; /* not in kernel, which uses VDSO instead */
struct target_siginfo info;
struct target_ucontext uc;
};
@@ -105,12 +104,6 @@ static void setup_ucontext(struct target_ucontext *uc,
setup_sigcontext(&uc->uc_mcontext, env);
}
-static inline void install_sigtramp(uint32_t *tramp)
-{
- __put_user(0x08b00893, tramp + 0); /* li a7, 139 = __NR_rt_sigreturn */
- __put_user(0x00000073, tramp + 1); /* ecall */
-}
-
void setup_rt_frame(int sig, struct target_sigaction *ka,
target_siginfo_t *info,
target_sigset_t *set, CPURISCVState *env)
@@ -127,14 +120,13 @@ void setup_rt_frame(int sig, struct target_sigaction *ka,
setup_ucontext(&frame->uc, env, set);
tswap_siginfo(&frame->info, info);
- install_sigtramp(frame->tramp);
env->pc = ka->_sa_handler;
env->gpr[xSP] = frame_addr;
env->gpr[xA0] = sig;
env->gpr[xA1] = frame_addr + offsetof(struct target_rt_sigframe, info);
env->gpr[xA2] = frame_addr + offsetof(struct target_rt_sigframe, uc);
- env->gpr[xRA] = frame_addr + offsetof(struct target_rt_sigframe, tramp);
+ env->gpr[xRA] = default_rt_sigreturn;
return;
@@ -203,3 +195,15 @@ badframe:
force_sig(TARGET_SIGSEGV);
return 0;
}
+
+void setup_sigtramp(abi_ulong sigtramp_page)
+{
+ uint32_t *tramp = lock_user(VERIFY_WRITE, sigtramp_page, 8, 0);
+ assert(tramp != NULL);
+
+ __put_user(0x08b00893, tramp + 0); /* li a7, 139 = __NR_rt_sigreturn */
+ __put_user(0x00000073, tramp + 1); /* ecall */
+
+ default_rt_sigreturn = sigtramp_page;
+ unlock_user(tramp, sigtramp_page, 8);
+}
--
2.25.1
next prev parent reply other threads:[~2021-09-29 13:27 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-09-29 13:05 [PATCH v5 00/26] linux-user: Move signal trampolines to new page Richard Henderson
2021-09-29 13:05 ` [PATCH v5 01/26] linux-user: Add infrastructure for a signal trampoline page Richard Henderson
2021-09-29 13:05 ` [PATCH v5 02/26] linux-user/aarch64: Implement setup_sigtramp Richard Henderson
2021-09-29 13:05 ` [PATCH v5 03/26] linux-user/arm: Drop v1 signal frames Richard Henderson
2021-09-29 13:05 ` [PATCH v5 04/26] linux-user/arm: Drop "_v2" from symbols in signal.c Richard Henderson
2021-09-29 13:05 ` [PATCH v5 05/26] linux-user/arm: Implement setup_sigtramp Richard Henderson
2021-09-29 13:45 ` Peter Maydell
2021-09-29 13:05 ` [PATCH v5 06/26] linux-user/alpha: " Richard Henderson
2021-09-29 13:05 ` [PATCH v5 07/26] linux-user/cris: " Richard Henderson
2021-09-29 13:05 ` [PATCH v5 08/26] linux-user/hexagon: " Richard Henderson
2021-09-29 13:05 ` [PATCH v5 09/26] linux-user/hppa: Document non-use of setup_sigtramp Richard Henderson
2021-09-29 13:05 ` [PATCH v5 10/26] linux-user/i386: Implement setup_sigtramp Richard Henderson
2021-09-29 13:05 ` [PATCH v5 11/26] linux-user/x86_64: Raise SIGSEGV if SA_RESTORER not set Richard Henderson
2021-09-29 13:05 ` [PATCH v5 12/26] linux-user/m68k: Implement setup_sigtramp Richard Henderson
2021-09-29 13:05 ` [PATCH v5 13/26] linux-user/microblaze: " Richard Henderson
2021-09-29 13:05 ` [PATCH v5 14/26] linux-user/mips: Tidy install_sigtramp Richard Henderson
2021-09-29 13:05 ` [PATCH v5 15/26] linux-user/mips: Implement setup_sigtramp Richard Henderson
2021-09-29 13:05 ` [PATCH v5 16/26] linux-user/nios2: Document non-use of setup_sigtramp Richard Henderson
2021-09-29 13:05 ` [PATCH v5 17/26] linux-user/openrisc: Implement setup_sigtramp Richard Henderson
2021-09-29 13:05 ` [PATCH v5 18/26] linux-user/ppc: Simplify encode_trampoline Richard Henderson
2021-09-29 13:05 ` [PATCH v5 19/26] linux-user/ppc: Implement setup_sigtramp Richard Henderson
2021-09-29 13:05 ` Richard Henderson [this message]
2021-09-29 13:05 ` [PATCH v5 21/26] linux-user/s390x: " Richard Henderson
2022-04-28 18:15 ` s390x regression - " Ulrich Weigand
2022-04-29 18:14 ` Richard Henderson
2021-09-29 13:05 ` [PATCH v5 22/26] linux-user/sh4: " Richard Henderson
2021-09-29 13:05 ` [PATCH v5 23/26] linux-user/sparc: " Richard Henderson
2021-09-29 13:05 ` [PATCH v5 24/26] linux-user/xtensa: " Richard Henderson
2021-09-29 13:05 ` [PATCH v5 25/26] linux-user: Remove default for TARGET_ARCH_HAS_SIGTRAMP_PAGE Richard Henderson
2021-09-29 13:05 ` [PATCH v5 26/26] tests/tcg/multiarch: Re-enable signals test for most guests Richard Henderson
2021-09-29 13:45 ` Philippe Mathieu-Daudé
2021-10-01 10:04 ` [PATCH v5 00/26] linux-user: Move signal trampolines to new page Laurent Vivier
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210929130553.121567-21-richard.henderson@linaro.org \
--to=richard.henderson@linaro.org \
--cc=alex.bennee@linaro.org \
--cc=alistair.francis@wdc.com \
--cc=f4bug@amsat.org \
--cc=laurent@vivier.eu \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).