diff options
author | Ard Biesheuvel <ard.biesheuvel@linaro.org> | 2015-10-08 18:51:56 +0000 |
---|---|---|
committer | abiesheuvel <abiesheuvel@Edk2> | 2015-10-08 18:51:56 +0000 |
commit | 2afeabd1a9cee51745f51b7b51d02f19c0a36429 (patch) | |
tree | 6953d95e165e3d8191dcad04daf99e4320beacc8 /ArmPkg | |
parent | 094a67398f2e84fb11955ae8f8588647f9bd67cc (diff) | |
download | edk2-2afeabd1a9cee51745f51b7b51d02f19c0a36429.tar.gz edk2-2afeabd1a9cee51745f51b7b51d02f19c0a36429.tar.bz2 edk2-2afeabd1a9cee51745f51b7b51d02f19c0a36429.zip |
ArmPkg/AArch64Mmu: use architecturally correct definitions for XN/UXN
The non-privileged execute never (UXN) page table bit defined for the
EL1&0 translation regime and the execute never (XN) bit defined for the
EL2 and EL3 translation regimes happen to share the same bit position,
but they are in fact defined distinctly by the architecture. So define
both bits explicitly, and add comments in places where we take advantage
of the fact that they share the same bit position.
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@18585 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'ArmPkg')
-rw-r--r-- | ArmPkg/Include/Chipset/AArch64Mmu.h | 6 | ||||
-rw-r--r-- | ArmPkg/Library/ArmLib/AArch64/AArch64Mmu.c | 3 |
2 files changed, 6 insertions, 3 deletions
diff --git a/ArmPkg/Include/Chipset/AArch64Mmu.h b/ArmPkg/Include/Chipset/AArch64Mmu.h index 2398ba2539..22e492d61d 100644 --- a/ArmPkg/Include/Chipset/AArch64Mmu.h +++ b/ArmPkg/Include/Chipset/AArch64Mmu.h @@ -75,12 +75,14 @@ #define TT_AF BIT10
#define TT_PXN_MASK BIT53
-#define TT_UXN_MASK BIT54
+#define TT_UXN_MASK BIT54 // EL1&0
+#define TT_XN_MASK BIT54 // EL2 / EL3
#define TT_ATTRIBUTES_MASK ((0xFFFULL << 52) | (0x3FFULL << 2))
#define TT_TABLE_PXN BIT59
-#define TT_TABLE_XN BIT60
+#define TT_TABLE_UXN BIT60 // EL1&0
+#define TT_TABLE_XN BIT60 // EL2 / EL3
#define TT_TABLE_NS BIT63
#define TT_TABLE_AP_MASK (BIT62 | BIT61)
diff --git a/ArmPkg/Library/ArmLib/AArch64/AArch64Mmu.c b/ArmPkg/Library/ArmLib/AArch64/AArch64Mmu.c index 3765d61ccd..d82c82c202 100644 --- a/ArmPkg/Library/ArmLib/AArch64/AArch64Mmu.c +++ b/ArmPkg/Library/ArmLib/AArch64/AArch64Mmu.c @@ -335,7 +335,8 @@ GetBlockEntryListFromAddress ( if (Attributes & TT_PXN_MASK) {
TableAttributes = TT_TABLE_PXN;
}
- if (Attributes & TT_UXN_MASK) {
+ // XN maps to UXN in the EL1&0 translation regime
+ if (Attributes & TT_XN_MASK) {
TableAttributes = TT_TABLE_XN;
}
if (Attributes & TT_NS) {
|