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

AArch64: Struct with 64-bit bitfield (128-bit on AArch64) may be passed in wrong registers

    Details

    • Type: Bug
    • Status: Open
    • Priority: P4
    • Resolution: Unresolved
    • Affects Version/s: 14, 15
    • Fix Version/s: tbd
    • Component/s: hotspot
    • Labels:
    • Environment:

      Tested on Ampere AArch64 systems but should be a generic issue

    • Subcomponent:
    • CPU:
      aarch64
    • OS:
      linux

      Description

      Building jdk with GCC 9.1+ would generate ton of warnings like "parameter passing for argument of type '...' changed in GCC 9.1".
      The message is notifying a potential AArch64 ABI's "bug with the handling of 128-bit bit-fields", see details in the description and inline comments of this GCC patch:

      https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88469
      https://gcc.gnu.org/viewcvs/gcc?view=revision&revision=268273
      https://patches.linaro.org/patch/156615

      One of the warning messages looks like:

      src/hotspot/share/interpreter/bytecodeUtils.cpp: In member function 'StackSlotAnalysisData StackSlotAnalysisData::merge(StackSlotAnalysisData)':
      src/hotspot/share/interpreter/bytecodeUtils.cpp:368:23: note: parameter passing for argument of type 'StackSlotAnalysisData' changed in GCC 9.1
        368 | StackSlotAnalysisData StackSlotAnalysisData::merge(StackSlotAnalysisData other) {
            | ^~~~~~~~~~~~~~~~~~~~~
      src/hotspot/share/interpreter/bytecodeUtils.cpp: In member function 'void SimulatedOperandStack::push_raw(StackSlotAnalysisData)':
      src/hotspot/share/interpreter/bytecodeUtils.cpp:396:6: note: parameter passing for argument of type 'StackSlotAnalysisData' changed in GCC 9.1
        396 | void SimulatedOperandStack::push_raw(StackSlotAnalysisData slotData) {
            | ^~~~~~~~~~~~~~~~~~~~~
      src/hotspot/share/interpreter/bytecodeUtils.cpp: In member function 'void SimulatedOperandStack::push(StackSlotAnalysisData)':
      src/hotspot/share/interpreter/bytecodeUtils.cpp:404:6: note: parameter passing for argument of type 'StackSlotAnalysisData' changed in GCC 9.1
        404 | void SimulatedOperandStack::push(StackSlotAnalysisData slotData) {
            | ^~~~~~~~~~~~~~~~~~~~~

        Attachments

          Activity

            People

            • Assignee:
              Unassigned
              Reporter:
              qpzhang Patrick Zhang
            • Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

              • Created:
                Updated: