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

Incorrect MachCallRuntimeNode::ret_addr_offset() for CallLeafNoFP on x86_32

    XMLWordPrintable

    Details

    • Subcomponent:
    • Resolved In Build:
      b27
    • CPU:
      x86
    • OS:
      linux

      Backports

        Description

        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.

          Attachments

            Issue Links

              Activity

                People

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

                  Dates

                  Created:
                  Updated:
                  Resolved: