mirror of git://git.musl-libc.org/musl
fix async thread cancellation on powerpc64
entering the local entry point for __cancel from __cp_cancel is valid if __cp_cancel was reached from __syscall_cp, since both are in libc and share the same TOC pointer, but it is not valid if __cp_cancel was reached when cancel_handler rewrote the program counter for asynchronous cancellation of code outside libc. to ensure __cancel is entered with a valid TOC pointer, recompute the correct value in a PC-relative manner before jumping.
This commit is contained in:
parent
9cdaf1a86b
commit
0ec49dab67
|
@ -34,4 +34,11 @@ __cp_end:
|
|||
blr
|
||||
|
||||
__cp_cancel:
|
||||
mflr 0
|
||||
bl 1f
|
||||
.long .TOC.-.
|
||||
1: mflr 3
|
||||
lwa 2, 0(3)
|
||||
add 2, 2, 3
|
||||
mtlr 0
|
||||
b __cancel
|
||||
|
|
Loading…
Reference in New Issue