summaryrefslogtreecommitdiffhomepage
path: root/dev/ZBA/Sources
diff options
context:
space:
mode:
Diffstat (limited to 'dev/ZBA/Sources')
-rw-r--r--dev/ZBA/Sources/HEL/AMD64/BootJump.S6
-rw-r--r--dev/ZBA/Sources/Thread.cxx5
2 files changed, 4 insertions, 7 deletions
diff --git a/dev/ZBA/Sources/HEL/AMD64/BootJump.S b/dev/ZBA/Sources/HEL/AMD64/BootJump.S
index f9943ecf..d8e09d4e 100644
--- a/dev/ZBA/Sources/HEL/AMD64/BootJump.S
+++ b/dev/ZBA/Sources/HEL/AMD64/BootJump.S
@@ -9,15 +9,9 @@
@brief this function setups a stack and then jumps to
a function */
rt_jump_to_address:
- mov rsp, r8
-
- push rax
- push rdx
mov rbx, rcx
mov rcx, rdx
jmp rbx
- pop rdx
- pop rax
ret
diff --git a/dev/ZBA/Sources/Thread.cxx b/dev/ZBA/Sources/Thread.cxx
index c7a62a04..1ea83618 100644
--- a/dev/ZBA/Sources/Thread.cxx
+++ b/dev/ZBA/Sources/Thread.cxx
@@ -22,6 +22,9 @@ EXTERN_C{
#include <string.h>
}
+EXTERN_C Void
+rt_jump_to_address(VoidPtr start, VoidPtr handover);
+
// External boot services symbol.
EXTERN EfiBootServices* BS;
@@ -162,7 +165,7 @@ namespace Boot
err_fn(handover);
}
- reinterpret_cast<HEL::HandoverProc>(fStartAddress)(handover);
+ rt_jump_to_address(fStartAddress, handover);
}
const Char* BThread::GetName()