summaryrefslogtreecommitdiff
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
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