From 70f4d943beb1210cea915237bc0a2128fdf9a7fe Mon Sep 17 00:00:00 2001 From: Gunnar Beutner Date: Thu, 13 Oct 2022 10:17:44 +0200 Subject: [PATCH] Kernel+LibC: Add registers for AARCH64 in __mcontext --- Kernel/Arch/aarch64/mcontext.h | 34 +++++++++++++++++++- Userland/Libraries/LibC/sys/arch/i386/regs.h | 18 +++++++---- 2 files changed, 45 insertions(+), 7 deletions(-) diff --git a/Kernel/Arch/aarch64/mcontext.h b/Kernel/Arch/aarch64/mcontext.h index 57e7182c84..f1019404ff 100644 --- a/Kernel/Arch/aarch64/mcontext.h +++ b/Kernel/Arch/aarch64/mcontext.h @@ -13,7 +13,39 @@ extern "C" { #endif struct __attribute__((packed)) __mcontext { - int stub; + uint64_t r0; + uint64_t r1; + uint64_t r2; + uint64_t r3; + uint64_t r4; + uint64_t r5; + uint64_t r6; + uint64_t r7; + uint64_t r8; + uint64_t r9; + uint64_t r10; + uint64_t r11; + uint64_t r12; + uint64_t r13; + uint64_t r14; + uint64_t r15; + uint64_t r16; + uint64_t r17; + uint64_t r18; + uint64_t r19; + uint64_t r20; + uint64_t r21; + uint64_t r22; + uint64_t r23; + uint64_t r24; + uint64_t r25; + uint64_t r26; + uint64_t r27; + uint64_t r28; + uint64_t r29; + uint64_t r30; + uint64_t sp; + uint64_t pc; }; #ifdef __cplusplus diff --git a/Userland/Libraries/LibC/sys/arch/i386/regs.h b/Userland/Libraries/LibC/sys/arch/i386/regs.h index 4ce952ee5e..2d7396b35a 100644 --- a/Userland/Libraries/LibC/sys/arch/i386/regs.h +++ b/Userland/Libraries/LibC/sys/arch/i386/regs.h @@ -25,8 +25,10 @@ struct [[gnu::packed]] PtraceRegisters : public __mcontext { return eip; # elif ARCH(X86_64) return rip; +# elif ARCH(AARCH64) + return pc; # else - TODO_AARCH64(); +# error Unknown architecture # endif } @@ -36,9 +38,10 @@ struct [[gnu::packed]] PtraceRegisters : public __mcontext { eip = ip; # elif ARCH(X86_64) rip = ip; +# elif ARCH(AARCH64) + pc = ip; # else - (void)ip; - TODO_AARCH64(); +# error Unknown architecture # endif } @@ -48,8 +51,10 @@ struct [[gnu::packed]] PtraceRegisters : public __mcontext { return ebp; # elif ARCH(X86_64) return rbp; +# elif ARCH(AARCH64) + return r29; # else - TODO_AARCH64(); +# error Unknown architecture # endif } @@ -59,9 +64,10 @@ struct [[gnu::packed]] PtraceRegisters : public __mcontext { ebp = bp; # elif ARCH(X86_64) rbp = bp; +# elif ARCH(AARCH64) + r29 = bp; # else - (void)bp; - TODO_AARCH64(); +# error Unknown architecture # endif } # endif