mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 04:37:44 +00:00
Kernel: Add alignment specifier to aarch64 register definitions
When disabling UBSAN, the compiler would complain that the constraints of the inline assembly could not be met. By adding the alignas specifier the compiler can now determine that the struct can be passed into a register, and thus the constraints are met.
This commit is contained in:
parent
b35293d945
commit
9f730fab8d
1 changed files with 9 additions and 8 deletions
|
@ -14,7 +14,7 @@ namespace Kernel::Aarch64 {
|
|||
|
||||
// https://developer.arm.com/documentation/ddi0595/2021-06/AArch64-Registers/ID-AA64MMFR0-EL1--AArch64-Memory-Model-Feature-Register-0
|
||||
// Memory Model Feature Register 0
|
||||
struct ID_AA64MMFR0_EL1 {
|
||||
struct alignas(u64) ID_AA64MMFR0_EL1 {
|
||||
int PARange : 4;
|
||||
int ASIDBits : 4;
|
||||
int BigEnd : 4;
|
||||
|
@ -41,10 +41,11 @@ struct ID_AA64MMFR0_EL1 {
|
|||
return feature_register;
|
||||
}
|
||||
};
|
||||
static_assert(sizeof(ID_AA64MMFR0_EL1) == 8);
|
||||
|
||||
// https://developer.arm.com/documentation/ddi0595/2021-06/AArch64-Registers/TCR-EL1--Translation-Control-Register--EL1-
|
||||
// Translation Control Register
|
||||
struct TCR_EL1 {
|
||||
struct alignas(u64) TCR_EL1 {
|
||||
|
||||
enum Shareability {
|
||||
NonSharable = 0b00,
|
||||
|
@ -155,7 +156,7 @@ static_assert(sizeof(TCR_EL1) == 8);
|
|||
|
||||
// https://developer.arm.com/documentation/ddi0595/2021-03/AArch64-Registers/SCTLR-EL1--System-Control-Register--EL1-
|
||||
// System Control Register
|
||||
struct SCTLR_EL1 {
|
||||
struct alignas(u64) SCTLR_EL1 {
|
||||
int M : 1;
|
||||
int A : 1;
|
||||
int C : 1;
|
||||
|
@ -235,7 +236,7 @@ static_assert(sizeof(SCTLR_EL1) == 8);
|
|||
|
||||
// https://developer.arm.com/documentation/ddi0595/2021-06/AArch64-Registers/HCR-EL2--Hypervisor-Configuration-Register
|
||||
// Hypervisor Configuration Register
|
||||
struct HCR_EL2 {
|
||||
struct alignas(u64) HCR_EL2 {
|
||||
int VM : 1;
|
||||
int SWIO : 1;
|
||||
int PTW : 1;
|
||||
|
@ -300,7 +301,7 @@ static_assert(sizeof(HCR_EL2) == 8);
|
|||
|
||||
// https://developer.arm.com/documentation/ddi0595/2021-06/AArch64-Registers/SCR-EL3--Secure-Configuration-Register
|
||||
// Secure Configuration Register
|
||||
struct SCR_EL3 {
|
||||
struct alignas(u64) SCR_EL3 {
|
||||
int NS : 1;
|
||||
int IRQ : 1;
|
||||
int FIQ : 1;
|
||||
|
@ -354,7 +355,7 @@ struct SCR_EL3 {
|
|||
};
|
||||
static_assert(sizeof(SCR_EL3) == 8);
|
||||
|
||||
struct SPSR_EL2 {
|
||||
struct alignas(u64) SPSR_EL2 {
|
||||
enum Mode : u16 {
|
||||
EL0t = 0b0000,
|
||||
EL1t = 0b0100,
|
||||
|
@ -405,7 +406,7 @@ static_assert(sizeof(SPSR_EL2) == 8);
|
|||
|
||||
// https://developer.arm.com/documentation/ddi0595/2021-06/AArch64-Registers/SPSR-EL3--Saved-Program-Status-Register--EL3-
|
||||
// Saved Program Status Register
|
||||
struct SPSR_EL3 {
|
||||
struct alignas(u64) SPSR_EL3 {
|
||||
enum Mode : uint16_t {
|
||||
EL0t = 0b0000,
|
||||
EL1t = 0b0100,
|
||||
|
@ -454,7 +455,7 @@ static_assert(sizeof(SPSR_EL3) == 8);
|
|||
|
||||
// https://developer.arm.com/documentation/ddi0595/2020-12/AArch64-Registers/MAIR-EL1--Memory-Attribute-Indirection-Register--EL1-?lang=en#fieldset_0-63_0
|
||||
// Memory Attribute Indirection Register
|
||||
struct MAIR_EL1 {
|
||||
struct alignas(u64) MAIR_EL1 {
|
||||
using AttributeEncoding = uint8_t;
|
||||
AttributeEncoding Attr[8];
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue