Browse Source

Kernel+LibC: Add registers for AARCH64 in __mcontext

Gunnar Beutner 2 năm trước cách đây
mục cha
commit
70f4d943be
2 tập tin đã thay đổi với 45 bổ sung7 xóa
  1. 33 1
      Kernel/Arch/aarch64/mcontext.h
  2. 12 6
      Userland/Libraries/LibC/sys/arch/i386/regs.h

+ 33 - 1
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

+ 12 - 6
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