@@ -50,7 +50,14 @@ AC_DEFUN([FLAGS_SETUP_LDFLAGS_HELPER],
5050 # add -z,relro (mark relocations read only) for all libs
5151 # add -z,now ("full relro" - more of the Global Offset Table GOT is marked read only)
5252 # add --no-as-needed to disable default --as-needed link flag on some GCC toolchains
53+ # add --icf=all (Identical Code Folding — merges identical functions)
5354 BASIC_LDFLAGS="-Wl,-z,defs -Wl,-z,relro -Wl,-z,now -Wl,--no-as-needed -Wl,--exclude-libs,ALL"
55+ if test "x$LINKER_TYPE" = "xgold"; then
56+ if test x$DEBUG_LEVEL = xrelease; then
57+ BASIC_LDFLAGS="$BASIC_LDFLAGS -Wl,--icf=all"
58+ fi
59+ fi
60+
5461 # Linux : remove unused code+data in link step
5562 if test "x$ENABLE_LINKTIME_GC" = xtrue; then
5663 if test "x$OPENJDK_TARGET_CPU" = xs390x; then
@@ -61,13 +68,15 @@ AC_DEFUN([FLAGS_SETUP_LDFLAGS_HELPER],
6168 fi
6269
6370 BASIC_LDFLAGS_JVM_ONLY=""
71+ LDFLAGS_LTO="-flto=auto -fuse-linker-plugin -fno-strict-aliasing"
6472
6573 LDFLAGS_CXX_PARTIAL_LINKING="$MACHINE_FLAG -r"
6674
6775 elif test "x$TOOLCHAIN_TYPE" = xclang; then
6876 BASIC_LDFLAGS_JVM_ONLY="-mno-omit-leaf-frame-pointer -mstack-alignment=16 \
6977 -fPIC"
7078
79+ LDFLAGS_LTO="-flto=auto -fuse-linker-plugin -fno-strict-aliasing"
7180 LDFLAGS_CXX_PARTIAL_LINKING="$MACHINE_FLAG -r"
7281
7382 if test "x$OPENJDK_TARGET_OS" = xlinux; then
@@ -87,6 +96,7 @@ AC_DEFUN([FLAGS_SETUP_LDFLAGS_HELPER],
8796 BASIC_LDFLAGS="-opt:ref"
8897 BASIC_LDFLAGS_JDK_ONLY="-incremental:no"
8998 BASIC_LDFLAGS_JVM_ONLY="-opt:icf,8 -subsystem:windows"
99+ LDFLAGS_LTO="-LTCG:INCREMENTAL"
90100 fi
91101
92102 if (test "x$TOOLCHAIN_TYPE" = xgcc || test "x$TOOLCHAIN_TYPE" = xclang) \
@@ -148,6 +158,7 @@ AC_DEFUN([FLAGS_SETUP_LDFLAGS_HELPER],
148158
149159 # Export some intermediate variables for compatibility
150160 LDFLAGS_CXX_JDK="$DEBUGLEVEL_LDFLAGS_JDK_ONLY"
161+ AC_SUBST ( LDFLAGS_LTO )
151162 AC_SUBST ( LDFLAGS_CXX_JDK )
152163 AC_SUBST ( LDFLAGS_CXX_PARTIAL_LINKING )
153164] )
0 commit comments