aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMathieu Desnoyers <mathieu.desnoyers@efficios.com>2024-02-27 14:09:58 -0500
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>2024-02-27 17:28:07 -0500
commit94f43fc905cd7097e54a3e7d27cf2f486fa58724 (patch)
tree78da82ba45b54aeb7c87b07699dded42c8ec804e
parent71884a4b1f9167e6698cf4875943af2795cfa4c7 (diff)
downloadlibrseq-94f43fc905cd7097e54a3e7d27cf2f486fa58724.tar.gz
x86-32: Remove support for old IDT WinChip and PPRO
The rseq system call first appeared in Linux v4.18, which did not support the old IDT WinChip Intel clones and PentiumPro CPUs anymore. Therefore, remove CPU barrier instructions from the smp_rmb() and smp_wmb() macros given that librseq will realistically never be used on such hardware. Expect all x86-32 hardware to be TSO. Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com> Change-Id: I07a03006e2eb8ec0928c63f16df94ad42d440b10
-rw-r--r--include/rseq/rseq-x86.h30
1 files changed, 4 insertions, 26 deletions
diff --git a/include/rseq/rseq-x86.h b/include/rseq/rseq-x86.h
index 9d38628..eb5cc19 100644
--- a/include/rseq/rseq-x86.h
+++ b/include/rseq/rseq-x86.h
@@ -31,10 +31,6 @@
#define RSEQ_CS_OFFSET 8
#define RSEQ_MM_CID_OFFSET 24
-#ifdef __x86_64__
-
-#define RSEQ_ASM_TP_SEGMENT %%fs
-
#define rseq_smp_mb() \
__asm__ __volatile__ ("lock; addl $0,-128(%%rsp)" ::: "memory", "cc")
#define rseq_smp_rmb() rseq_barrier()
@@ -55,6 +51,10 @@ do { \
RSEQ_WRITE_ONCE(*(p), v); \
} while (0)
+#ifdef __x86_64__
+
+#define RSEQ_ASM_TP_SEGMENT %%fs
+
#define __RSEQ_ASM_DEFINE_TABLE(label, version, flags, \
start_ip, post_commit_offset, abort_ip) \
".pushsection __rseq_cs, \"aw\"\n\t" \
@@ -117,28 +117,6 @@ do { \
#define RSEQ_ASM_TP_SEGMENT %%gs
-#define rseq_smp_mb() \
- __asm__ __volatile__ ("lock; addl $0,-128(%%esp)" ::: "memory", "cc")
-#define rseq_smp_rmb() \
- __asm__ __volatile__ ("lock; addl $0,-128(%%esp)" ::: "memory", "cc")
-#define rseq_smp_wmb() \
- __asm__ __volatile__ ("lock; addl $0,-128(%%esp)" ::: "memory", "cc")
-
-#define rseq_smp_load_acquire(p) \
-__extension__ ({ \
- rseq_unqual_scalar_typeof(*(p)) ____p1 = RSEQ_READ_ONCE(*(p)); \
- rseq_smp_mb(); \
- ____p1; \
-})
-
-#define rseq_smp_acquire__after_ctrl_dep() rseq_smp_rmb()
-
-#define rseq_smp_store_release(p, v) \
-do { \
- rseq_smp_mb(); \
- RSEQ_WRITE_ONCE(*p, v); \
-} while (0)
-
/*
* Use eax as scratch register and take memory operands as input to
* lessen register pressure. Especially needed when compiling in O0.