summaryrefslogtreecommitdiffstats
path: root/src/kernel/start.S
diff options
context:
space:
mode:
Diffstat (limited to 'src/kernel/start.S')
-rw-r--r--src/kernel/start.S11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/kernel/start.S b/src/kernel/start.S
index 1ca4fdb62..f78b58c63 100644
--- a/src/kernel/start.S
+++ b/src/kernel/start.S
@@ -117,7 +117,7 @@ intvect_system_call:
;// Retrieve processing address for interrupt.
lis r1,intvect_system_call_finish_save@h
- li r1,intvect_system_call_finish_save@l
+ ori r1,intvect_system_call_finish_save@l
;// Save interrupt address in SPRG0
mtsprg0 r1
@@ -125,6 +125,15 @@ intvect_system_call:
b kernel_save_task ;// Save current task.
intvect_system_call_finish_save:
+ ;// Get TOC entry for kernel_execute_systemcall
+ lis r2, kernel_execute_systemcall@h
+ ori r2, r2, kernel_execute_systemcall@l
+ ld r0,0(r2) ;// Load call addr.
+ mtlr r0
+ ld r2,8(r2) ;// Load TOC base.
+
+ blr ;// Call kernel_execute_systemcall
+ nop
b kernel_dispatch_task ;// Return to task.
.org _start + 0xD00
OpenPOWER on IntegriCloud