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

Severin Gehwolf sgehwolf at redhat.com
Fri Jan 26 17:02:22 UTC 2018


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.

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