about summary refs log tree commit diff
path: root/sysdeps/sh/sh3
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2006-01-20 16:49:36 +0000
committerUlrich Drepper <drepper@redhat.com>2006-01-20 16:49:36 +0000
commita6df738797825b5d19448903b9b7c35b091e13c2 (patch)
tree84bcbef708f799bdfda21dd76bbba26a53ae2e7d /sysdeps/sh/sh3
parent7c65e9001b93d5d20046bc4d50fd10fff5f4adc2 (diff)
downloadglibc-a6df738797825b5d19448903b9b7c35b091e13c2.tar.gz
glibc-a6df738797825b5d19448903b9b7c35b091e13c2.tar.xz
glibc-a6df738797825b5d19448903b9b7c35b091e13c2.zip
* sysdeps/sh/sh4/__longjmp.S: Demangle also r14 and r15.
	* sysdeps/sh/sh3/__longjmp.S: Likewise.
	* sysdeps/sh/sh4/setjmp.S: Mangle also r14 and r15.
	* sysdeps/sh/sh3/setjmp.S: Likewise.
	* sysdeps/unix/sysv/linux/sh/sysdep.h [__ASSEMBLER__]
	(PTR_MANGLE): Add temporary register as the second parameter.
	(PTR_DEMANGLE): Likewize.
	(PTR_MANGLE2, PTR_DEMANGLE2): Define.
Diffstat (limited to 'sysdeps/sh/sh3')
-rw-r--r--sysdeps/sh/sh3/__longjmp.S17
-rw-r--r--sysdeps/sh/sh3/setjmp.S11
2 files changed, 21 insertions, 7 deletions
diff --git a/sysdeps/sh/sh3/__longjmp.S b/sysdeps/sh/sh3/__longjmp.S
index 08d39d02dd..c6d8a3214c 100644
--- a/sysdeps/sh/sh3/__longjmp.S
+++ b/sysdeps/sh/sh3/__longjmp.S
@@ -1,5 +1,5 @@
 /* longjmp for SH.
-   Copyright (C) 1999, 2000, 2005 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,19 +30,26 @@ ENTRY (__longjmp)
 	mov.l	@r4+, r10
 	mov.l	@r4+, r11
 	mov.l	@r4+, r12
-	mov.l	@r4+, r13
-	mov.l	@r4+, r14
 	mov	r5, r0		/* get the return value in place */
 	tst	r0, r0
 	bf.s	1f
-	 mov.l	@r4+, r15
+	 mov.l	@r4+, r13
 	mov	#1,r0		/* can't let setjmp() return zero! */
 1:
 #ifdef PTR_DEMANGLE
 	mov.l	@r4+, r2
-	PTR_DEMANGLE (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
 	rts
diff --git a/sysdeps/sh/sh3/setjmp.S b/sysdeps/sh/sh3/setjmp.S
index c125b29ae7..d04e4b851f 100644
--- a/sysdeps/sh/sh3/setjmp.S
+++ b/sysdeps/sh/sh3/setjmp.S
@@ -26,13 +26,20 @@ ENTRY (__sigsetjmp)
 	stc.l	gbr, @-r4
 #ifdef PTR_MANGLE
 	sts	pr, r2
-	PTR_MANGLE (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
-#endif
 	mov.l	r15, @-r4
 	mov.l	r14, @-r4
+#endif
 	mov.l	r13, @-r4
 	mov.l	r12, @-r4
 	mov.l	r11, @-r4