aboutsummaryrefslogtreecommitdiff
path: root/sysdeps
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 /sysdeps
parent2a649725b939fe8a50089cce9644b9649ef4fe43 (diff)
downloadglibc-a9def8c49d22815801408e62bedca26810cfceb7.zip
glibc-a9def8c49d22815801408e62bedca26810cfceb7.tar.gz
glibc-a9def8c49d22815801408e62bedca26810cfceb7.tar.bz2
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.
Diffstat (limited to 'sysdeps')
-rw-r--r--sysdeps/unix/sysv/linux/sh/makecontext.S12
1 files changed, 8 insertions, 4 deletions
diff --git a/sysdeps/unix/sysv/linux/sh/makecontext.S b/sysdeps/unix/sysv/linux/sh/makecontext.S
index 4a0207a..a847bb6 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