RFR: 8308031: Linkers should reject unpromoted variadic parameters
Jorn Vernee
jvernee at openjdk.org
Wed May 31 14:10:09 UTC 2023
In C, arguments smaller than `int` are promoted to (`unsigned`) `int`, and `float` is promoted to `double`, when being passed as variadic argument (see e.g. https://en.cppreference.com/w/c/language/conversion#Default_argument_promotions). This patch restricts the layouts that can be used as variadic layouts to what is allowed by the C specification.
The fallback linker is also updated to use to correct function to link variadic calls (not doing this turned out not to be a problem so far, but it is problematic for instance on Mac/AArch64 when using the fallback linker). Adding the restriction on layouts for all linkers is also partly motivated by the fallback linker rejecting such unsupported variadic layouts already.
I've added a small paragraph to the Linker javadoc as well that explains the restriction. Comments on that are welcome, but please explain.
The tests are updated to no longer try to link variadic functions with the illegal layouts, and I've added some more negative tests to TestIllegalLink.
Testing:
- local testing on Windows/x64
- tier1-3 + jdk-tier5 (ongoing)
- manual test run on mac/aarch64 with the fallback linker to verify the correctness of the fallback linker changes.
-------------
Commit messages:
- fix word order
- adjust whitespace
- simplify test changes
- reject invalid variadic layouts
- VA Fixes
Changes: https://git.openjdk.org/jdk/pull/14225/files
Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=14225&range=00
Issue: https://bugs.openjdk.org/browse/JDK-8308031
Stats: 108 lines in 11 files changed: 95 ins; 3 del; 10 mod
Patch: https://git.openjdk.org/jdk/pull/14225.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/14225/head:pull/14225
PR: https://git.openjdk.org/jdk/pull/14225
More information about the core-libs-dev
mailing list