[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 15/38] accel/tcg: Un-inline retaddr helpers to 'user-retaddr.h'
From: |
Philippe Mathieu-Daudé |
Subject: |
[PULL 15/38] accel/tcg: Un-inline retaddr helpers to 'user-retaddr.h' |
Date: |
Fri, 26 Apr 2024 21:41:35 +0200 |
set_helper_retaddr() is only used in accel/tcg/user-exec.c.
clear_helper_retaddr() is only used in accel/tcg/cpu-exec.c
and accel/tcg/user-exec.c.
No need to expose their definitions to all user-emulation
files including "exec/cpu_ldst.h", move them to a new
"user-retaddr.h" header (restricted to accel/tcg/).
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20231211212003.21686-19-philmd@linaro.org>
---
accel/tcg/user-retaddr.h | 28 ++++++++++++++++++++++++++++
include/exec/cpu_ldst.h | 28 ++--------------------------
accel/tcg/cpu-exec.c | 3 +++
accel/tcg/user-exec.c | 1 +
4 files changed, 34 insertions(+), 26 deletions(-)
create mode 100644 accel/tcg/user-retaddr.h
diff --git a/accel/tcg/user-retaddr.h b/accel/tcg/user-retaddr.h
new file mode 100644
index 0000000000..e0f57e1994
--- /dev/null
+++ b/accel/tcg/user-retaddr.h
@@ -0,0 +1,28 @@
+#ifndef ACCEL_TCG_USER_RETADDR_H
+#define ACCEL_TCG_USER_RETADDR_H
+
+#include "qemu/atomic.h"
+
+extern __thread uintptr_t helper_retaddr;
+
+static inline void set_helper_retaddr(uintptr_t ra)
+{
+ helper_retaddr = ra;
+ /*
+ * Ensure that this write is visible to the SIGSEGV handler that
+ * may be invoked due to a subsequent invalid memory operation.
+ */
+ signal_barrier();
+}
+
+static inline void clear_helper_retaddr(void)
+{
+ /*
+ * Ensure that previous memory operations have succeeded before
+ * removing the data visible to the signal handler.
+ */
+ signal_barrier();
+ helper_retaddr = 0;
+}
+
+#endif
diff --git a/include/exec/cpu_ldst.h b/include/exec/cpu_ldst.h
index eb8f3f0595..82690d3947 100644
--- a/include/exec/cpu_ldst.h
+++ b/include/exec/cpu_ldst.h
@@ -300,31 +300,7 @@ Int128 cpu_atomic_cmpxchgo_be_mmu(CPUArchState *env,
abi_ptr addr,
Int128 cmpv, Int128 newv,
MemOpIdx oi, uintptr_t retaddr);
-#if defined(CONFIG_USER_ONLY)
-
-extern __thread uintptr_t helper_retaddr;
-
-static inline void set_helper_retaddr(uintptr_t ra)
-{
- helper_retaddr = ra;
- /*
- * Ensure that this write is visible to the SIGSEGV handler that
- * may be invoked due to a subsequent invalid memory operation.
- */
- signal_barrier();
-}
-
-static inline void clear_helper_retaddr(void)
-{
- /*
- * Ensure that previous memory operations have succeeded before
- * removing the data visible to the signal handler.
- */
- signal_barrier();
- helper_retaddr = 0;
-}
-
-#else
+#if !defined(CONFIG_USER_ONLY)
#include "tcg/oversized-guest.h"
@@ -376,7 +352,7 @@ static inline CPUTLBEntry *tlb_entry(CPUState *cpu,
uintptr_t mmu_idx,
return &cpu->neg.tlb.f[mmu_idx].table[tlb_index(cpu, mmu_idx, addr)];
}
-#endif /* defined(CONFIG_USER_ONLY) */
+#endif /* !defined(CONFIG_USER_ONLY) */
#if TARGET_BIG_ENDIAN
# define cpu_lduw_data cpu_lduw_be_data
diff --git a/accel/tcg/cpu-exec.c b/accel/tcg/cpu-exec.c
index 5c70748060..225e5fbd3e 100644
--- a/accel/tcg/cpu-exec.c
+++ b/accel/tcg/cpu-exec.c
@@ -41,6 +41,9 @@
#include "tb-context.h"
#include "internal-common.h"
#include "internal-target.h"
+#if defined(CONFIG_USER_ONLY)
+#include "user-retaddr.h"
+#endif
/* -icount align implementation. */
diff --git a/accel/tcg/user-exec.c b/accel/tcg/user-exec.c
index 3cac3a78c4..1c621477ad 100644
--- a/accel/tcg/user-exec.c
+++ b/accel/tcg/user-exec.c
@@ -31,6 +31,7 @@
#include "tcg/tcg-ldst.h"
#include "internal-common.h"
#include "internal-target.h"
+#include "user-retaddr.h"
__thread uintptr_t helper_retaddr;
--
2.41.0
- [PULL 03/38] exec: Include 'cpu.h' before validating CPUArchState placement, (continued)
- [PULL 03/38] exec: Include 'cpu.h' before validating CPUArchState placement, Philippe Mathieu-Daudé, 2024/04/26
- [PULL 05/38] accel: Include missing 'exec/cpu_ldst.h' header, Philippe Mathieu-Daudé, 2024/04/26
- [PULL 06/38] gdbstub: Include missing 'hw/core/cpu.h' header, Philippe Mathieu-Daudé, 2024/04/26
- [PULL 07/38] gdbstub: Simplify #ifdef'ry in helpers.h, Philippe Mathieu-Daudé, 2024/04/26
- [PULL 08/38] gdbstub: Avoid including 'cpu.h' in 'gdbstub/helpers.h', Philippe Mathieu-Daudé, 2024/04/26
- [PULL 09/38] semihosting/uaccess: Avoid including 'cpu.h', Philippe Mathieu-Daudé, 2024/04/26
- [PULL 10/38] semihosting/guestfd: Remove unused 'semihosting/uaccess.h' header, Philippe Mathieu-Daudé, 2024/04/26
- [PULL 11/38] target: Define TCG_GUEST_DEFAULT_MO in 'cpu-param.h', Philippe Mathieu-Daudé, 2024/04/26
- [PULL 13/38] target/sparc: Replace abi_ulong by uint32_t for TARGET_ABI32, Philippe Mathieu-Daudé, 2024/04/26
- [PULL 14/38] target/i386: Include missing 'exec/exec-all.h' header, Philippe Mathieu-Daudé, 2024/04/26
- [PULL 15/38] accel/tcg: Un-inline retaddr helpers to 'user-retaddr.h',
Philippe Mathieu-Daudé <=
- [PULL 16/38] accel/tcg: Include missing 'hw/core/cpu.h' header, Philippe Mathieu-Daudé, 2024/04/26
- [PULL 18/38] accel/tcg: Rename load-extract/store-insert headers using .h.inc suffix, Philippe Mathieu-Daudé, 2024/04/26
- [PULL 17/38] accel/tcg: Include missing headers in 'tb-jmp-cache.h', Philippe Mathieu-Daudé, 2024/04/26
- [PULL 19/38] accel/tcg: Rename helper-head.h -> helper-head.h.inc, Philippe Mathieu-Daudé, 2024/04/26
- [PULL 12/38] target/ppc/excp_helper: Avoid 'abi_ptr' in system emulation, Philippe Mathieu-Daudé, 2024/04/26
- [PULL 20/38] accel/whpx: Use accel-specific per-vcpu @dirty field, Philippe Mathieu-Daudé, 2024/04/26
- [PULL 21/38] accel/nvmm: Use accel-specific per-vcpu @dirty field, Philippe Mathieu-Daudé, 2024/04/26
- [PULL 22/38] accel/hvf: Use accel-specific per-vcpu @dirty field, Philippe Mathieu-Daudé, 2024/04/26
- [PULL 23/38] exec/cpu-all: Reduce 'qemu/rcu.h' header inclusion, Philippe Mathieu-Daudé, 2024/04/26
- [PULL 24/38] exec/cpu-all: Remove unused 'qemu/thread.h' header, Philippe Mathieu-Daudé, 2024/04/26