提交 0ec49dab 编写于 作者: R Rich Felker

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.
上级 9cdaf1a8
...@@ -34,4 +34,11 @@ __cp_end: ...@@ -34,4 +34,11 @@ __cp_end:
blr blr
__cp_cancel: __cp_cancel:
mflr 0
bl 1f
.long .TOC.-.
1: mflr 3
lwa 2, 0(3)
add 2, 2, 3
mtlr 0
b __cancel b __cancel
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册