[OpenJDK 2D-Dev] RFR: JDK-8196218: [linux] libfontmanager should be linked against headless awt library

Erik Joelsson erik.joelsson at oracle.com
Fri Jan 26 17:15:39 UTC 2018


On 2018-01-26 09:02, Severin Gehwolf wrote:
> On Fri, 2018-01-26 at 08:54 -0800, Erik Joelsson wrote:
>> On 2018-01-26 08:44, Phil Race wrote:
>>> When this was fixed for Solaris
>>> https://bugs.openjdk.java.net/browse/JDK-8071710
>>> the observed problem was not building (although it could have been)
>>> but at runtime.
>>> I think you can verify what you've done with "ldd" ..
>>>
>>> This patch adds awt_headless.so, but does not remove awt.so.
>>>
>>> Perhaps the line
>>>
>>> LIBS_unix := -lawt -ljava -ljvm $(LIBM) $(LIBCXX)
>>> After your fix I expect "ldd" should not need to show awt .. just
>>> awt_headless
>>>
>>> ie linux should not have this -lawt dependency any more and the -lawt
>>> dependency should be specific to windows + mac ..
> Thanks for the review, Phil. I'll post an updated webrev shortly.
>
> Any thoughts on the LDFLAGS filtering? Shouldn't this only be done on
> platforms that need it? solaris, linux, aix should already be fine
> without filtering.
I would say try removing the filtering. The affected flags are currently 
only set on linux and solaris. I will do a test build on the latter and 
see if the filtering is actually needed.

/Erik
> Thanks,
> Severin
>
>> So we already use -lawt_headless on solaris and aix, then I really can't
>> see a reason not to do the same for linux.
>>> On 01/26/2018 08:10 AM, Severin Gehwolf wrote:
>>>> Hi,
>>>>
>>>> Could I please get a review for this rather small patch which
>>>> originally occurred for us on JDK 8 (Fedora) which recently switched to
>>>> building with "-Wl,-z,defs" linker flags. The result was a build
>>>> failure, due to unresolved symbols. Indeed libfontmanager.so should
>>>> have -lawt_headless in the list of dependent libs as symbols such as
>>>> AWTLoadFont come from libawt_headless.so, not libawt.so on Linux. Some
>>>> more details are on the bug.
>>>>
>>>> webrev:
>>>> http://cr.openjdk.java.net/~sgehwolf/webrevs/JDK-8196218/webrev.01/
>>>> Bug: https://bugs.openjdk.java.net/browse/JDK-8196218
>>>>
>>>> Testing: Build fails with configure option
>>>>            --with-extra-ldflags="-Xlinker -z -Xlinker defs"
>>>>            prior the fix. Succeeds after.
>>>>
>>>> Question for 2d-folks/build-dev folks:
>>> I don't know about this, build folks probably know.
>>>
>> This is from way ahead of my time. The filtering is simply the
>> build-infra way of achieving the same thing as in the old build system.
>> Here is the corresponding code in jdk7:
>>
>> $ hg annotate make/sun/font/Makefile
>> ...
>>      0: #
>>      0: # Created without -z defs on linux
>>      0: #
>>      0: ifeq ($(PLATFORM), linux)
>>      0:   LDFLAGS_DEFS_OPTION =
>>      0: endif
>> ...
>>
>> /Erik
>>
>>> -phil.
>>>> There is this snippet in the libfontmanager block in
>>>> make/lib/Awt2dLibraries.gmk, line 686:
>>>>
>>>>       LDFLAGS := $(subst -Wl$(COMMA)-z$(COMMA)defs,,$(LDFLAGS_JDKLIB))
>>>> $(LDFLAGS_CXX_JDK) \
>>>>           $(call SET_SHARED_LIBRARY_ORIGIN), \
>>>>
>>>> It's my understanding that this is supposed to filter "-Wl,-z,defs"
>>>> from LDFLAGS_JDKLIB. Does anybody know why it does so? Is there a legit
>>>> reason when unresolved symbols at link time are OK? Besides, why does
>>>> it not also filter "-Xlinker -z -Xlinker defs"? FWIW, in JDK 8 it's the
>>>> other way round. Xlinker flags are filtered, but -Wl,-z,defs is not.
>>>> Thoughts?
>>>>
>>>> Thanks,
>>>> Severin
>>



More information about the build-dev mailing list