mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-30 08:40:07 +00:00
PowerPC: Fix uc_link == NULL handling for makecontex.
If the function registered with makecontext returns with a NULL context link the process should exit with zero, not non-zero.
This commit is contained in:
parent
b3563932f8
commit
d6cffd3ec0
@ -1,3 +1,8 @@
|
||||
2012-11-01 Andreas Schwab <schwab@linux-m68k.org>
|
||||
|
||||
* sysdeps/unix/sysv/linux/powerpc/powerpc64/makecontext.S: If the
|
||||
function returns with a NULL context exit with zero.
|
||||
|
||||
2012-11-01 Tulio Magno Quites Machado Filho <tuliom@linux.vnet.ibm.com>
|
||||
|
||||
* sysdeps/powerpc/Makefile (cflags): Remove -mnew-mnemonics.
|
||||
|
@ -134,26 +134,26 @@ L(noparms):
|
||||
'makecontext' call. If the pointer is NULL the process must
|
||||
terminate. */
|
||||
L(exitcode):
|
||||
/* Recover the ucontext and TOC from the dummy frame. */
|
||||
ld r1,FRAME_BACKCHAIN(r1) /* Unstack the parameter save area frame. */
|
||||
ld r3,FRAME_PARM1_SAVE(r1)
|
||||
ld r2,FRAME_TOC_SAVE(r1)
|
||||
ld r3,UCONTEXT_LINK(r3) /* Load the resume context. */
|
||||
cmpdi r3,0
|
||||
beq L(BADSTATUS)
|
||||
/* Recover the ucontext and TOC from the dummy frame. */
|
||||
ld r1,FRAME_BACKCHAIN(r1) /* Unstack the parameter save area frame. */
|
||||
ld r3,FRAME_PARM1_SAVE(r1)
|
||||
ld r2,FRAME_TOC_SAVE(r1)
|
||||
ld r3,UCONTEXT_LINK(r3) /* Load the resume context. */
|
||||
cmpdi r3,0
|
||||
beq L(do_exit)
|
||||
bl JUMPTARGET(__setcontext)
|
||||
nop
|
||||
|
||||
L(BADSTATUS):
|
||||
/* If setcontext returns (which can happen if the syscall fails) we will
|
||||
exit the program with error status (-1). */
|
||||
li r3,-1
|
||||
/* If setcontext returns (which can happen if the syscall fails) we will
|
||||
exit the program with error status (-1). */
|
||||
li r3,-1
|
||||
L(do_exit):
|
||||
#ifdef SHARED
|
||||
b JUMPTARGET(__GI_exit);
|
||||
b JUMPTARGET(__GI_exit);
|
||||
#else
|
||||
b JUMPTARGET(exit);
|
||||
nop
|
||||
b JUMPTARGET(exit);
|
||||
nop
|
||||
#endif
|
||||
b L(do_exit)
|
||||
|
||||
/* The address of the exit code is in the link register. Store the lr
|
||||
in the ucontext as LNK so the target function will return to our
|
||||
|
Loading…
Reference in New Issue
Block a user