On Fri, 21 Mar 2025 16:19:38 GMT, Joachim Kern <[email protected]> wrote:
>> After "JDK-8339480: Build static-jdk image with a statically linked
>> launcher" AIX was not able to build the new target. Therefore with
>> "JDK-8345590 AIX 'make all' fails after JDK-8339480" the new target was
>> disabled again.
>>
>> Now with this change we can enable the statically linked launcher target
>> again.
>> There are 3 things to do.
>> 1. Modify `dladdr()`. Because this API does not exist on AIX it is
>> implemented based on the `loadquery()` API. Unfortunately, this API does
>> only return the name of the executable, but not its path. Beforehand this
>> was no problem, because we asked for a loaded library, for which the API
>> provides the path. But now we are asking for the executable itself.
>> 2. `dladdr()` is differently implemented three times in the openjdk code.
>> In the static case I supressed now the usage of the additional modules
>> containing version two and three. I know this shouldn't be the final
>> version. Magnus mentioned that they have discussed from time to time to have
>> a "basic JDK utility lib" that can be shared between hotspot and the JDK
>> libraries. I think this is a good idea for the future, but far beyond the
>> scope of this PR. The second best thing Magnus proposed is to only have the
>> `dladdr()` functionality in Hotspot and then export it. Let's see how the
>> community decides.
>> 3. Because we lack a linker flag like `whole-archive`, I had to force the
>> export of all symbols by creating export files containing all symbols of the
>> static libs. I introduced the new rule for the export file generation as
>> "raw" make recipes. Magnus claimed to use the `SetupExecute`. Unfortunately
>> I was not able to make it function. So I still have my "raw" solution in
>> place, but my last try with `SetupExecute` as comment beneath. Help is
>> welcome.
>
> Joachim Kern has updated the pull request incrementally with one additional
> commit since the last revision:
>
> follow Martin
src/hotspot/os/aix/loadlib_aix.cpp line 245:
> 243: lm->data_len = ldi->ldinfo_datasize;
> 244:
> 245: if (pgmbase != nullptr && 0 == strcmp(pgmbase,
> ldi->ldinfo_filename)) {
Maybe better `strcmp(...) == 0 ` this is what we use almost everywhere in the
HS codebase .
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/24062#discussion_r2010314259