rseq: do not set back rseq_cs to 0
[lttng-ust.git] / libringbuffer / rseq-x86.h
index 7154bfa49697f987ded459926670b072647d1e76..0831b9c10f080a170bc2bb269ed3c3566b0deede 100644 (file)
 
 #ifdef __x86_64__
 
-#define smp_mb()       __asm__ __volatile__ ("mfence" : : : "memory")
-#define smp_rmb()      barrier()
-#define smp_wmb()      barrier()
-
-#define smp_load_acquire(p)                                            \
-__extension__ ({                                                       \
-       __typeof(*p) ____p1 = READ_ONCE(*p);                            \
-       barrier();                                                      \
-       ____p1;                                                         \
-})
-
-#define smp_acquire__after_ctrl_dep()  smp_rmb()
-
-#define smp_store_release(p, v)                                                \
-do {                                                                   \
-       barrier();                                                      \
-       WRITE_ONCE(*p, v);                                              \
-} while (0)
-
 #define has_fast_acquire_release()     1
 #define has_single_copy_load_64()      1
 
@@ -65,7 +46,8 @@ do { \
                "1:\n\t" \
                _setup \
                RSEQ_INJECT_ASM(1) \
-               "movq $3b, %[rseq_cs]\n\t" \
+               "leaq 3b(%%rip), %%rax\n\t" \
+               "movq %%rax, %[rseq_cs]\n\t" \
                RSEQ_INJECT_ASM(2) \
                "cmpl %[start_event_counter], %[current_event_counter]\n\t" \
                "jnz 4f\n\t" \
@@ -74,22 +56,20 @@ do { \
                _final_store \
                "2:\n\t" \
                RSEQ_INJECT_ASM(5) \
-               "movq $0, %[rseq_cs]\n\t" \
                _teardown \
                ".pushsection __rseq_failure, \"a\"\n\t" \
                "4:\n\t" \
-               "movq $0, %[rseq_cs]\n\t" \
                _teardown \
                "jmp %l[failure]\n\t" \
                ".popsection\n\t" \
-               : /* no outputs */ \
+               : /* gcc asm goto does not allow outputs */ \
                : [start_event_counter]"r"((_start_value).event_counter), \
                  [current_event_counter]"m"((_start_value).rseqp->u.e.event_counter), \
                  [rseq_cs]"m"((_start_value).rseqp->rseq_cs) \
                  _spec_input \
                  _final_input \
                  RSEQ_INJECT_INPUT \
-               : "memory", "cc" \
+               : "memory", "cc", "rax" \
                  _extra_clobber \
                  RSEQ_INJECT_CLOBBER \
                : _failure \
@@ -159,32 +139,6 @@ do { \
 
 #elif __i386__
 
-/*
- * Support older 32-bit architectures that do not implement fence
- * instructions.
- */
-#define smp_mb()       \
-       __asm__ __volatile__ ("lock; addl $0,0(%%esp)" : : : "memory")
-#define smp_rmb()      \
-       __asm__ __volatile__ ("lock; addl $0,0(%%esp)" : : : "memory")
-#define smp_wmb()      \
-       __asm__ __volatile__ ("lock; addl $0,0(%%esp)" : : : "memory")
-
-#define smp_load_acquire(p)                                            \
-__extension__ ({                                                       \
-       __typeof(*p) ____p1 = READ_ONCE(*p);                            \
-       smp_mb();                                                       \
-       ____p1;                                                         \
-})
-
-#define smp_acquire__after_ctrl_dep()  smp_rmb()
-
-#define smp_store_release(p, v)                                                \
-do {                                                                   \
-       smp_mb();                                                       \
-       WRITE_ONCE(*p, v);                                              \
-} while (0)
-
 #define has_fast_acquire_release()     0
 #define has_single_copy_load_64()      0
 
@@ -218,15 +172,13 @@ do { \
                _final_store \
                "2:\n\t" \
                RSEQ_INJECT_ASM(5) \
-               "movl $0, %[rseq_cs]\n\t" \
                _teardown \
                ".pushsection __rseq_failure, \"a\"\n\t" \
                "4:\n\t" \
-               "movl $0, %[rseq_cs]\n\t" \
                _teardown \
                "jmp %l[failure]\n\t" \
                ".popsection\n\t" \
-               : /* no outputs */ \
+               : /* gcc asm goto does not allow outputs */ \
                : [start_event_counter]"m"((_start_value).event_counter), \
                  [current_event_counter]"m"((_start_value).rseqp->u.e.event_counter), \
                  [rseq_cs]"m"((_start_value).rseqp->rseq_cs) \
This page took 0.025575 seconds and 5 git commands to generate.