about summary refs log tree commit diff
diff options
context:
space:
mode:
authorThomas Schwinge <thomas@codesourcery.com>2012-06-23 11:42:29 +0200
committerThomas Schwinge <thomas@codesourcery.com>2012-06-23 11:42:29 +0200
commita9def8c49d22815801408e62bedca26810cfceb7 (patch)
treeecc8d402f31616e3de136520692ad1abee0fdb80
parent2a649725b939fe8a50089cce9644b9649ef4fe43 (diff)
downloadglibc-a9def8c49d22815801408e62bedca26810cfceb7.tar.gz
glibc-a9def8c49d22815801408e62bedca26810cfceb7.tar.xz
glibc-a9def8c49d22815801408e62bedca26810cfceb7.zip
SH: makecontext/.Lexitcode: Always initialize the GOT register before use.
This is only relevant when returning from a context with »uc_link == NULL«,
which is not exercised in the testsuite.
-rw-r--r--ChangeLog3
-rw-r--r--sysdeps/unix/sysv/linux/sh/makecontext.S12
2 files changed, 11 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog
index 49c98fb10b..751797d4f4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
 2012-06-23  Thomas Schwinge  <thomas@codesourcery.com>
 
+	* sysdeps/unix/sysv/linux/sh/makecontext.S (.Lexitcode): Always
+	initialize the GOT register before use.
+
 	* sysdeps/unix/sysv/linux/sh/makecontext.S (__makecontext): Fix
 	calculation of ARGC > 4.
 
diff --git a/sysdeps/unix/sysv/linux/sh/makecontext.S b/sysdeps/unix/sysv/linux/sh/makecontext.S
index 4a0207a223..a847bb60b6 100644
--- a/sysdeps/unix/sysv/linux/sh/makecontext.S
+++ b/sysdeps/unix/sysv/linux/sh/makecontext.S
@@ -97,22 +97,26 @@ ENTRY(__makecontext)
 
 	.align	5
 .Lexitcode:
-	tst	r8, r8		/* ucb->uc_link == NULL? */
-	bt/s	2f
-	 mov	r8, r4		/* r4 <- ucb->uc_link */
 #ifdef PIC
 	mova	.Lgot, r0
 	mov.l	.Lgot, r12
 	add	r0, r12
+#endif
+	tst	r8, r8		/* ucb->uc_link == NULL? */
+	bt/s	2f
+	 mov	r8, r4		/* r4 <- ucb->uc_link */
 	mov.l	.Lsetcontext, r1
+#ifdef PIC
 	bsrf	r1
 .LPCS0:
 	 nop
 #else
-	mov.l	.Lsetcontext, r1
 	jsr	@r1
 	 nop
 #endif
+	/* If this returns (which can happen if the syscall fails) we'll exit
+	   the program with the return error value (-1).  */
+
 2:
 	mov.l	.Lexit, r1
 #ifdef PIC