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$

Reply via email to