summaryrefslogtreecommitdiff
path: root/sysdeps/unix/sysv/linux/hppa/getcontext.S
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/unix/sysv/linux/hppa/getcontext.S')
-rw-r--r--sysdeps/unix/sysv/linux/hppa/getcontext.S16
1 files changed, 13 insertions, 3 deletions
diff --git a/sysdeps/unix/sysv/linux/hppa/getcontext.S b/sysdeps/unix/sysv/linux/hppa/getcontext.S
index d2e0db0323..b8f978fde8 100644
--- a/sysdeps/unix/sysv/linux/hppa/getcontext.S
+++ b/sysdeps/unix/sysv/linux/hppa/getcontext.S
@@ -1,5 +1,5 @@
/* Get current user context.
- Copyright (C) 2008-2016 Free Software Foundation, Inc.
+ Copyright (C) 2008-2018 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Helge Deller <deller@gmx.de>, 2008.
@@ -129,9 +129,14 @@ ENTRY(__getcontext)
fstds %fr31, 0(%r1)
/* Prologue */
+ stw %r2, -20(%sp)
+ .cfi_offset 2, -20
stwm %r4, 64(%sp)
+ .cfi_def_cfa_offset -64
+ .cfi_offset 4, 0
#ifdef PIC
stw %r19, -32(%sp)
+ .cfi_offset 19, 32
#endif
/* Set up the trampoline registers.
@@ -142,21 +147,26 @@ ENTRY(__getcontext)
stw %r4, oR24(%r26)
stw %r5, oR25(%r26)
stw %r6, oR26(%r26)
+#ifdef PIC
+ addil LT%__getcontext_ret, %r19
+ ldw RT%__getcontext_ret(%r1), %r1
+#else
ldil L%__getcontext_ret, %r1
ldo R%__getcontext_ret(%r1), %r1
+#endif
stw %r1, oR2(%r26)
/* Save the current signal mask. */
/* sigprocmask(SIG_BLOCK, NULL, &ucp->uc_sigmask); */
ldo oSIGMASK(%r26), %r24
copy %r0, %r25
- bl sigprocmask, %r2
+ bl __sigprocmask, %r2
ldi SIG_BLOCK, %r26
/* Epilogue */
ldw -84(%sp), %r2
#ifdef PIC
- ldw -96(%sp), %r19
+ ldw -32(%sp), %r19
#endif
bv %r0(%r2)
ldwm -64(%sp), %r4