public release
This commit is contained in:
47
hbl/source/trampoline.s
Normal file
47
hbl/source/trampoline.s
Normal file
@@ -0,0 +1,47 @@
|
||||
.section .text.nroEntrypointTrampoline, "ax", %progbits
|
||||
.align 2
|
||||
.global nroEntrypointTrampoline
|
||||
.type nroEntrypointTrampoline, %function
|
||||
.cfi_startproc
|
||||
nroEntrypointTrampoline:
|
||||
|
||||
// Reset stack pointer.
|
||||
adrp x8, __stack_top //Defined in libnx.
|
||||
ldr x8, [x8, #:lo12:__stack_top]
|
||||
mov sp, x8
|
||||
|
||||
// Call NRO.
|
||||
blr x2
|
||||
|
||||
// Save retval
|
||||
adrp x1, g_lastRet
|
||||
str w0, [x1, #:lo12:g_lastRet]
|
||||
|
||||
// Reset stack pointer and load next NRO.
|
||||
adrp x8, __stack_top
|
||||
ldr x8, [x8, #:lo12:__stack_top]
|
||||
mov sp, x8
|
||||
|
||||
b loadNro
|
||||
|
||||
.cfi_endproc
|
||||
|
||||
.section .text.__libnx_exception_entry, "ax", %progbits
|
||||
.align 2
|
||||
.global __libnx_exception_entry
|
||||
.type __libnx_exception_entry, %function
|
||||
.cfi_startproc
|
||||
__libnx_exception_entry:
|
||||
|
||||
// Divert execution to the NRO entrypoint (if a NRO is actually loaded).
|
||||
adrp x7, g_nroAddr
|
||||
ldr x7, [x7, #:lo12:g_nroAddr]
|
||||
cbz x7, .Lfail
|
||||
br x7
|
||||
|
||||
.Lfail:
|
||||
// Otherwise, pass this unhandled exception right back to the kernel.
|
||||
mov w0, #0xf801 // KERNELRESULT(UnhandledUserInterrupt)
|
||||
svc 0x28 // svcReturnFromException
|
||||
|
||||
.cfi_endproc
|
||||
Reference in New Issue
Block a user