about summary refs log tree commit diff
path: root/sysdeps/sh/sh4
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/sh/sh4')
-rw-r--r--sysdeps/sh/sh4/Versions5
-rw-r--r--sysdeps/sh/sh4/__longjmp.S23
-rw-r--r--sysdeps/sh/sh4/bits/mathdef.h (renamed from sysdeps/sh/sh4/fpu/bits/mathdef.h)0
-rw-r--r--sysdeps/sh/sh4/dl-machine.h2
-rw-r--r--sysdeps/sh/sh4/dl-trampoline.S2
-rw-r--r--sysdeps/sh/sh4/fpu/feholdexcpt.c3
-rw-r--r--sysdeps/sh/sh4/fpu/fesetround.c3
-rw-r--r--sysdeps/sh/sh4/fpu/libm-test-ulps4
-rw-r--r--sysdeps/sh/sh4/setjmp.S29
9 files changed, 54 insertions, 17 deletions
diff --git a/sysdeps/sh/sh4/Versions b/sysdeps/sh/sh4/Versions
new file mode 100644
index 0000000000..8cc1c7b7d4
--- /dev/null
+++ b/sysdeps/sh/sh4/Versions
@@ -0,0 +1,5 @@
+ld {
+  GLIBC_PRIVATE {
+    __fpscr_values;
+  }
+}
diff --git a/sysdeps/sh/sh4/__longjmp.S b/sysdeps/sh/sh4/__longjmp.S
index 7cd83bfcc4..320a7d11f7 100644
--- a/sysdeps/sh/sh4/__longjmp.S
+++ b/sysdeps/sh/sh4/__longjmp.S
@@ -1,5 +1,5 @@
 /* longjmp for SH.
-   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
@@ -30,15 +30,28 @@ ENTRY (__longjmp)
 	mov.l	@r4+, r10
 	mov.l	@r4+, r11
 	mov.l	@r4+, r12
-	mov.l	@r4+, r13
-	mov.l	@r4+, r14
-	mov.l	@r4+, r15
 	mov	r5, r0		/* get the return value in place */
 	tst	r0, r0
 	bf.s	1f
-	 lds.l	@r4+, pr
+	 mov.l	@r4+, r13
 	mov	#1,r0		/* can't let setjmp() return zero! */
 1:
+#ifdef PTR_DEMANGLE
+	mov.l	@r4+, r2
+	PTR_DEMANGLE (r2, r1)
+	mov	r2, r14
+	mov.l	@r4+, r2
+	PTR_DEMANGLE2 (r2, r1)
+	mov	r2, r15
+	mov.l	@r4+, r2
+	PTR_DEMANGLE2 (r2, r1)
+	lds	r2, pr
+	mov	#0, r1
+#else
+	mov.l	@r4+, r14
+	mov.l	@r4+, r15
+	lds.l	@r4+, pr
+#endif
 	ldc.l	@r4+, gbr
 	lds.l	@r4+, fpscr
 	fmov.s	@r4+, fr12
diff --git a/sysdeps/sh/sh4/fpu/bits/mathdef.h b/sysdeps/sh/sh4/bits/mathdef.h
index 2b8caf1943..2b8caf1943 100644
--- a/sysdeps/sh/sh4/fpu/bits/mathdef.h
+++ b/sysdeps/sh/sh4/bits/mathdef.h
diff --git a/sysdeps/sh/sh4/dl-machine.h b/sysdeps/sh/sh4/dl-machine.h
deleted file mode 100644
index ec9f6f7b45..0000000000
--- a/sysdeps/sh/sh4/dl-machine.h
+++ /dev/null
@@ -1,2 +0,0 @@
-#define HAVE_FPU
-#include <sysdeps/sh/dl-machine.h>
diff --git a/sysdeps/sh/sh4/dl-trampoline.S b/sysdeps/sh/sh4/dl-trampoline.S
new file mode 100644
index 0000000000..f9529851a1
--- /dev/null
+++ b/sysdeps/sh/sh4/dl-trampoline.S
@@ -0,0 +1,2 @@
+#define HAVE_FPU
+#include <sysdeps/sh/dl-trampoline.S>
diff --git a/sysdeps/sh/sh4/fpu/feholdexcpt.c b/sysdeps/sh/sh4/fpu/feholdexcpt.c
index dafb4f7daa..7aac5a0d39 100644
--- a/sysdeps/sh/sh4/fpu/feholdexcpt.c
+++ b/sysdeps/sh/sh4/fpu/feholdexcpt.c
@@ -1,5 +1,5 @@
 /* Store current floating-point environment and clear exceptions.
-   Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
+   Copyright (C) 1997, 1998, 1999, 2000, 2005 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
@@ -35,3 +35,4 @@ feholdexcept (fenv_t *envp)
 
   return 1;
 }
+libm_hidden_def (feholdexcept)
diff --git a/sysdeps/sh/sh4/fpu/fesetround.c b/sysdeps/sh/sh4/fpu/fesetround.c
index 9966838387..cf4349004e 100644
--- a/sysdeps/sh/sh4/fpu/fesetround.c
+++ b/sysdeps/sh/sh4/fpu/fesetround.c
@@ -1,5 +1,5 @@
 /* Set current rounding direction.
-   Copyright (C) 1998, 2000 Free Software Foundation, Inc.
+   Copyright (C) 1998, 2000, 2005 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Andreas Jaeger <aj@arthur.rhein-neckar.de>, 1998.
 
@@ -41,3 +41,4 @@ fesetround (int round)
 
   return 1;
 }
+libm_hidden_def (fesetround)
diff --git a/sysdeps/sh/sh4/fpu/libm-test-ulps b/sysdeps/sh/sh4/fpu/libm-test-ulps
index 3dd37f1309..4831f4849b 100644
--- a/sysdeps/sh/sh4/fpu/libm-test-ulps
+++ b/sysdeps/sh/sh4/fpu/libm-test-ulps
@@ -60,12 +60,12 @@ float: 1
 ifloat: 1
 
 # cacosh
-Test "Real part of: cacosh (-2 - 3 i) == -1.9833870299165354323470769028940395 + 2.1414491111159960199416055713254211 i":
+Test "Real part of: cacosh (-2 - 3 i) == 1.9833870299165354323470769028940395 - 2.1414491111159960199416055713254211 i":
 double: 1
 float: 7
 idouble: 1
 ifloat: 7
-Test "Imaginary part of: cacosh (-2 - 3 i) == -1.9833870299165354323470769028940395 + 2.1414491111159960199416055713254211 i":
+Test "Imaginary part of: cacosh (-2 - 3 i) == 1.9833870299165354323470769028940395 - 2.1414491111159960199416055713254211 i":
 double: 1
 float: 3
 idouble: 1
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)