summaryrefslogtreecommitdiff
path: root/sysdeps/sh/sh4/setjmp.S
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/sh/sh4/setjmp.S')
-rw-r--r--sysdeps/sh/sh4/setjmp.S29
1 files changed, 23 insertions, 6 deletions
diff --git a/sysdeps/sh/sh4/setjmp.S b/sysdeps/sh/sh4/setjmp.S
index c7b0aed0e7..f9a4f0a8ce 100644
--- a/sysdeps/sh/sh4/setjmp.S
+++ b/sysdeps/sh/sh4/setjmp.S
@@ -1,5 +1,5 @@
/* setjmp for SH4.
- Copyright (C) 1999, 2000 Free Software Foundation, Inc.
+ Copyright (C) 1999, 2000, 2005, 2006 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -18,9 +18,7 @@
02111-1307 USA. */
#include <sysdep.h>
-#define _SETJMP_H
-#define _ASM
-#include <bits/setjmp.h>
+#include <jmpbuf-offsets.h>
ENTRY (__sigsetjmp)
/* Save registers */
@@ -31,9 +29,22 @@ ENTRY (__sigsetjmp)
fmov.s fr12, @-r4
sts.l fpscr, @-r4
stc.l gbr, @-r4
+#ifdef PTR_MANGLE
+ sts pr, r2
+ PTR_MANGLE (r2, r1)
+ mov.l r2, @-r4
+ mov r15, r2
+ PTR_MANGLE2 (r2, r1)
+ mov.l r2, @-r4
+ mov r14, r2
+ PTR_MANGLE2 (r2, r1)
+ mov.l r2, @-r4
+ mov #0, r1
+#else
sts.l pr, @-r4
mov.l r15, @-r4
mov.l r14, @-r4
+#endif
mov.l r13, @-r4
mov.l r12, @-r4
mov.l r11, @-r4
@@ -41,8 +52,13 @@ ENTRY (__sigsetjmp)
mov.l r9, @-r4
mov.l r8, @-r4
+#if defined NOT_IN_libc && defined IS_IN_rtld
+ /* In ld.so we never save the signal mask. */
+ rts
+ mov #0, r0
+#else
/* Make a tail call to __sigjmp_save; it takes the same args. */
-#ifdef SHARED
+# ifdef SHARED
mov.l 1f, r1
mova 1f, r0
bra 2f
@@ -58,12 +74,13 @@ ENTRY (__sigsetjmp)
.align 2
.L1:
.long C_SYMBOL_NAME(__sigjmp_save@GOT)
-#else
+# else
mov.l .L1, r1
jmp @r1
nop
.align 2
.L1:
.long C_SYMBOL_NAME(__sigjmp_save)
+# endif
#endif
END (__sigsetjmp)