From: Mathieu Desnoyers Date: Fri, 21 Jan 2022 15:37:55 +0000 (-0500) Subject: Fix: ppc32: wrong rseq_cs 32-bit field pointer field on big endian X-Git-Url: http://drtracing.org/?a=commitdiff_plain;h=9b1975bf812639e6dfffb03fca58374e8da2f3f1;hp=d0c21ef2fa5790e72be34717fd6d34202d1c217d;p=librseq.git Fix: ppc32: wrong rseq_cs 32-bit field pointer field on big endian Update the ptr32 field, not padding. Signed-off-by: Mathieu Desnoyers Change-Id: I7066e7f87ac068d729aca6a11f6e9ba233b04279 --- diff --git a/include/rseq/rseq-ppc.h b/include/rseq/rseq-ppc.h index 727b567..13c6fab 100644 --- a/include/rseq/rseq-ppc.h +++ b/include/rseq/rseq-ppc.h @@ -55,6 +55,8 @@ do { \ #define RSEQ_CMP_LONG "cmpd " #define RSEQ_CMP_LONG_INT "cmpdi " +#define RSEQ_CS_PTR rseq_cs.ptr + #define __RSEQ_ASM_DEFINE_TABLE(label, version, flags, \ start_ip, post_commit_offset, abort_ip) \ ".pushsection __rseq_cs, \"aw\"\n\t" \ @@ -100,6 +102,8 @@ do { \ #define RSEQ_CMP_LONG "cmpw " #define RSEQ_CMP_LONG_INT "cmpwi " +#define RSEQ_CS_PTR rseq_cs.ptr.ptr32 + #define __RSEQ_ASM_DEFINE_TABLE(label, version, flags, \ start_ip, post_commit_offset, abort_ip) \ ".pushsection __rseq_cs, \"aw\"\n\t" \ @@ -242,7 +246,7 @@ int rseq_cmpeqv_storev(intptr_t *v, intptr_t expect, intptr_t newv, int cpu) : /* gcc asm goto does not allow outputs */ : [cpu_id] "r" (cpu), [current_cpu_id] "m" (rseq_get_abi()->cpu_id), - [rseq_cs] "m" (rseq_get_abi()->rseq_cs), + [rseq_cs] "m" (rseq_get_abi()->RSEQ_CS_PTR), [v] "m" (*v), [expect] "r" (expect), [newv] "r" (newv) @@ -313,7 +317,7 @@ int rseq_cmpnev_storeoffp_load(intptr_t *v, intptr_t expectnot, : /* gcc asm goto does not allow outputs */ : [cpu_id] "r" (cpu), [current_cpu_id] "m" (rseq_get_abi()->cpu_id), - [rseq_cs] "m" (rseq_get_abi()->rseq_cs), + [rseq_cs] "m" (rseq_get_abi()->RSEQ_CS_PTR), /* final store input */ [v] "m" (*v), [expectnot] "r" (expectnot), @@ -376,7 +380,7 @@ int rseq_addv(intptr_t *v, intptr_t count, int cpu) : /* gcc asm goto does not allow outputs */ : [cpu_id] "r" (cpu), [current_cpu_id] "m" (rseq_get_abi()->cpu_id), - [rseq_cs] "m" (rseq_get_abi()->rseq_cs), + [rseq_cs] "m" (rseq_get_abi()->RSEQ_CS_PTR), /* final store input */ [v] "m" (*v), [count] "r" (count) @@ -439,7 +443,7 @@ int rseq_cmpeqv_trystorev_storev(intptr_t *v, intptr_t expect, : /* gcc asm goto does not allow outputs */ : [cpu_id] "r" (cpu), [current_cpu_id] "m" (rseq_get_abi()->cpu_id), - [rseq_cs] "m" (rseq_get_abi()->rseq_cs), + [rseq_cs] "m" (rseq_get_abi()->RSEQ_CS_PTR), /* try store input */ [v2] "m" (*v2), [newv2] "r" (newv2), @@ -514,7 +518,7 @@ int rseq_cmpeqv_trystorev_storev_release(intptr_t *v, intptr_t expect, : /* gcc asm goto does not allow outputs */ : [cpu_id] "r" (cpu), [current_cpu_id] "m" (rseq_get_abi()->cpu_id), - [rseq_cs] "m" (rseq_get_abi()->rseq_cs), + [rseq_cs] "m" (rseq_get_abi()->RSEQ_CS_PTR), /* try store input */ [v2] "m" (*v2), [newv2] "r" (newv2), @@ -590,7 +594,7 @@ int rseq_cmpeqv_cmpeqv_storev(intptr_t *v, intptr_t expect, : /* gcc asm goto does not allow outputs */ : [cpu_id] "r" (cpu), [current_cpu_id] "m" (rseq_get_abi()->cpu_id), - [rseq_cs] "m" (rseq_get_abi()->rseq_cs), + [rseq_cs] "m" (rseq_get_abi()->RSEQ_CS_PTR), /* cmp2 input */ [v2] "m" (*v2), [expect2] "r" (expect2), @@ -671,7 +675,7 @@ int rseq_cmpeqv_trymemcpy_storev(intptr_t *v, intptr_t expect, : /* gcc asm goto does not allow outputs */ : [cpu_id] "r" (cpu), [current_cpu_id] "m" (rseq_get_abi()->cpu_id), - [rseq_cs] "m" (rseq_get_abi()->rseq_cs), + [rseq_cs] "m" (rseq_get_abi()->RSEQ_CS_PTR), /* final store input */ [v] "m" (*v), [expect] "r" (expect), @@ -752,7 +756,7 @@ int rseq_cmpeqv_trymemcpy_storev_release(intptr_t *v, intptr_t expect, : /* gcc asm goto does not allow outputs */ : [cpu_id] "r" (cpu), [current_cpu_id] "m" (rseq_get_abi()->cpu_id), - [rseq_cs] "m" (rseq_get_abi()->rseq_cs), + [rseq_cs] "m" (rseq_get_abi()->RSEQ_CS_PTR), /* final store input */ [v] "m" (*v), [expect] "r" (expect),