RFR: 8348663: [AIX] clang pollutes the burned-in library search paths of the generated executables [v2]
Magnus Ihse Bursie
ihse at openjdk.org
Wed Jan 29 11:51:55 UTC 2025
On Wed, 29 Jan 2025 11:43:28 GMT, Joachim Kern <jkern at openjdk.org> wrote:
>> The clang compiler which we use since jdk21 pollutes the burned-in library search paths of the generated executables.
>> e.g. a dump -X64 -H ... /jdk-23.0.1+11-jre/lib/libnio.so
>>
>> amongst others produces the following lines
>>
>> ***Import File Strings***
>> INDEX PATH BASE MEMBER
>> 0 /opt/IBM/openxlC/17.1.1/../../../../usr/lpp/xlC/lib:/opt/IBM/openxlC/17.1.1/lib:/opt/IBM/openxlC/17.1.1/bin/../../../../../usr/lpp/xlC/lib:/usr/opt/zlibNX/lib:/opt/freeware/lib/pthread:/opt/freeware/lib:/usr/lib
>>
>> The long string is the burned in library search path which will be used after searching with LIBPATH envvar.
>> You see there are some compiler paths which customers will not have; also /opt/freeware is unwanted.
>> A proper executable should only have the burned in default search path
>> /usr/lib:lib
>>
>> To ensure this we want to call the linker with the flag
>> -fuse-ld=our-wrapper-script-cleaning-LIBPATH- and-calling-original-ld-afterwards
>> This script we want to deliver in make/scripts/aix/ld.sh
>> just containing
>> #!/bin/bash
>> unset LIBPATH
>> exec /usr/bin/ld "$@"
>> return $?
>
> Joachim Kern has updated the pull request incrementally with one additional commit since the last revision:
>
> following Magnus proposals
make/autoconf/basic.m4 line 630:
> 628: # Copy the linker wrapper script for AIX' clang and make it executable
> 629: if test "x$TOOLCHAIN_TYPE" = xclang && test "x$OPENJDK_TARGET_OS" = xaix &&
> 630: test -e "${TOPDIR}/make/scripts/aix/ld.sh"; then
You can assume that checked-in files exist and do not need to test for them.
make/autoconf/basic.m4 line 631:
> 629: if test "x$TOOLCHAIN_TYPE" = xclang && test "x$OPENJDK_TARGET_OS" = xaix &&
> 630: test -e "${TOPDIR}/make/scripts/aix/ld.sh"; then
> 631: $CP -f "${TOPDIR}/make/scripts/aix/ld.sh" "$OUTPUTDIR/ld.sh"
Suggestion:
$CP -f "$TOPDIR/make/scripts/aix/ld.sh" "$OUTPUTDIR/ld.sh"
We normally prefer to use $ without {} unless they are necessary, but in some parts of the code the ${} style is prevalent for historical reasons, and in those places it is better to keep with that style. But for code like this, you should stick to the {}-less style.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/23313#discussion_r1933738455
PR Review Comment: https://git.openjdk.org/jdk/pull/23313#discussion_r1933740259
More information about the build-dev
mailing list