[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:23:41 UTC 2018


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