summaryrefslogtreecommitdiff
path: root/libc/sysdeps/linux/microblaze/setjmp.S
diff options
context:
space:
mode:
Diffstat (limited to 'libc/sysdeps/linux/microblaze/setjmp.S')
-rw-r--r--libc/sysdeps/linux/microblaze/setjmp.S32
1 files changed, 31 insertions, 1 deletions
diff --git a/libc/sysdeps/linux/microblaze/setjmp.S b/libc/sysdeps/linux/microblaze/setjmp.S
index 7acb9ea5d..d01c74555 100644
--- a/libc/sysdeps/linux/microblaze/setjmp.S
+++ b/libc/sysdeps/linux/microblaze/setjmp.S
@@ -10,7 +10,24 @@
* directory of this archive for more details.
*
* Written by Miles Bader <miles@gnu.org>
- */
+ *
+ * PIC code based on glibc 2.3.6 */
+
+/*
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, write to the Free
+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA. */
#define _SETJMP_H
#define _ASM
@@ -22,7 +39,11 @@
.globl C_SYMBOL_NAME(setjmp)
.align 4
C_SYMBOL_NAME(setjmp):
+#ifdef __PIC__
+ brid 1f
+#else
braid C_SYMBOL_NAME(__sigsetjmp)
+#endif
addi r6, r0, 1 /* Save the signal mask. */
.globl C_SYMBOL_NAME(_setjmp)
@@ -31,6 +52,7 @@ C_SYMBOL_NAME(_setjmp):
.globl C_SYMBOL_NAME(__sigsetjmp)
C_SYMBOL_NAME(__sigsetjmp):
+1:
/* Save registers relative to r5 (arg0)*/
swi r1, r5, 0 /* stack pointer */
swi r15, r5, 4 /* link register */
@@ -52,5 +74,13 @@ C_SYMBOL_NAME(__sigsetjmp):
swi r31, r5, 68
/* Make a tail call to __sigjmp_save; it takes the same args. */
+#ifdef __PIC__
+ mfs r12,rpc
+ addik r12,r12,_GLOBAL_OFFSET_TABLE_+8
+ lwi r12,r12,__sigjmp_save@GOT
+ brad r12
+ nop
+#else
braid C_SYMBOL_NAME(__sigjmp_save)
nop
+#endif