RFR: 8340205: Native linker allows MemoryLayout consisting of only PaddingLayout [v5]

Vladimir Kozelkov duke at openjdk.org
Sat Sep 28 07:00:36 UTC 2024


On Mon, 23 Sep 2024 16:35:18 GMT, Per Minborg <pminborg at openjdk.org> wrote:

>> This PR prevents sequence layout with padding to be used with the Linker.
>
> Per Minborg has updated the pull request incrementally with one additional commit since the last revision:
> 
>   Reword doce

I came with a new batch of weird layouts

`

        {
            // invalid after merge but logically valid
            Linker linker = Linker.nativeLinker();
            var padding = MemoryLayout.paddingLayout(1);
            var sequence = MemoryLayout.sequenceLayout(3, padding);
            var struct = MemoryLayout.structLayout(JAVA_BYTE, sequence, JAVA_INT);
            var fd = FunctionDescriptor.of(struct, struct, struct);
            linker.downcallHandle(fd);
        }

        {
            Linker linker = Linker.nativeLinker();
            var padding1 = MemoryLayout.paddingLayout(1);
            var padding2 = MemoryLayout.paddingLayout(2).withByteAlignment(2);
            var struct = MemoryLayout.structLayout(JAVA_BYTE, padding1, padding2, JAVA_INT);
            var fd = FunctionDescriptor.of(struct, struct, struct);
            linker.downcallHandle(fd);
        }

        {
            Linker linker = Linker.nativeLinker();
            var struct16 = MemoryLayout.structLayout(JAVA_LONG, JAVA_LONG);
            var padding16 = MemoryLayout.paddingLayout(16).withByteAlignment(16);
            var union = MemoryLayout.unionLayout(struct16, padding16);
            var fd = FunctionDescriptor.of(union, union, union);
            linker.downcallHandle(fd);
        }

        {
            Linker linker = Linker.nativeLinker();
            var struct32 = MemoryLayout.structLayout(MemoryLayout.sequenceLayout(4, JAVA_LONG));
            var padding1 = MemoryLayout.paddingLayout(1);
            var padding2 = MemoryLayout.paddingLayout(2).withByteAlignment(2);
            var padding4 = MemoryLayout.paddingLayout(4).withByteAlignment(4);
            var padding8 = MemoryLayout.paddingLayout(8).withByteAlignment(8);
            var padding16 = MemoryLayout.paddingLayout(16).withByteAlignment(16);
            var padding32 = MemoryLayout.paddingLayout(32).withByteAlignment(32);
            var union = MemoryLayout.unionLayout(struct32, padding32);
            var struct = MemoryLayout.structLayout(JAVA_BYTE, padding1, padding2, padding4, padding8, padding16, union);
            var fd = FunctionDescriptor.of(struct, struct, struct);
            linker.downcallHandle(fd);
        }
`

-------------

PR Comment: https://git.openjdk.org/jdk/pull/21041#issuecomment-2380451924


More information about the core-libs-dev mailing list