Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8367156

[lworld] MacroAssembler::remove_frame hits "Field too big for insn"

XMLWordPrintable

    • In Review
    • aarch64

      Since JDK-8365996, compiler/valhalla/inlinetypes/TestLWorld.java intermittently fails with "-Xcomp -XX:-TieredCompilation -DIgnoreCompilerControls=true" on AArch64:

      # A fatal error has been detected by the Java Runtime Environment:
      #
      # Internal Error (/workspace/open/src/hotspot/cpu/aarch64/assembler_aarch64.hpp:265), pid=1108959, tid=1108976
      # guarantee(chk == -1 || chk == 0) failed: Field too big for insn
      #
      # JRE version: Java(TM) SE Runtime Environment (25.0) (fastdebug build 25-lworld5ea-LTS-2025-09-09-0157544.patricio.chilano.mateo.valhalla)
      # Java VM: Java HotSpot(TM) 64-Bit Server VM (fastdebug 25-lworld5ea-LTS-2025-09-09-0157544.patricio.chilano.mateo.valhalla, compiled mode, sharing, compressed oops, compressed class ptrs, g1 gc, linux-aarch64)
      # Problematic frame:
      # V [libjvm.so+0x43e3c0] Instruction_aarch64::sf(long, int, int)+0xe0

      Current CompileTask:
      C2:33283 5616 b compiler.valhalla.inlinetypes.TestLWorld::test101 (75 bytes)

      Stack: [0x0000ffff7005f000,0x0000ffff7025d000], sp=0x0000ffff70257f40, free space=2019k
      Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
      V [libjvm.so+0x43e3c0] Instruction_aarch64::sf(long, int, int)+0xe0 (assembler_aarch64.hpp:265)
      V [libjvm.so+0x732238] Assembler::ldp(Register, Register, Address)+0x198 (assembler_aarch64.hpp:641)
      V [libjvm.so+0x1381a90] MacroAssembler::remove_frame(int, bool)+0x70 (macroAssembler_aarch64.cpp:6142)
      V [libjvm.so+0x434904] MachEpilogNode::emit(C2_MacroAssembler*, PhaseRegAlloc*) const+0x60 (aarch64.ad:1838)
      V [libjvm.so+0x1569d4c] PhaseOutput::scratch_emit_size(Node const*)+0x2ec (output.cpp:3486)
      V [libjvm.so+0x15622c4] PhaseOutput::shorten_branches(unsigned int*)+0x2e4 (output.cpp:586)
      V [libjvm.so+0x1573dec] PhaseOutput::Output()+0x84c (output.cpp:359)
      V [libjvm.so+0x9b2874] Compile::Code_Gen()+0x7d4 (compile.cpp:3628)
      V [libjvm.so+0x9b68e0] Compile::Compile(ciEnv*, ciMethod*, int, Options, DirectiveSet*)+0x17a0 (compile.cpp:925)
      V [libjvm.so+0x7d58e0] C2Compiler::compile_method(ciEnv*, ciMethod*, int, bool, DirectiveSet*)+0x2bc (c2compiler.cpp:143)
      V [libjvm.so+0x9c53b8] CompileBroker::invoke_compiler_on_method(CompileTask*)+0x9d4 (compileBroker.cpp:2323)
      V [libjvm.so+0x9c626c] CompileBroker::compiler_thread_loop()+0x62c (compileBroker.cpp:1967)
      V [libjvm.so+0xed2528] JavaThread::thread_main_inner()+0x108 (javaThread.cpp:773)
      V [libjvm.so+0x187436c] Thread::call_run()+0xac (thread.cpp:243)
      V [libjvm.so+0x154839c] thread_native_entry(Thread*)+0x12c (os_linux.cpp:868)
      C [libc.so.6+0x80b50] start_thread+0x300

      Similar to JDK-8310844 / https://github.com/openjdk/jdk/pull/17266 , I think the problem is that the ldp instruction only supports a 7-bit signed immediate value (https://developer.arm.com/documentation/den0024/a/The-A64-instruction-set/Memory-access-instructions/Accessing-multiple-memory-locations).

            mchevalier Marc Chevalier
            thartmann Tobias Hartmann
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

              Created:
              Updated: