int main() { pthread_jit_write_protect_np(0); return *((int *)NULL); }
fantaxi
336 天前
Only apple can do !
felixlong
336 天前
@codehz 哈哈,估计 Apple 认为在 write_protect disable 模式下这个线程就只应该运行生成 JIT 代码的代码,不能干其它的事。也许 Apple 认为生成 JIT 代码的代码本身不会有这些骚操作。
daveh
336 天前
@codehz OpenJDK 已经改了,JRE 自己屎山代码的问题,为之前 Solaris 做的一个优化,还需要 Solaris 专有 API 配合才行,然后 Solaris 死了十几年了,这个却作为垃圾代码一直残留下来。 直到在最新 macOS 下帮发现了问题,OP 自己去看下 OpenJDK 的修改记录,不要在这瞎猜。
JB 已经有测试 JBR 发布,可以自己临时规避一下。
Apple 可改可不改,如果是安全原因不一定会改,但老版 JRE 使用也挺多,问题报多了可能也会改回去。