diff options
-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 |