diff --git a/Tests/Kernel/elf-symbolication-kernel-read-exploit.cpp b/Tests/Kernel/elf-symbolication-kernel-read-exploit.cpp index 88ac29fa746..9f1a720f3de 100644 --- a/Tests/Kernel/elf-symbolication-kernel-read-exploit.cpp +++ b/Tests/Kernel/elf-symbolication-kernel-read-exploit.cpp @@ -11,9 +11,17 @@ #include #include +#if ARCH(I386) || ARCH(X86_64) asm("haxcode:\n" "1: jmp 1b\n" "haxcode_end:\n"); +#elif ARCH(AARCH64) +asm("haxcode:\n" + "1: b 1b\n" + "haxcode_end:\n"); +#else +# error Unknown architecture +#endif extern "C" void haxcode(); extern "C" void haxcode_end(); diff --git a/Userland/DynamicLoader/main.cpp b/Userland/DynamicLoader/main.cpp index 872c2606220..f9a430e9c2c 100644 --- a/Userland/DynamicLoader/main.cpp +++ b/Userland/DynamicLoader/main.cpp @@ -62,9 +62,14 @@ void _entry(int, char**, char**) __attribute__((used)); NAKED void _start(int, char**, char**) { +#ifdef AK_ARCH_AARCH64 + asm( + "bl _entry\n"); +#else asm( "push $0\n" "jmp _entry@plt\n"); +#endif } void _entry(int argc, char** argv, char** envp) diff --git a/Userland/Libraries/LibC/arch/aarch64/setjmp.S b/Userland/Libraries/LibC/arch/aarch64/setjmp.S index 65a47ee966b..fe8f4c0cfb6 100644 --- a/Userland/Libraries/LibC/arch/aarch64/setjmp.S +++ b/Userland/Libraries/LibC/arch/aarch64/setjmp.S @@ -17,3 +17,10 @@ _longjmp: longjmp: # FIXME: Possibly incomplete. ret + +.global _sigsetjmp +.global sigsetjmp +_sigsetjmp: +sigsetjmp: + # FIXME: Possibly incomplete. + ret diff --git a/Userland/Libraries/LibC/crt0.cpp b/Userland/Libraries/LibC/crt0.cpp index afe1a86d9b1..afb5cb29f8e 100644 --- a/Userland/Libraries/LibC/crt0.cpp +++ b/Userland/Libraries/LibC/crt0.cpp @@ -25,9 +25,14 @@ void _start(int, char**, char**) __attribute__((used)); NAKED void _start(int, char**, char**) { +# ifdef AK_ARCH_AARCH64 + asm( + "bl _entry\n"); +# else asm( "push $0\n" "jmp _entry@plt\n"); +# endif } int _entry(int argc, char** argv, char** env)