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

Incorrect MachCallRuntimeNode::ret_addr_offset() for CallLeafNoFP on x86_32

XMLWordPrintable

    • b27
    • x86
    • linux

        JDK-8254231 adds [2] the following assert to output.cpp

            assert(!is_mcall || (call_returns[block->_pre_order] <= (uint) current_offset))

        Which verifies that the offset returned by MachCallNode::ret_addr_offset() (and sub-types) at [1] matches the emitted code, to avoid potential conflicts between oop maps of different calls.

        This assert is failing when running test/hotspot/jtreg/compiler/intrinsics/string/TestStringLatin1IndexOfChar.java on Linux-x86 (32-bits), because it forces lower SSE settings. The real issue is MachCallRuntimeNode::ret_addr_offset() computing the offset incorrectly for CallLeafNoFP: it does not include FP stack cleaning.

        [1] : https://github.com/openjdk/jdk/blob/master/src/hotspot/share/opto/output.cpp#L1530

        [2]:

        diff --git a/src/hotspot/share/opto/output.cpp b/src/hotspot/share/opto/output.cpp
        index 8e78481a491..681cd205044 100644
        --- a/src/hotspot/share/opto/output.cpp
        +++ b/src/hotspot/share/opto/output.cpp
        @@ -1683,6 +1683,8 @@ void PhaseOutput::fill_buffer(CodeBuffer* cb, uint* blk_starts) {
               n->emit(*cb, C->regalloc());
               current_offset = cb->insts_size();
         
        + assert(!is_mcall || (call_returns[block->_pre_order] <= (uint) current_offset), "ret_addr_offset() not within emitted code");
        +
               // Above we only verified that there is enough space in the instruction section.
               // However, the instruction may emit stubs that cause code buffer expansion.
               // Bail out here if expansion failed due to a lack of code cache space.

              shade Aleksey Shipilev
              jvernee Jorn Vernee
              Votes:
              0 Vote for this issue
              Watchers:
              6 Start watching this issue

                Created:
                Updated:
                Resolved: