forked from luck/tmp_suning_uos_patched
selftests/rseq: Remove arm/mips asm goto compiler work-around
commit 94c5cf2a0e193afffef8de48ddc42de6df7cac93 upstream. The arm and mips work-around for asm goto size guess issues are not properly documented, and lack reference to specific compiler versions, upstream compiler bug tracker entry, and reproducer. I can only find a loosely documented patch in my original LKML rseq post refering to gcc < 7 on ARM, but it does not appear to be sufficient to track the exact issue. Also, I am not sure MIPS really has the same limitation. Therefore, remove the work-around until we can properly document this. Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Link: https://lore.kernel.org/lkml/20171121141900.18471-17-mathieu.desnoyers@efficios.com/ Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
ba4d79af71
commit
7e1a0a9a44
|
@ -147,14 +147,11 @@ do { \
|
|||
teardown \
|
||||
"b %l[" __rseq_str(cmpfail_label) "]\n\t"
|
||||
|
||||
#define rseq_workaround_gcc_asm_size_guess() __asm__ __volatile__("")
|
||||
|
||||
static inline __attribute__((always_inline))
|
||||
int rseq_cmpeqv_storev(intptr_t *v, intptr_t expect, intptr_t newv, int cpu)
|
||||
{
|
||||
RSEQ_INJECT_C(9)
|
||||
|
||||
rseq_workaround_gcc_asm_size_guess();
|
||||
__asm__ __volatile__ goto (
|
||||
RSEQ_ASM_DEFINE_TABLE(9, 1f, 2f, 4f) /* start, commit, abort */
|
||||
RSEQ_ASM_DEFINE_EXIT_POINT(1f, %l[cmpfail])
|
||||
|
@ -198,14 +195,11 @@ int rseq_cmpeqv_storev(intptr_t *v, intptr_t expect, intptr_t newv, int cpu)
|
|||
, error1, error2
|
||||
#endif
|
||||
);
|
||||
rseq_workaround_gcc_asm_size_guess();
|
||||
return 0;
|
||||
abort:
|
||||
rseq_workaround_gcc_asm_size_guess();
|
||||
RSEQ_INJECT_FAILED
|
||||
return -1;
|
||||
cmpfail:
|
||||
rseq_workaround_gcc_asm_size_guess();
|
||||
return 1;
|
||||
#ifdef RSEQ_COMPARE_TWICE
|
||||
error1:
|
||||
|
@ -221,7 +215,6 @@ int rseq_cmpnev_storeoffp_load(intptr_t *v, intptr_t expectnot,
|
|||
{
|
||||
RSEQ_INJECT_C(9)
|
||||
|
||||
rseq_workaround_gcc_asm_size_guess();
|
||||
__asm__ __volatile__ goto (
|
||||
RSEQ_ASM_DEFINE_TABLE(9, 1f, 2f, 4f) /* start, commit, abort */
|
||||
RSEQ_ASM_DEFINE_EXIT_POINT(1f, %l[cmpfail])
|
||||
|
@ -270,14 +263,11 @@ int rseq_cmpnev_storeoffp_load(intptr_t *v, intptr_t expectnot,
|
|||
, error1, error2
|
||||
#endif
|
||||
);
|
||||
rseq_workaround_gcc_asm_size_guess();
|
||||
return 0;
|
||||
abort:
|
||||
rseq_workaround_gcc_asm_size_guess();
|
||||
RSEQ_INJECT_FAILED
|
||||
return -1;
|
||||
cmpfail:
|
||||
rseq_workaround_gcc_asm_size_guess();
|
||||
return 1;
|
||||
#ifdef RSEQ_COMPARE_TWICE
|
||||
error1:
|
||||
|
@ -292,7 +282,6 @@ int rseq_addv(intptr_t *v, intptr_t count, int cpu)
|
|||
{
|
||||
RSEQ_INJECT_C(9)
|
||||
|
||||
rseq_workaround_gcc_asm_size_guess();
|
||||
__asm__ __volatile__ goto (
|
||||
RSEQ_ASM_DEFINE_TABLE(9, 1f, 2f, 4f) /* start, commit, abort */
|
||||
#ifdef RSEQ_COMPARE_TWICE
|
||||
|
@ -328,10 +317,8 @@ int rseq_addv(intptr_t *v, intptr_t count, int cpu)
|
|||
, error1
|
||||
#endif
|
||||
);
|
||||
rseq_workaround_gcc_asm_size_guess();
|
||||
return 0;
|
||||
abort:
|
||||
rseq_workaround_gcc_asm_size_guess();
|
||||
RSEQ_INJECT_FAILED
|
||||
return -1;
|
||||
#ifdef RSEQ_COMPARE_TWICE
|
||||
|
@ -347,7 +334,6 @@ int rseq_cmpeqv_trystorev_storev(intptr_t *v, intptr_t expect,
|
|||
{
|
||||
RSEQ_INJECT_C(9)
|
||||
|
||||
rseq_workaround_gcc_asm_size_guess();
|
||||
__asm__ __volatile__ goto (
|
||||
RSEQ_ASM_DEFINE_TABLE(9, 1f, 2f, 4f) /* start, commit, abort */
|
||||
RSEQ_ASM_DEFINE_EXIT_POINT(1f, %l[cmpfail])
|
||||
|
@ -398,14 +384,11 @@ int rseq_cmpeqv_trystorev_storev(intptr_t *v, intptr_t expect,
|
|||
, error1, error2
|
||||
#endif
|
||||
);
|
||||
rseq_workaround_gcc_asm_size_guess();
|
||||
return 0;
|
||||
abort:
|
||||
rseq_workaround_gcc_asm_size_guess();
|
||||
RSEQ_INJECT_FAILED
|
||||
return -1;
|
||||
cmpfail:
|
||||
rseq_workaround_gcc_asm_size_guess();
|
||||
return 1;
|
||||
#ifdef RSEQ_COMPARE_TWICE
|
||||
error1:
|
||||
|
@ -422,7 +405,6 @@ int rseq_cmpeqv_trystorev_storev_release(intptr_t *v, intptr_t expect,
|
|||
{
|
||||
RSEQ_INJECT_C(9)
|
||||
|
||||
rseq_workaround_gcc_asm_size_guess();
|
||||
__asm__ __volatile__ goto (
|
||||
RSEQ_ASM_DEFINE_TABLE(9, 1f, 2f, 4f) /* start, commit, abort */
|
||||
RSEQ_ASM_DEFINE_EXIT_POINT(1f, %l[cmpfail])
|
||||
|
@ -474,14 +456,11 @@ int rseq_cmpeqv_trystorev_storev_release(intptr_t *v, intptr_t expect,
|
|||
, error1, error2
|
||||
#endif
|
||||
);
|
||||
rseq_workaround_gcc_asm_size_guess();
|
||||
return 0;
|
||||
abort:
|
||||
rseq_workaround_gcc_asm_size_guess();
|
||||
RSEQ_INJECT_FAILED
|
||||
return -1;
|
||||
cmpfail:
|
||||
rseq_workaround_gcc_asm_size_guess();
|
||||
return 1;
|
||||
#ifdef RSEQ_COMPARE_TWICE
|
||||
error1:
|
||||
|
@ -498,7 +477,6 @@ int rseq_cmpeqv_cmpeqv_storev(intptr_t *v, intptr_t expect,
|
|||
{
|
||||
RSEQ_INJECT_C(9)
|
||||
|
||||
rseq_workaround_gcc_asm_size_guess();
|
||||
__asm__ __volatile__ goto (
|
||||
RSEQ_ASM_DEFINE_TABLE(9, 1f, 2f, 4f) /* start, commit, abort */
|
||||
RSEQ_ASM_DEFINE_EXIT_POINT(1f, %l[cmpfail])
|
||||
|
@ -554,14 +532,11 @@ int rseq_cmpeqv_cmpeqv_storev(intptr_t *v, intptr_t expect,
|
|||
, error1, error2, error3
|
||||
#endif
|
||||
);
|
||||
rseq_workaround_gcc_asm_size_guess();
|
||||
return 0;
|
||||
abort:
|
||||
rseq_workaround_gcc_asm_size_guess();
|
||||
RSEQ_INJECT_FAILED
|
||||
return -1;
|
||||
cmpfail:
|
||||
rseq_workaround_gcc_asm_size_guess();
|
||||
return 1;
|
||||
#ifdef RSEQ_COMPARE_TWICE
|
||||
error1:
|
||||
|
@ -582,7 +557,6 @@ int rseq_cmpeqv_trymemcpy_storev(intptr_t *v, intptr_t expect,
|
|||
|
||||
RSEQ_INJECT_C(9)
|
||||
|
||||
rseq_workaround_gcc_asm_size_guess();
|
||||
__asm__ __volatile__ goto (
|
||||
RSEQ_ASM_DEFINE_TABLE(9, 1f, 2f, 4f) /* start, commit, abort */
|
||||
RSEQ_ASM_DEFINE_EXIT_POINT(1f, %l[cmpfail])
|
||||
|
@ -678,21 +652,16 @@ int rseq_cmpeqv_trymemcpy_storev(intptr_t *v, intptr_t expect,
|
|||
, error1, error2
|
||||
#endif
|
||||
);
|
||||
rseq_workaround_gcc_asm_size_guess();
|
||||
return 0;
|
||||
abort:
|
||||
rseq_workaround_gcc_asm_size_guess();
|
||||
RSEQ_INJECT_FAILED
|
||||
return -1;
|
||||
cmpfail:
|
||||
rseq_workaround_gcc_asm_size_guess();
|
||||
return 1;
|
||||
#ifdef RSEQ_COMPARE_TWICE
|
||||
error1:
|
||||
rseq_workaround_gcc_asm_size_guess();
|
||||
rseq_bug("cpu_id comparison failed");
|
||||
error2:
|
||||
rseq_workaround_gcc_asm_size_guess();
|
||||
rseq_bug("expected value comparison failed");
|
||||
#endif
|
||||
}
|
||||
|
@ -706,7 +675,6 @@ int rseq_cmpeqv_trymemcpy_storev_release(intptr_t *v, intptr_t expect,
|
|||
|
||||
RSEQ_INJECT_C(9)
|
||||
|
||||
rseq_workaround_gcc_asm_size_guess();
|
||||
__asm__ __volatile__ goto (
|
||||
RSEQ_ASM_DEFINE_TABLE(9, 1f, 2f, 4f) /* start, commit, abort */
|
||||
RSEQ_ASM_DEFINE_EXIT_POINT(1f, %l[cmpfail])
|
||||
|
@ -803,21 +771,16 @@ int rseq_cmpeqv_trymemcpy_storev_release(intptr_t *v, intptr_t expect,
|
|||
, error1, error2
|
||||
#endif
|
||||
);
|
||||
rseq_workaround_gcc_asm_size_guess();
|
||||
return 0;
|
||||
abort:
|
||||
rseq_workaround_gcc_asm_size_guess();
|
||||
RSEQ_INJECT_FAILED
|
||||
return -1;
|
||||
cmpfail:
|
||||
rseq_workaround_gcc_asm_size_guess();
|
||||
return 1;
|
||||
#ifdef RSEQ_COMPARE_TWICE
|
||||
error1:
|
||||
rseq_workaround_gcc_asm_size_guess();
|
||||
rseq_bug("cpu_id comparison failed");
|
||||
error2:
|
||||
rseq_workaround_gcc_asm_size_guess();
|
||||
rseq_bug("expected value comparison failed");
|
||||
#endif
|
||||
}
|
||||
|
|
|
@ -154,14 +154,11 @@ do { \
|
|||
teardown \
|
||||
"b %l[" __rseq_str(cmpfail_label) "]\n\t"
|
||||
|
||||
#define rseq_workaround_gcc_asm_size_guess() __asm__ __volatile__("")
|
||||
|
||||
static inline __attribute__((always_inline))
|
||||
int rseq_cmpeqv_storev(intptr_t *v, intptr_t expect, intptr_t newv, int cpu)
|
||||
{
|
||||
RSEQ_INJECT_C(9)
|
||||
|
||||
rseq_workaround_gcc_asm_size_guess();
|
||||
__asm__ __volatile__ goto (
|
||||
RSEQ_ASM_DEFINE_TABLE(9, 1f, 2f, 4f) /* start, commit, abort */
|
||||
RSEQ_ASM_DEFINE_EXIT_POINT(1f, %l[cmpfail])
|
||||
|
@ -203,14 +200,11 @@ int rseq_cmpeqv_storev(intptr_t *v, intptr_t expect, intptr_t newv, int cpu)
|
|||
, error1, error2
|
||||
#endif
|
||||
);
|
||||
rseq_workaround_gcc_asm_size_guess();
|
||||
return 0;
|
||||
abort:
|
||||
rseq_workaround_gcc_asm_size_guess();
|
||||
RSEQ_INJECT_FAILED
|
||||
return -1;
|
||||
cmpfail:
|
||||
rseq_workaround_gcc_asm_size_guess();
|
||||
return 1;
|
||||
#ifdef RSEQ_COMPARE_TWICE
|
||||
error1:
|
||||
|
@ -226,7 +220,6 @@ int rseq_cmpnev_storeoffp_load(intptr_t *v, intptr_t expectnot,
|
|||
{
|
||||
RSEQ_INJECT_C(9)
|
||||
|
||||
rseq_workaround_gcc_asm_size_guess();
|
||||
__asm__ __volatile__ goto (
|
||||
RSEQ_ASM_DEFINE_TABLE(9, 1f, 2f, 4f) /* start, commit, abort */
|
||||
RSEQ_ASM_DEFINE_EXIT_POINT(1f, %l[cmpfail])
|
||||
|
@ -273,14 +266,11 @@ int rseq_cmpnev_storeoffp_load(intptr_t *v, intptr_t expectnot,
|
|||
, error1, error2
|
||||
#endif
|
||||
);
|
||||
rseq_workaround_gcc_asm_size_guess();
|
||||
return 0;
|
||||
abort:
|
||||
rseq_workaround_gcc_asm_size_guess();
|
||||
RSEQ_INJECT_FAILED
|
||||
return -1;
|
||||
cmpfail:
|
||||
rseq_workaround_gcc_asm_size_guess();
|
||||
return 1;
|
||||
#ifdef RSEQ_COMPARE_TWICE
|
||||
error1:
|
||||
|
@ -295,7 +285,6 @@ int rseq_addv(intptr_t *v, intptr_t count, int cpu)
|
|||
{
|
||||
RSEQ_INJECT_C(9)
|
||||
|
||||
rseq_workaround_gcc_asm_size_guess();
|
||||
__asm__ __volatile__ goto (
|
||||
RSEQ_ASM_DEFINE_TABLE(9, 1f, 2f, 4f) /* start, commit, abort */
|
||||
#ifdef RSEQ_COMPARE_TWICE
|
||||
|
@ -331,10 +320,8 @@ int rseq_addv(intptr_t *v, intptr_t count, int cpu)
|
|||
, error1
|
||||
#endif
|
||||
);
|
||||
rseq_workaround_gcc_asm_size_guess();
|
||||
return 0;
|
||||
abort:
|
||||
rseq_workaround_gcc_asm_size_guess();
|
||||
RSEQ_INJECT_FAILED
|
||||
return -1;
|
||||
#ifdef RSEQ_COMPARE_TWICE
|
||||
|
@ -350,7 +337,6 @@ int rseq_cmpeqv_trystorev_storev(intptr_t *v, intptr_t expect,
|
|||
{
|
||||
RSEQ_INJECT_C(9)
|
||||
|
||||
rseq_workaround_gcc_asm_size_guess();
|
||||
__asm__ __volatile__ goto (
|
||||
RSEQ_ASM_DEFINE_TABLE(9, 1f, 2f, 4f) /* start, commit, abort */
|
||||
RSEQ_ASM_DEFINE_EXIT_POINT(1f, %l[cmpfail])
|
||||
|
@ -399,14 +385,11 @@ int rseq_cmpeqv_trystorev_storev(intptr_t *v, intptr_t expect,
|
|||
, error1, error2
|
||||
#endif
|
||||
);
|
||||
rseq_workaround_gcc_asm_size_guess();
|
||||
return 0;
|
||||
abort:
|
||||
rseq_workaround_gcc_asm_size_guess();
|
||||
RSEQ_INJECT_FAILED
|
||||
return -1;
|
||||
cmpfail:
|
||||
rseq_workaround_gcc_asm_size_guess();
|
||||
return 1;
|
||||
#ifdef RSEQ_COMPARE_TWICE
|
||||
error1:
|
||||
|
@ -423,7 +406,6 @@ int rseq_cmpeqv_trystorev_storev_release(intptr_t *v, intptr_t expect,
|
|||
{
|
||||
RSEQ_INJECT_C(9)
|
||||
|
||||
rseq_workaround_gcc_asm_size_guess();
|
||||
__asm__ __volatile__ goto (
|
||||
RSEQ_ASM_DEFINE_TABLE(9, 1f, 2f, 4f) /* start, commit, abort */
|
||||
RSEQ_ASM_DEFINE_EXIT_POINT(1f, %l[cmpfail])
|
||||
|
@ -473,14 +455,11 @@ int rseq_cmpeqv_trystorev_storev_release(intptr_t *v, intptr_t expect,
|
|||
, error1, error2
|
||||
#endif
|
||||
);
|
||||
rseq_workaround_gcc_asm_size_guess();
|
||||
return 0;
|
||||
abort:
|
||||
rseq_workaround_gcc_asm_size_guess();
|
||||
RSEQ_INJECT_FAILED
|
||||
return -1;
|
||||
cmpfail:
|
||||
rseq_workaround_gcc_asm_size_guess();
|
||||
return 1;
|
||||
#ifdef RSEQ_COMPARE_TWICE
|
||||
error1:
|
||||
|
@ -497,7 +476,6 @@ int rseq_cmpeqv_cmpeqv_storev(intptr_t *v, intptr_t expect,
|
|||
{
|
||||
RSEQ_INJECT_C(9)
|
||||
|
||||
rseq_workaround_gcc_asm_size_guess();
|
||||
__asm__ __volatile__ goto (
|
||||
RSEQ_ASM_DEFINE_TABLE(9, 1f, 2f, 4f) /* start, commit, abort */
|
||||
RSEQ_ASM_DEFINE_EXIT_POINT(1f, %l[cmpfail])
|
||||
|
@ -549,14 +527,11 @@ int rseq_cmpeqv_cmpeqv_storev(intptr_t *v, intptr_t expect,
|
|||
, error1, error2, error3
|
||||
#endif
|
||||
);
|
||||
rseq_workaround_gcc_asm_size_guess();
|
||||
return 0;
|
||||
abort:
|
||||
rseq_workaround_gcc_asm_size_guess();
|
||||
RSEQ_INJECT_FAILED
|
||||
return -1;
|
||||
cmpfail:
|
||||
rseq_workaround_gcc_asm_size_guess();
|
||||
return 1;
|
||||
#ifdef RSEQ_COMPARE_TWICE
|
||||
error1:
|
||||
|
@ -577,7 +552,6 @@ int rseq_cmpeqv_trymemcpy_storev(intptr_t *v, intptr_t expect,
|
|||
|
||||
RSEQ_INJECT_C(9)
|
||||
|
||||
rseq_workaround_gcc_asm_size_guess();
|
||||
__asm__ __volatile__ goto (
|
||||
RSEQ_ASM_DEFINE_TABLE(9, 1f, 2f, 4f) /* start, commit, abort */
|
||||
RSEQ_ASM_DEFINE_EXIT_POINT(1f, %l[cmpfail])
|
||||
|
@ -670,21 +644,16 @@ int rseq_cmpeqv_trymemcpy_storev(intptr_t *v, intptr_t expect,
|
|||
, error1, error2
|
||||
#endif
|
||||
);
|
||||
rseq_workaround_gcc_asm_size_guess();
|
||||
return 0;
|
||||
abort:
|
||||
rseq_workaround_gcc_asm_size_guess();
|
||||
RSEQ_INJECT_FAILED
|
||||
return -1;
|
||||
cmpfail:
|
||||
rseq_workaround_gcc_asm_size_guess();
|
||||
return 1;
|
||||
#ifdef RSEQ_COMPARE_TWICE
|
||||
error1:
|
||||
rseq_workaround_gcc_asm_size_guess();
|
||||
rseq_bug("cpu_id comparison failed");
|
||||
error2:
|
||||
rseq_workaround_gcc_asm_size_guess();
|
||||
rseq_bug("expected value comparison failed");
|
||||
#endif
|
||||
}
|
||||
|
@ -698,7 +667,6 @@ int rseq_cmpeqv_trymemcpy_storev_release(intptr_t *v, intptr_t expect,
|
|||
|
||||
RSEQ_INJECT_C(9)
|
||||
|
||||
rseq_workaround_gcc_asm_size_guess();
|
||||
__asm__ __volatile__ goto (
|
||||
RSEQ_ASM_DEFINE_TABLE(9, 1f, 2f, 4f) /* start, commit, abort */
|
||||
RSEQ_ASM_DEFINE_EXIT_POINT(1f, %l[cmpfail])
|
||||
|
@ -792,21 +760,16 @@ int rseq_cmpeqv_trymemcpy_storev_release(intptr_t *v, intptr_t expect,
|
|||
, error1, error2
|
||||
#endif
|
||||
);
|
||||
rseq_workaround_gcc_asm_size_guess();
|
||||
return 0;
|
||||
abort:
|
||||
rseq_workaround_gcc_asm_size_guess();
|
||||
RSEQ_INJECT_FAILED
|
||||
return -1;
|
||||
cmpfail:
|
||||
rseq_workaround_gcc_asm_size_guess();
|
||||
return 1;
|
||||
#ifdef RSEQ_COMPARE_TWICE
|
||||
error1:
|
||||
rseq_workaround_gcc_asm_size_guess();
|
||||
rseq_bug("cpu_id comparison failed");
|
||||
error2:
|
||||
rseq_workaround_gcc_asm_size_guess();
|
||||
rseq_bug("expected value comparison failed");
|
||||
#endif
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user