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

Improve error message for GroupLayouts that are too large on SysV

XMLWordPrintable

      When trying to link a function descriptor that contains an unbounded/max size sequence layout, an ArrayIndexOutOfBoundsException:

      java.lang.ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0
              at java.base/jdk.internal.foreign.abi.x64.sysv.TypeClass.groupByEightBytes(TypeClass.java:222)
              at java.base/jdk.internal.foreign.abi.x64.sysv.TypeClass.groupByEightBytes(TypeClass.java:218)
              at java.base/jdk.internal.foreign.abi.x64.sysv.TypeClass.groupByEightBytes(TypeClass.java:197)
              at java.base/jdk.internal.foreign.abi.x64.sysv.TypeClass.classifyStructType(TypeClass.java:127)
              at java.base/jdk.internal.foreign.abi.x64.sysv.TypeClass.ofStruct(TypeClass.java:70)
              at java.base/jdk.internal.foreign.abi.x64.sysv.TypeClass.classifyLayout(TypeClass.java:181)
              at java.base/jdk.internal.foreign.abi.x64.sysv.CallArranger$UnboxBindingCalculator.getBindings(CallArranger.java:253)
              at java.base/jdk.internal.foreign.abi.x64.sysv.CallArranger.getBindings(CallArranger.java:116)
              at java.base/jdk.internal.foreign.abi.x64.sysv.CallArranger.arrangeDowncall(CallArranger.java:129)
              at java.base/jdk.internal.foreign.abi.x64.sysv.SysVx64Linker.arrangeDowncall(SysVx64Linker.java:54)
              at java.base/jdk.internal.foreign.abi.AbstractLinker.lambda$downcallHandle$0(AbstractLinker.java:74)
              at java.base/jdk.internal.foreign.abi.SoftReferenceCache$Node.get(SoftReferenceCache.java:52)
              at java.base/jdk.internal.foreign.abi.SoftReferenceCache.get(SoftReferenceCache.java:38)
              at java.base/jdk.internal.foreign.abi.AbstractLinker.downcallHandle(AbstractLinker.java:71)

      The underlying issue is that the SysV classification has to devide the struct up in 8 bytes chunks, and classify each chunk individually. However, if the group layout is too large, this is not possible.

      We can more explicitly check for this condition, and improve the error message that is reported.

            jvernee Jorn Vernee
            jvernee Jorn Vernee
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

              Created:
              Updated:
              Resolved: