This looks good to me. Good catch on the dependency
down. I don't see any reason this would need a sponsor, jdk/jdk should
be open.
Post by Severin GehwolfHi,
Updated webrev which removes the linker flags filtering. Linking with
$ 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/we
brev.02/
How does this look?
Do I need an Oracle sponsor for this or can I push this to jdk/jdk
myself.
Thanks,
Severin
Post by Phil RacePost by Erik JoelssonI 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.
Post by Erik Joelssondiff -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
Post by Erik JoelssonPost by Severin GehwolfPost by Erik JoelssonPost by Phil RaceWhen this was fixed for Solaris
https://bugs.openjdk.java.net/browse/JDK-807171
0
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
Post by Severin GehwolfThanks,
Severin
Post by Erik JoelssonSo we already use -lawt_headless on solaris and
aix, then I really
can't
see a reason not to do the same for linux.
Post by Phil RacePost by Severin GehwolfHi,
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.
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.
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.
$ 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
Post by Phil Race-phil.
Post by Severin GehwolfThere is this snippet in the libfontmanager
block in
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