mirror of
https://github.com/acidanthera/audk.git
synced 2025-07-23 13:44:33 +02:00
Ring3: Added EL0 support for ARM.
This commit is contained in:
parent
54d7a130ec
commit
618149a40d
@ -142,10 +142,21 @@ UpdatePageEntries (
|
|||||||
EntryValue |= TT_DESCRIPTOR_PAGE_AF;
|
EntryValue |= TT_DESCRIPTOR_PAGE_AF;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((Attributes & EFI_MEMORY_RO) != 0) {
|
if ((Attributes & EFI_MEMORY_USER) != 0) {
|
||||||
EntryValue |= TT_DESCRIPTOR_PAGE_AP_RO_RO;
|
//
|
||||||
|
// TODO: Add PXN for Translation table descriptors.
|
||||||
|
//
|
||||||
|
if ((Attributes & EFI_MEMORY_RO) != 0) {
|
||||||
|
EntryValue |= TT_DESCRIPTOR_PAGE_AP_RO_RO;
|
||||||
|
} else {
|
||||||
|
EntryValue |= TT_DESCRIPTOR_PAGE_AP_RW_RW;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
EntryValue |= TT_DESCRIPTOR_PAGE_AP_RW_RW;
|
if ((Attributes & EFI_MEMORY_RO) != 0) {
|
||||||
|
EntryValue |= TT_DESCRIPTOR_PAGE_AP_NO_RO;
|
||||||
|
} else {
|
||||||
|
EntryValue |= TT_DESCRIPTOR_PAGE_AP_NO_RW;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((Attributes & EFI_MEMORY_XP) != 0) {
|
if ((Attributes & EFI_MEMORY_XP) != 0) {
|
||||||
|
@ -63,15 +63,18 @@ SectionToGcdAttributes (
|
|||||||
// determine protection attributes
|
// determine protection attributes
|
||||||
switch (SectionAttributes & TT_DESCRIPTOR_SECTION_AP_MASK) {
|
switch (SectionAttributes & TT_DESCRIPTOR_SECTION_AP_MASK) {
|
||||||
case TT_DESCRIPTOR_SECTION_AP_NO_RW:
|
case TT_DESCRIPTOR_SECTION_AP_NO_RW:
|
||||||
|
break;
|
||||||
case TT_DESCRIPTOR_SECTION_AP_RW_RW:
|
case TT_DESCRIPTOR_SECTION_AP_RW_RW:
|
||||||
// normal read/write access, do not add additional attributes
|
*GcdAttributes |= EFI_MEMORY_USER;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// read only cases map to write-protect
|
// read only cases map to write-protect
|
||||||
case TT_DESCRIPTOR_SECTION_AP_NO_RO:
|
case TT_DESCRIPTOR_SECTION_AP_NO_RO:
|
||||||
case TT_DESCRIPTOR_SECTION_AP_RO_RO:
|
|
||||||
*GcdAttributes |= EFI_MEMORY_RO;
|
*GcdAttributes |= EFI_MEMORY_RO;
|
||||||
break;
|
break;
|
||||||
|
case TT_DESCRIPTOR_SECTION_AP_RO_RO:
|
||||||
|
*GcdAttributes |= EFI_MEMORY_USER | EFI_MEMORY_RO;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// now process eXectue Never attribute
|
// now process eXectue Never attribute
|
||||||
@ -468,10 +471,21 @@ EfiAttributeToArmAttribute (
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Determine protection attributes
|
// Determine protection attributes
|
||||||
if ((EfiAttributes & EFI_MEMORY_RO) != 0) {
|
if ((EfiAttributes & EFI_MEMORY_USER) != 0) {
|
||||||
ArmAttributes |= TT_DESCRIPTOR_SECTION_AP_RO_RO;
|
//
|
||||||
|
// TODO: Add PXN for Translation table descriptors.
|
||||||
|
//
|
||||||
|
if ((EfiAttributes & EFI_MEMORY_RO) != 0) {
|
||||||
|
ArmAttributes |= TT_DESCRIPTOR_SECTION_AP_RO_RO;
|
||||||
|
} else {
|
||||||
|
ArmAttributes |= TT_DESCRIPTOR_SECTION_AP_RW_RW;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
ArmAttributes |= TT_DESCRIPTOR_SECTION_AP_RW_RW;
|
if ((EfiAttributes & EFI_MEMORY_RO) != 0) {
|
||||||
|
ArmAttributes |= TT_DESCRIPTOR_SECTION_AP_NO_RO;
|
||||||
|
} else {
|
||||||
|
ArmAttributes |= TT_DESCRIPTOR_SECTION_AP_NO_RW;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Determine eXecute Never attribute
|
// Determine eXecute Never attribute
|
||||||
|
Loading…
x
Reference in New Issue
Block a user