Skip to content

Commit 067cf30

Browse files
committed
[litmus] Fix x -> XN polarity
1 parent 2d1712a commit 067cf30

File tree

4 files changed

+34
-6
lines changed

4 files changed

+34
-6
lines changed
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
AArch64 A032
2+
Variant=vmsa
3+
{
4+
int x=1;
5+
0:X1=PTE(x);
6+
[PTE(x)]=(x:0);
7+
pteval_t 0:X0;
8+
9+
int y=2;
10+
0:X3=PTE(y);
11+
[PTE(y)]=(x:1);
12+
pteval_t 0:X2;
13+
}
14+
P0 ;
15+
LDR X0,[X1] ;
16+
LDR X2,[X3] ;
17+
forall 0:X0=(oa:PA(x),x:0) /\ 0:X2=(oa:PA(y),x:1)
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
Test A032 Required
2+
States 1
3+
0:X0=(oa:PA(x), x:0); 0:X2=(oa:PA(y));
4+
Ok
5+
Witnesses
6+
Positive: 1 Negative: 0
7+
Condition forall (0:X0=(oa:PA(x), x:0) /\ 0:X2=(oa:PA(y)))
8+
Observation A032 Always 1 0
9+
Hash=6cb20add2198be8d9374dc1d759a237a
10+

lib/AArch64PteVal.ml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -420,7 +420,7 @@ let orop p m =
420420
let p = if is_set m mask_db then { p with db=0; } else p in
421421
let p = if is_set m mask_af then { p with af=1; } else p in
422422
let p = if is_set m mask_dbm then { p with dbm=1; } else p in
423-
let p = if is_set m mask_x then { p with x=1; } else p in
423+
let p = if is_set m mask_x then { p with x=0; } else p in
424424
Some p
425425

426426
and andnot2 p m =
@@ -431,7 +431,7 @@ and andnot2 p m =
431431
let p = if is_set m mask_db then { p with db=1; } else p in
432432
let p = if is_set m mask_af then { p with af=0; } else p in
433433
let p = if is_set m mask_dbm then { p with dbm=0; } else p in
434-
let p = if is_set m mask_x then { p with x=0; } else p in
434+
let p = if is_set m mask_x then { p with x=1; } else p in
435435
Some p
436436

437437
and andop p m =
@@ -452,6 +452,6 @@ and andop p m =
452452
if is_set m mask_dbm && p.dbm=1
453453
then Int64.logor r mask_dbm else r in
454454
let r =
455-
if is_set m mask_x && p.x=1
455+
if is_set m mask_x && p.x=0
456456
then Int64.logor r mask_x else r in
457457
Some r

litmus/libdir/_aarch64/kvm-headers.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ static const uint64_t msk_af = 0x400UL;
108108
static const uint64_t msk_dbm = 0x8000000000000UL;
109109
static const uint64_t msk_db = 0x80UL;
110110
static const uint64_t msk_el0 = 0x40UL;
111-
static const uint64_t msk_x = 0x4000000000000UL;
111+
static const uint64_t msk_x = 0x40000000000000UL;
112112
#define msk_full (msk_valid|msk_af|msk_dbm|msk_db|msk_el0|msk_x)
113113

114114
static inline void unset_el0(pteval_t *p) {
@@ -117,6 +117,7 @@ static inline void unset_el0(pteval_t *p) {
117117

118118
static inline pteval_t litmus_set_pte_flags(pteval_t old,pteval_t flags) {
119119
flags ^= msk_db; /* inverse dirty bit -> AP[2] */
120+
flags ^= msk_x; /* inverse XN bit */
120121
old &= ~msk_full ;
121122
old |= flags ;
122123
return old ;
@@ -218,7 +219,7 @@ inline static pteval_t pack_pte(int oa,pteval_t v) {
218219
pack_flag(v ^ msk_db,msk_db,DB_PACKED) |
219220
pack_flag(v,msk_dbm,DBM_PACKED) |
220221
pack_flag(v,msk_valid,VALID_PACKED) |
221-
pack_flag(v,msk_x,X_PACKED) |
222+
pack_flag(v ^ msk_x,msk_x,X_PACKED) |
222223
pack_flag(v,msk_el0,EL0_PACKED) ;
223224
}
224225

@@ -244,7 +245,7 @@ pack_pack(int oa,int af,int db,int dbm,int valid,int el0,int x) {
244245
- db set -> corresponding bit unset
245246
*/
246247

247-
#define NULL_PACKED (pack_pack(NVARS,0,1,0,0,0,0))
248+
#define NULL_PACKED (pack_pack(NVARS,0,1,0,0,0,1))
248249

249250
inline static int unpack_oa(pteval_t v) {
250251
return v >> OA_PACKED;

0 commit comments

Comments
 (0)