RFR(8u): 8211933: [8u] hotspot adlc needs to link statically with libstdc++ for gcc7.3
Kevin Walls
kevin.walls at oracle.com
Wed Oct 24 23:16:04 UTC 2018
Hi,
I'd like to get a review of an 8u change:
8211933: [8u] hotspot adlc needs to link statically with libstdc++ for
gcc7.3
https://bugs.openjdk.java.net/browse/JDK-8211933
webrev:
http://cr.openjdk.java.net/~kevinw/8211933/webrev.00/
Essentially adds -static-libstdc++ for linking adlc during an 8u build.
This is needed e.g. when we build with gcc7.x using our devkit bundle
and we won't necessarily find a correct version of that library on the
system.
(Things are still very different in 9+ compared to 8u, despite all our
changes this year...)
I find that changing the definition of
STATIC_STDCXX = -Wl,-Bstatic -lstdc++ -Wl,-Bdynamic
...in gcc.make is a problem, the linked VM fails to load with "undefined
symbol: __cxa_pure_virtual"
If using STATIC_STDCXX as it's already defined, to build adlc, then adlc
doesn't statically link again libcstd and it gives the symbol version
not found error. So defining a separate STATIC... var for adlc keeps
everyone happy.
Many thanks
Kevin
bash-4.2$ cd jdk8u-dev/hotspot
bash-4.2$ hg diff
diff -r 992120803410 make/linux/makefiles/adlc.make
--- a/make/linux/makefiles/adlc.make Mon Oct 22 05:26:38 2018 -0400
+++ b/make/linux/makefiles/adlc.make Wed Oct 24 16:15:07 2018 -0700
@@ -105,9 +105,15 @@
all: $(EXEC)
+ADLC_LD_FLAGS=
+ifeq ($(STATIC_CXX), true)
+ ADLC_LD_FLAGS = $(STATIC_LIBGCC) $(ADLC_STATIC_STDCXX)
+endif
+
+
$(EXEC) : $(OBJECTS)
@echo Making adlc
- $(QUIETLY) $(filter-out $(ARCHFLAG),$(HOST.LINK_NOPROF.CXX)) -o
$(EXEC) $(OBJECTS)
+ $(QUIETLY) $(filter-out $(ARCHFLAG),$(HOST.LINK_NOPROF.CXX))
$(ADLC_LD_FLAGS) -o $(EXEC) $(OBJECTS)
# Random dependencies:
$(OBJECTS): opcodes.hpp classes.hpp adlc.hpp adlcVMDeps.hpp
adlparse.hpp archDesc.hpp arena.hpp dict2.hpp filebuff.hpp forms.hpp
formsopt.hpp formssel.hpp
diff -r 992120803410 make/linux/makefiles/gcc.make
--- a/make/linux/makefiles/gcc.make Mon Oct 22 05:26:38 2018 -0400
+++ b/make/linux/makefiles/gcc.make Wed Oct 24 16:15:07 2018 -0700
@@ -277,6 +277,8 @@
# statically link libstdc++.so, work with gcc but ignored by g++
STATIC_STDCXX = -Wl,-Bstatic -lstdc++ -Wl,-Bdynamic
+# While the VM needs the above line, adlc needs a separate setting:
+ADLC_STATIC_STDCXX = -static-libstdc++
ifeq ($(USE_CLANG),)
# statically link libgcc and/or libgcc_s, libgcc does not exist
before gcc-3.x.
bash-4.2$
More information about the build-dev
mailing list