fix async thread cancellation on powerpc64
authorRich Felker <dalias@aerifal.cx>
Wed, 29 Aug 2018 16:48:42 +0000 (12:48 -0400)
committerRich Felker <dalias@aerifal.cx>
Wed, 29 Aug 2018 16:48:42 +0000 (12:48 -0400)
commit0ec49dab6794166d67fae4764ce7fdea42ea6103
treeb2904c92d52d5a884c7e3203b6906b446403702d
parent9cdaf1a86bf7790c8dec749118392ee78101ee37
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.
src/thread/powerpc64/syscall_cp.s