From cea2aa48eca693795e774e3ddc759eb6d1201cad Mon Sep 17 00:00:00 2001 From: khanhduytran0 Date: Thu, 24 Sep 2020 09:57:39 +0700 Subject: [PATCH] Try to fix aarch64 thread problem --- .../cpu/aarch64/vm/macroAssembler_aarch64.cpp | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/override-jre-files/hotspot/src/cpu/aarch64/vm/macroAssembler_aarch64.cpp b/override-jre-files/hotspot/src/cpu/aarch64/vm/macroAssembler_aarch64.cpp index 112b994..ce6a45e 100644 --- a/override-jre-files/hotspot/src/cpu/aarch64/vm/macroAssembler_aarch64.cpp +++ b/override-jre-files/hotspot/src/cpu/aarch64/vm/macroAssembler_aarch64.cpp @@ -5270,20 +5270,22 @@ void MacroAssembler::char_array_compress(Register src, Register dst, Register le // call to Thread::current or, indeed, the call setup code. // x86 appears to save C arg registers. void MacroAssembler::get_thread(Register dst) { - // Save all call-clobbered regs except dst, plus r19 and r20. - RegSet saved_regs = RegSet::range(r0, r20) + lr - dst; + // - Save all call-clobbered regs except dst, plus r19 and r20. + RegSet saved_regs = RegSet::range(r0, r1) + lr - dst; + // - RegSet saved_regs = RegSet::range(r0, r20) + lr - dst; // + RegSet saved_regs = RegSet::range(r0, r1) + lr - dst; push(saved_regs, sp); - // FIX-ME: implement - // return Thread::current() + // - FIX-ME: implement + // - return Thread::current() -// + mov(lr, CAST_FROM_FN_PTR(address, JavaThread::aarch64_get_thread_helper)); -// + blrt(lr, 1, 0, 1); + // + mov(lr, CAST_FROM_FN_PTR(address, JavaThread::aarch64_get_thread_helper)); + mov(lr, CAST_FROM_FN_PTR(address, Thread::current)); + blrt(lr, 1, 0, 1); if (dst != c_rarg0) { mov(dst, c_rarg0); } - // restore pushed registers + // - restore pushed registers pop(saved_regs, sp); }