RFR: 8352064: AIX: now also able to build static-jdk image with a statically linked launcher [v3]

Magnus Ihse Bursie ihse at openjdk.org
Fri Mar 21 10:36:16 UTC 2025


On Thu, 20 Mar 2025 14:30:58 GMT, Joachim Kern <jkern at openjdk.org> 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:
> 
>   added needed include

make/StaticLibs.gmk line 117:

> 115:       OUTPUT_FILE := $(lib).exp, \
> 116:       COMMAND := ( $(AR) $(ARFLAGS) -w $(lib) | $(GREP) -v '^\.' | $(AWK) '{print $$1}' | $(SORT) -u > $(lib).exp ), \
> 117:     )) \

To better align with how we store the targets of Setup calls, can you please change this to:

Suggestion:

  STATIC_LIBS := -Wl,-bexpfull $(STATIC_LIB_FILES) $(addprefix -Wl$(COMMA)-bE:, $(STATIC_LIB_EXPORT_FILES))
  $(foreach lib, $(STATIC_LIB_FILES), \
    $(eval $(call SetupExecute, generate_export_list_$(notdir $(lib)), \
      INFO := Generating export list for $(notdir $(lib)), \
      DEPS :=  $(lib), \
      OUTPUT_FILE := $(lib).exp, \
      COMMAND := ( $(AR) $(ARFLAGS) -w $(lib) | $(GREP) -v '^.' | $(AWK) '{print $$1}' | $(SORT) -u > $(lib).exp ), \
    )) \
    $(eval   STATIC_LIB_EXPORT_FILES += $(lib).exp) \

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

PR Review Comment: https://git.openjdk.org/jdk/pull/24062#discussion_r2007298830


More information about the core-libs-dev mailing list