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

Erik Joelsson erik.joelsson at oracle.com
Tue Jan 30 16:36:38 UTC 2018


I found your job and it's all successful. Something is up with the 
service though. I'm pinging the relevant people here.

/Erik


On 2018-01-30 00:42, Severin Gehwolf wrote:
> On Mon, 2018-01-29 at 12:09 -0800, Phil Race wrote:
>> It looks OK but have you tried running it through the new build system
>> discussed here ?
>> http://mail.openjdk.java.net/pipermail/jdk-dev/2018-January/000566.html
> Thanks. I've submitted it yesterday, yes. No response - via email - so
> far, though.
>
> Cheers,
> Severin
>
>> -phil.
>>
>> On 01/29/2018 10:53 AM, Severin Gehwolf wrote:
>>> Hi Phil,
>>>
>>> Are you OK with the latest webrev as well?
>>> http://cr.openjdk.java.net/~sgehwolf/webrevs/JDK-8196218/webrev.02/
>>>
>>> Thanks,
>>> Severin
>>>
>>> On Mon, 2018-01-29 at 08:29 -0800, Erik Joelsson wrote:
>>>> This looks good to me. Good catch on the dependency declaration further
>>>> down. I don't see any reason this would need a sponsor, jdk/jdk should
>>>> be open.
>>>>
>>>> /Erik
>>>>
>>>>
>>>> On 2018-01-29 01:39, Severin Gehwolf wrote:
>>>>> Hi,
>>>>>
>>>>> Updated webrev which removes the linker flags filtering. Linking with
>>>>> the awt lib is being kept. ldd confirmed what Erik found out elsewhere:
>>>>>
>>>>> $ find build/linux-x86_64-normal-server-release/images/jdk -name libfontmanager.so
>>>>> build/linux-x86_64-normal-server-release/images/jdk/lib/libfontmanager.so
>>>>> $ ldd build/linux-x86_64-normal-server-release/images/jdk/lib/libfontmanager.so
>>>>> ldd: warning: you do not have execution permission for `build/linux-x86_64-normal-server-release/images/jdk/lib/libfontmanager.so'
>>>>> 	linux-vdso.so.1 (0x00007ffe13cc5000)
>>>>> 	libfreetype.so.6 => /lib64/libfreetype.so.6 (0x00007fb58e204000)
>>>>> 	libawt.so => /disk/openjdk/upstream-sources/openjdk-hs/build/linux-x86_64-normal-server-release/images/jdk/lib/libawt.so (0x00007fb58df34000)
>>>>> 	libjava.so => /disk/openjdk/upstream-sources/openjdk-hs/build/linux-x86_64-normal-server-release/images/jdk/lib/libjava.so (0x00007fb58dd07000)
>>>>> 	libjvm.so => not found
>>>>> 	libawt_headless.so => /disk/openjdk/upstream-sources/openjdk-hs/build/linux-x86_64-normal-server-release/images/jdk/lib/libawt_headless.so (0x00007fb58dafe000)
>>>>> 	libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007fb58d778000)
>>>>> 	libm.so.6 => /lib64/libm.so.6 (0x00007fb58d423000)
>>>>> 	libc.so.6 => /lib64/libc.so.6 (0x00007fb58d040000)
>>>>> 	libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fb58ce29000)
>>>>> 	libbz2.so.1 => /lib64/libbz2.so.1 (0x00007fb58cc18000)
>>>>> 	libpng16.so.16 => /lib64/libpng16.so.16 (0x00007fb58c9e5000)
>>>>> 	libz.so.1 => /lib64/libz.so.1 (0x00007fb58c7ce000)
>>>>> 	libjvm.so => not found
>>>>> 	libdl.so.2 => /lib64/libdl.so.2 (0x00007fb58c5ca000)
>>>>> 	libjvm.so => not found
>>>>> 	libverify.so => /disk/openjdk/upstream-sources/openjdk-hs/build/linux-x86_64-normal-server-release/images/jdk/lib/libverify.so (0x00007fb58c3bb000)
>>>>> 	/lib64/ld-linux-x86-64.so.2 (0x00007fb58e74f000)
>>>>> 	libjvm.so => not found
>>>>> 	libjvm.so => not found
>>>>>
>>>>> http://cr.openjdk.java.net/~sgehwolf/webrevs/JDK-8196218/webrev.02/
>>>>>
>>>>> How does this look?
>>>>>
>>>>> Do I need an Oracle sponsor for this or can I push this to jdk/jdk
>>>>> myself.
>>>>>
>>>>> Thanks,
>>>>> Severin
>>>>>
>>>>> On Fri, 2018-01-26 at 09:44 -0800, Phil Race wrote:
>>>>>>     > I could not remove -lawt however.
>>>>>>
>>>>>> Ah yes, Erik sent me the errors and yes there are some 2D functions that are
>>>>>> defined in libawt that fontmanager needs for text rendering support, so
>>>>>> we can't remove that.
>>>>>>
>>>>>> libawt on these platforms with separate headless and xawt libraries
>>>>>> could have
>>>>>> more aptly be called lib2d .. since most of the true AWT functionality
>>>>>> is in the xawt library.
>>>>>>
>>>>>>
>>>>>> -phil.
>>>>>>
>>>>>> On 01/26/2018 09:23 AM, Erik Joelsson wrote:
>>>>>>> This patch builds on Solaris:
>>>>>>>
>>>>>>> diff -r 50cd89fe209f make/lib/Awt2dLibraries.gmk
>>>>>>> --- a/make/lib/Awt2dLibraries.gmk
>>>>>>> +++ b/make/lib/Awt2dLibraries.gmk
>>>>>>> @@ -683,15 +683,15 @@
>>>>>>>             hidevf w_novirtualdescr arrowrtn2, \
>>>>>>>         DISABLED_WARNINGS_microsoft := 4267 4244 4018 4090 4996 4146 4334
>>>>>>> 4819 4101, \
>>>>>>>         MAPFILE := $(BUILD_LIBFONTMANAGER_MAPFILE), \
>>>>>>> -    LDFLAGS := $(subst -Wl$(COMMA)-z$(COMMA)defs,,$(LDFLAGS_JDKLIB))
>>>>>>> $(LDFLAGS_CXX_JDK) \
>>>>>>> +    LDFLAGS := $(LDFLAGS_JDKLIB) $(LDFLAGS_CXX_JDK) \
>>>>>>>             $(call SET_SHARED_LIBRARY_ORIGIN), \
>>>>>>>         LDFLAGS_unix := -L$(INSTALL_LIBRARIES_HERE), \
>>>>>>>         LDFLAGS_macosx := -undefined dynamic_lookup, \
>>>>>>>         LIBS := $(BUILD_LIBFONTMANAGER_FONTLIB), \
>>>>>>>         LIBS_unix := -lawt -ljava -ljvm $(LIBM) $(LIBCXX), \
>>>>>>> -    LIBS_linux := -lc, \
>>>>>>> +    LIBS_linux := -lawt_headless -lc, \
>>>>>>>         LIBS_solaris := -lawt_headless -lc, \
>>>>>>>         LIBS_aix := -lawt_headless,\
>>>>>>>
>>>>>>> I could not remove -lawt however.
>>>>>>>
>>>>>>> /Erik
>>>>>>>
>>>>>>> On 2018-01-26 09:15, Erik Joelsson wrote:
>>>>>>>> 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