|
|
|
@ -26,28 +26,28 @@ public:
|
|
|
|
|
virtual ~ARM_Interface() = default;
|
|
|
|
|
|
|
|
|
|
struct ThreadContext32 {
|
|
|
|
|
std::array<u32, 16> cpu_registers;
|
|
|
|
|
u32 cpsr;
|
|
|
|
|
std::array<u8, 4> padding;
|
|
|
|
|
std::array<u64, 32> fprs;
|
|
|
|
|
u32 fpscr;
|
|
|
|
|
u32 fpexc;
|
|
|
|
|
u32 tpidr;
|
|
|
|
|
std::array<u32, 16> cpu_registers{};
|
|
|
|
|
u32 cpsr{};
|
|
|
|
|
std::array<u8, 4> padding{};
|
|
|
|
|
std::array<u64, 32> fprs{};
|
|
|
|
|
u32 fpscr{};
|
|
|
|
|
u32 fpexc{};
|
|
|
|
|
u32 tpidr{};
|
|
|
|
|
};
|
|
|
|
|
// Internally within the kernel, it expects the AArch32 version of the
|
|
|
|
|
// thread context to be 344 bytes in size.
|
|
|
|
|
static_assert(sizeof(ThreadContext32) == 0x158);
|
|
|
|
|
|
|
|
|
|
struct ThreadContext64 {
|
|
|
|
|
std::array<u64, 31> cpu_registers;
|
|
|
|
|
u64 sp;
|
|
|
|
|
u64 pc;
|
|
|
|
|
u32 pstate;
|
|
|
|
|
std::array<u8, 4> padding;
|
|
|
|
|
std::array<u128, 32> vector_registers;
|
|
|
|
|
u32 fpcr;
|
|
|
|
|
u32 fpsr;
|
|
|
|
|
u64 tpidr;
|
|
|
|
|
std::array<u64, 31> cpu_registers{};
|
|
|
|
|
u64 sp{};
|
|
|
|
|
u64 pc{};
|
|
|
|
|
u32 pstate{};
|
|
|
|
|
std::array<u8, 4> padding{};
|
|
|
|
|
std::array<u128, 32> vector_registers{};
|
|
|
|
|
u32 fpcr{};
|
|
|
|
|
u32 fpsr{};
|
|
|
|
|
u64 tpidr{};
|
|
|
|
|
};
|
|
|
|
|
// Internally within the kernel, it expects the AArch64 version of the
|
|
|
|
|
// thread context to be 800 bytes in size.
|
|
|
|
|