summaryrefslogtreecommitdiff
path: root/coroutine/ppc64le
diff options
context:
space:
mode:
Diffstat (limited to 'coroutine/ppc64le')
-rw-r--r--coroutine/ppc64le/Context.S7
1 files changed, 7 insertions, 0 deletions
diff --git a/coroutine/ppc64le/Context.S b/coroutine/ppc64le/Context.S
index f7bcae2c3a..819264c245 100644
--- a/coroutine/ppc64le/Context.S
+++ b/coroutine/ppc64le/Context.S
@@ -1,11 +1,18 @@
#define TOKEN_PASTE(x,y) x##y
+.abiversion 2
.text
.align 2
.globl PREFIXED_SYMBOL(coroutine_transfer)
.type PREFIXED_SYMBOL(coroutine_transfer), @function
PREFIXED_SYMBOL(coroutine_transfer):
+ # Global entry: set up TOC pointer (r2) from r12.
+ # Required by ELFv2 ABI when this function is reached via the PLT.
+ addis 2, 12, .TOC. - PREFIXED_SYMBOL(coroutine_transfer)@ha
+ addi 2, 2, .TOC. - PREFIXED_SYMBOL(coroutine_transfer)@l
+ .localentry PREFIXED_SYMBOL(coroutine_transfer), .-PREFIXED_SYMBOL(coroutine_transfer)
+
# Make space on the stack for caller registers
addi 1,1,-160