History log of /seL4-test-master/projects/musllibc/src/signal/powerpc/sigsetjmp.s
Revision Date Author Comments
# cf1a9d9d 19-Apr-2015 Rich Felker <dalias@aerifal.cx>

remove possible-textrels from powerpc asm

these are perfectly fine with ld-time symbol binding, but otherwise
result in textrels. they cannot be replaced with @PLT jump targets
because the PLT thunks require a GOT register to be setup, so use a
hidden alias instead.


# 583e5512 17-Apr-2015 Rich Felker <dalias@aerifal.cx>

redesign sigsetjmp so that signal mask is restored after longjmp

the conventional way to implement sigsetjmp is to save the signal mask
then tail-call to setjmp; siglongjmp then restores the signal mask and
calls longjmp. the problem with this approach is that a signal already
pending, or arriving between unmasking of signals and restoration of
the saved stack pointer, will have its signal handler run on the stack
that was active before siglongjmp was called. this can lead to
unbounded stack usage when siglongjmp is used to leave a signal
handler.

in the new design, sigsetjmp saves its own return address inside the
extended part of the sigjmp_buf (outside the __jmp_buf part used by
setjmp) then calls setjmp to save a jmp_buf inside its own execution.
it then tail-calls to __sigsetjmp_tail, which uses the return value of
setjmp to determine whether to save the current signal mask or restore
a previously-saved mask.

as an added bonus, this design makes it so that siglongjmp and longjmp
are identical. this is useful because the __longjmp_chk function we
need to add for ABI-compatibility assumes siglongjmp and longjmp are
the same, but for different reasons -- it was designed assuming either
can access a flag just past the __jmp_buf indicating whether the
signal masked was saved, and act on that flag. however, early versions
of musl did not have space past the __jmp_buf for the non-sigjmp_buf
version of jmp_buf, so our setjmp cannot store such a flag without
risking clobbering memory on (very) old binaries.


# b9b2db2f 02-Apr-2014 Rich Felker <dalias@aerifal.cx>

add __sigsetjmp ABI-compat alias for sigsetjmp


# ac562aa1 23-Nov-2012 Rich Felker <dalias@aerifal.cx>

fix powerpc sigsetjmp asm to match the new jmp_buf size/offsets


# 3fae236e 18-Nov-2012 rofl0r <retnyg@gmx.net>

powerpc: handle syscall error in clone.

sigsetjmp: store temporaries in jmp_buf rather than on stack.


# 9565a349 18-Nov-2012 Rich Felker <dalias@aerifal.cx>

fix powerpc asm not to store data in volatile space below stack pointer

it's essential to decrement the stack pointer before writing to new
stack space, rather than afterwards. otherwise there is a race
condition during which asynchronous code (signals) could clobber the
data being stored.

it may be possible to optimize the code further using stwu, but I
wanted to avoid making any changes to the actual stack layout in this
commit. further improvements can be made separately if desired.


# d1bf452d 14-Nov-2012 Rich Felker <dalias@aerifal.cx>

fix indention with spaces in powerpc asm


# 1c8eb8ba 09-Nov-2012 rofl0r <retnyg@gmx.net>

PPC port cleaned up, static linking works well now.