diff options
author | Thomas Schwinge <thomas@codesourcery.com> | 2012-06-23 11:42:29 +0200 |
---|---|---|
committer | Thomas Schwinge <thomas@codesourcery.com> | 2012-06-23 11:42:29 +0200 |
commit | a9def8c49d22815801408e62bedca26810cfceb7 (patch) | |
tree | ecc8d402f31616e3de136520692ad1abee0fdb80 | |
parent | 2a649725b939fe8a50089cce9644b9649ef4fe43 (diff) | |
download | glibc-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-- | ChangeLog | 3 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/sh/makecontext.S | 12 |
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 |