diff --git a/8210416-rh1630426-strict-math-opt.patch b/8210416-rh1630426-strict-math-opt.patch new file mode 100644 index 0000000..98bbad0 --- /dev/null +++ b/8210416-rh1630426-strict-math-opt.patch @@ -0,0 +1,57 @@ +diff --git openjdk.orig/jdk/make/lib/CoreLibraries.gmk openjdk/jdk/make/lib/CoreLibraries.gmk +--- openjdk.orig/jdk/make/lib/CoreLibraries.gmk ++++ openjdk/jdk/make/lib/CoreLibraries.gmk +@@ -37,21 +37,32 @@ ifeq ($(OPENJDK_TARGET_OS), solaris) + endif + + ifeq ($(OPENJDK_TARGET_OS), linux) +- ifeq ($(OPENJDK_TARGET_CPU), ppc64) +- BUILD_LIBFDLIBM_OPTIMIZATION := HIGH +- else ifeq ($(OPENJDK_TARGET_CPU), ppc64le) +- BUILD_LIBFDLIBM_OPTIMIZATION := HIGH +- else ifeq ($(OPENJDK_TARGET_CPU), aarch64) +- BUILD_LIBFDLIBM_OPTIMIZATION := HIGH +- endif +-endif +- +-ifneq ($(OPENJDK_TARGET_OS), macosx) ++ BUILD_LIBFDLIBM_OPTIMIZATION := HIGH ++ LIBFDLIBM_CFLAGS_LINUX := -ffp-contract=off + # Unfortunately, '-ffp-contract' is only available since gcc 4.6. For ppc64le + # that's no problem since ppc64le support only appeared in gcc 4.8.3. But on + # ppc64 (big endian) we traditionally compiled with gcc 4.3 which only knows + # '-mno-fused-madd'. However, that's still not enough to get the float + # computations right - we additionally have to supply '-fno-strict-aliasing'. ++ # ++ # ++ ifeq ($(TOOLCHAIN_TYPE), gcc) ++ CC_VER_MAJOR := $(shell $(CC) -dumpversion | cut -d'.' -f1) ++ CC_VER_MINOR := $(shell $(CC) -dumpversion | cut -d'.' -f2) ++ endif ++ # Only GCC 4.6 and better have machine independent -ffp-contract=off. ++ # For other versions we need to explicitly set arch specific machine ++ # flags or keep optimization off. ++ ifeq "$(shell expr \( $(CC_VER_MAJOR) \> 4 \) \| \( \( $(CC_VER_MAJOR) = 4 \) \& \( $(CC_VER_MINOR) \>= 6 \) \))" "0" ++ ifeq ($(OPENJDK_TARGET_CPU), ppc64) ++ LIBFDLIBM_CFLAGS_LINUX := -mno-fused-madd -fno-strict-aliasing ++ else ++ BUILD_LIBFDLIBM_OPTIMIZATION := NONE ++ endif ++ endif ++endif ++ ++ifneq ($(OPENJDK_TARGET_OS), macosx) + $(eval $(call SetupNativeCompilation,BUILD_LIBFDLIBM, \ + STATIC_LIBRARY := fdlibm, \ + OUTPUT_DIR := $(JDK_OUTPUTDIR)/objs, \ +@@ -62,9 +73,7 @@ ifneq ($(OPENJDK_TARGET_OS), macosx) + -I$(JDK_TOPDIR)/src/share/native/java/lang/fdlibm/include, \ + CFLAGS_windows_debug := -DLOGGING, \ + CFLAGS_aix := -qfloat=nomaf, \ +- CFLAGS_linux_ppc64 := -mno-fused-madd -fno-strict-aliasing, \ +- CFLAGS_linux_ppc64le := -ffp-contract=off, \ +- CFLAGS_linux_aarch64 := -ffp-contract=off, \ ++ CFLAGS_linux := $(LIBFDLIBM_CFLAGS_LINUX), \ + ARFLAGS := $(ARFLAGS), \ + OBJECT_DIR := $(JDK_OUTPUTDIR)/objs/libfdlibm, \ + DEBUG_SYMBOLS := $(DEBUG_ALL_BINARIES))) diff --git a/8210425-01-rh1630426-hotspot-opt-fix.patch b/8210425-01-rh1630426-hotspot-opt-fix.patch new file mode 100644 index 0000000..0b05ba6 --- /dev/null +++ b/8210425-01-rh1630426-hotspot-opt-fix.patch @@ -0,0 +1,83 @@ +diff --git openjdk.orig/hotspot/make/linux/makefiles/amd64.make openjdk/hotspot/make/linux/makefiles/amd64.make +--- openjdk.orig/hotspot/make/linux/makefiles/amd64.make ++++ openjdk/hotspot/make/linux/makefiles/amd64.make +@@ -22,10 +22,13 @@ + # + # + +-# The copied fdlibm routines in sharedRuntimeTrig.o must not be optimized +-OPT_CFLAGS/sharedRuntimeTrig.o = $(OPT_CFLAGS/NOOPT) +-# The copied fdlibm routines in sharedRuntimeTrans.o must not be optimized +-OPT_CFLAGS/sharedRuntimeTrans.o = $(OPT_CFLAGS/NOOPT) ++ifeq ($(OPT_CFLAGS_NO_FMA),) ++ OPT_CFLAGS/sharedRuntimeTrig.o = $(OPT_CFLAGS/NOOPT) ++ OPT_CFLAGS/sharedRuntimeTrans.o = $(OPT_CFLAGS/NOOPT) ++else ++ OPT_CFLAGS/sharedRuntimeTrig.o = $(OPT_CFLAGS/SPEED) $(OPT_CFLAGS_NO_FMA) ++ OPT_CFLAGS/sharedRuntimeTrans.o = $(OPT_CFLAGS/SPEED) $(OPT_CFLAGS_NO_FMA) ++endif + # Must also specify if CPU is little endian + CFLAGS += -DVM_LITTLE_ENDIAN + +diff --git openjdk.orig/hotspot/make/linux/makefiles/gcc.make openjdk/hotspot/make/linux/makefiles/gcc.make +--- openjdk.orig/hotspot/make/linux/makefiles/gcc.make ++++ openjdk/hotspot/make/linux/makefiles/gcc.make +@@ -225,6 +225,16 @@ + OPT_CFLAGS/SIZE=-Os + OPT_CFLAGS/SPEED=-O3 + ++ifeq ($(USE_CLANG),) ++ # Only GCC 4.6 and better have machine independent -ffp-contract=off. ++ # For other versions we need to explicitly set arch specific machine ++ # flags or keep optimization off for them. ++ ifeq "$(shell expr \( $(CC_VER_MAJOR) \> 4 \) \| \( \( $(CC_VER_MAJOR) = 4 \) \& \( $(CC_VER_MINOR) \>= 6 \) \))" "1" ++ OPT_CFLAGS_NO_FMA = -ffp-contract=off ++ endif ++endif ++ ++ + # Hotspot uses very unstrict aliasing turn this optimization off + # This option is added to CFLAGS rather than OPT_CFLAGS + # so that OPT_CFLAGS overrides get this option too. +diff --git openjdk.orig/hotspot/make/linux/makefiles/i486.make openjdk/hotspot/make/linux/makefiles/i486.make +--- openjdk.orig/hotspot/make/linux/makefiles/i486.make ++++ openjdk/hotspot/make/linux/makefiles/i486.make +@@ -24,10 +24,13 @@ + + # TLS helper, assembled from .s file + +-# The copied fdlibm routines in sharedRuntimeTrig.o must not be optimized +-OPT_CFLAGS/sharedRuntimeTrig.o = $(OPT_CFLAGS/NOOPT) +-# The copied fdlibm routines in sharedRuntimeTrans.o must not be optimized +-OPT_CFLAGS/sharedRuntimeTrans.o = $(OPT_CFLAGS/NOOPT) ++ifeq ($(OPT_CFLAGS_NO_FMA),) ++ OPT_CFLAGS/sharedRuntimeTrig.o = $(OPT_CFLAGS/NOOPT) ++ OPT_CFLAGS/sharedRuntimeTrans.o = $(OPT_CFLAGS/NOOPT) ++else ++ OPT_CFLAGS/sharedRuntimeTrig.o = $(OPT_CFLAGS/SPEED) $(OPT_CFLAGS_NO_FMA) ++ OPT_CFLAGS/sharedRuntimeTrans.o = $(OPT_CFLAGS/SPEED) $(OPT_CFLAGS_NO_FMA) ++endif + # Must also specify if CPU is little endian + CFLAGS += -DVM_LITTLE_ENDIAN + +diff --git openjdk.orig/hotspot/make/linux/makefiles/ppc64.make openjdk/hotspot/make/linux/makefiles/ppc64.make +--- openjdk.orig/hotspot/make/linux/makefiles/ppc64.make ++++ openjdk/hotspot/make/linux/makefiles/ppc64.make +@@ -49,3 +49,17 @@ + # Use Power8, this is the first CPU to support PPC64 LE with ELFv2 ABI. + CFLAGS += -mcpu=power7 -mtune=power8 -minsert-sched-nops=regroup_exact -mno-multiple -mno-string + endif ++ ++ifeq ($(OPT_CFLAGS_NO_FMA),) ++ ifeq ($(OPENJDK_TARGET_CPU_ENDIAN),big) ++ OPT_CFLAGS/sharedRuntimeTrig.o = $(OPT_CFLAGS/SPEED) -mno-fused-madd -fno-strict-aliasing ++ OPT_CFLAGS/sharedRuntimeTrans.o = $(OPT_CFLAGS/SPEED) -mno-fused-madd -fno-strict-aliasing ++ else ++ OPT_CFLAGS/sharedRuntimeTrig.o = $(OPT_CFLAGS/NOOPT) ++ OPT_CFLAGS/sharedRuntimeTrans.o = $(OPT_CFLAGS/NOOPT) ++ endif ++else ++ OPT_CFLAGS/sharedRuntimeTrig.o = $(OPT_CFLAGS/SPEED) $(OPT_CFLAGS_NO_FMA) ++ OPT_CFLAGS/sharedRuntimeTrans.o = $(OPT_CFLAGS/SPEED) $(OPT_CFLAGS_NO_FMA) ++endif ++ diff --git a/8210425-02-rh1630426-hotspot-opt-fix-aarch64.patch b/8210425-02-rh1630426-hotspot-opt-fix-aarch64.patch new file mode 100644 index 0000000..cf1b40b --- /dev/null +++ b/8210425-02-rh1630426-hotspot-opt-fix-aarch64.patch @@ -0,0 +1,22 @@ +diff --git openjdk.orig/hotspot/make/linux/makefiles/aarch64.make openjdk/hotspot/make/linux/makefiles/aarch64.make +index 3d17326..7cdb498 100644 +--- openjdk.orig/hotspot/make/linux/makefiles/aarch64.make ++++ openjdk/hotspot/make/linux/makefiles/aarch64.make +@@ -22,10 +22,13 @@ + # + # + +-# The copied fdlibm routines in sharedRuntimeTrig.o must not be optimized +-OPT_CFLAGS/sharedRuntimeTrig.o = $(OPT_CFLAGS/NOOPT) +-# The copied fdlibm routines in sharedRuntimeTrans.o must not be optimized +-OPT_CFLAGS/sharedRuntimeTrans.o = $(OPT_CFLAGS/NOOPT) ++ifeq ($(OPT_CFLAGS_NO_FMA),) ++ OPT_CFLAGS/sharedRuntimeTrig.o = $(OPT_CFLAGS/NOOPT) ++ OPT_CFLAGS/sharedRuntimeTrans.o = $(OPT_CFLAGS/NOOPT) ++else ++ OPT_CFLAGS/sharedRuntimeTrig.o = $(OPT_CFLAGS/SPEED) $(OPT_CFLAGS_NO_FMA) ++ OPT_CFLAGS/sharedRuntimeTrans.o = $(OPT_CFLAGS/SPEED) $(OPT_CFLAGS_NO_FMA) ++endif + # Must also specify if CPU is little endian + CFLAGS += -DVM_LITTLE_ENDIAN + diff --git a/8210647-rh1630426-saproc-opt-fix.patch b/8210647-rh1630426-saproc-opt-fix.patch new file mode 100644 index 0000000..0ab09e4 --- /dev/null +++ b/8210647-rh1630426-saproc-opt-fix.patch @@ -0,0 +1,23 @@ +diff --git openjdk.orig/hotspot/make/linux/makefiles/saproc.make openjdk/hotspot/make/linux/makefiles/saproc.make +--- openjdk.orig/hotspot/make/linux/makefiles/saproc.make ++++ openjdk/hotspot/make/linux/makefiles/saproc.make +@@ -59,6 +59,11 @@ + SA_DEBUG_CFLAGS = -g + endif + ++# Optimize saproc lib at level -O3 unless it's a slowdebug build ++ifneq ($(DEBUG_LEVEL), slowdebug) ++ SA_OPT_FLAGS = $(OPT_CFLAGS) ++endif ++ + # if $(AGENT_DIR) does not exist, we don't build SA + # also, we don't build SA on Itanium or zero. + +@@ -95,6 +100,7 @@ + $(SASRCFILES) \ + $(SA_LFLAGS) \ + $(SA_DEBUG_CFLAGS) \ ++ $(SA_OPT_FLAGS) \ + $(EXTRA_CFLAGS) \ + -o $@ \ + -lthread_db diff --git a/8210761-rh1630426-jsig-opt-fix.patch b/8210761-rh1630426-jsig-opt-fix.patch new file mode 100644 index 0000000..5f30e59 --- /dev/null +++ b/8210761-rh1630426-jsig-opt-fix.patch @@ -0,0 +1,20 @@ +diff --git openjdk.orig/hotspot/make/linux/makefiles/jsig.make openjdk/hotspot/make/linux/makefiles/jsig.make +--- openjdk.orig/hotspot/make/linux/makefiles/jsig.make ++++ openjdk/hotspot/make/linux/makefiles/jsig.make +@@ -51,10 +51,15 @@ ifeq ($(DEBUG_BINARIES), true) + JSIG_DEBUG_CFLAGS = -g + endif + ++# Optimize jsig lib at level -O3 unless it's a slowdebug build ++ifneq ($(DEBUG_LEVEL), slowdebug) ++ JSIG_OPT_FLAGS = $(OPT_CFLAGS) ++endif ++ + $(LIBJSIG): $(JSIGSRCDIR)/jsig.c $(LIBJSIG_MAPFILE) + @echo Making signal interposition lib... + $(QUIETLY) $(CC) $(SYMFLAG) $(ARCHFLAG) $(SHARED_FLAG) $(PICFLAG) \ +- $(LFLAGS_JSIG) $(JSIG_DEBUG_CFLAGS) $(EXTRA_CFLAGS) -o $@ $< -ldl ++ $(LFLAGS_JSIG) $(JSIG_DEBUG_CFLAGS) $(JSIG_OPT_FLAGS) $(EXTRA_CFLAGS) -o $@ $< -ldl + ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1) + $(QUIETLY) $(OBJCOPY) --only-keep-debug $@ $(LIBJSIG_DEBUGINFO) + ifeq ($(STRIP_POLICY),all_strip) diff --git a/java-1.8.0-openjdk.spec b/java-1.8.0-openjdk.spec index f8f9912..7354d35 100644 --- a/java-1.8.0-openjdk.spec +++ b/java-1.8.0-openjdk.spec @@ -104,8 +104,8 @@ # Filter out flags from the optflags macro that cause problems with the OpenJDK build -# We filter out -O flags so that the optimization of HotSpot is not lowered from O3 to O2 # We filter out -Wall which will otherwise cause HotSpot to produce hundreds of thousands of warnings (100+mb logs) +# We filter out -O flags so that the optimization of HotSpot is not lowered from O3 to O2 # We replace it with -Wformat (required by -Werror=format-security) and -Wno-cpp to avoid FORTIFY_SOURCE warnings # We filter out -fexceptions as the HotSpot build explicitly does -fno-exceptions and it's otherwise the default for C++ %global ourflags %(echo %optflags | sed -e 's|-Wall|-Wformat -Wno-cpp|' | sed -r -e 's|-O[0-9]*||') @@ -961,7 +961,7 @@ Provides: java-%{javaver}-%{origin}-accessibility = %{epoch}:%{version}-%{releas Name: java-%{javaver}-%{origin} Version: %{javaver}.%{updatever}.%{buildver} -Release: 3%{?dist} +Release: 4%{?dist} # java-1.5.0-ibm from jpackage.org set Epoch to 1 for unknown reasons # and this change was brought into RHEL-4. java-1.5.0-ibm packages # also included the epoch in their virtual provides. This created a @@ -1126,6 +1126,18 @@ Patch576: 8064786-pr3599.patch Patch577: 8062808-pr3548.patch # s390: JDK-8203030, Type fixing for s390 Patch102: 8203030-size_t-fixes.patch +# 8210761: libjsig is being compiled without optimization +Patch620: 8210761-rh1630426-jsig-opt-fix.patch +# 8210647: libsaproc is being compiled without optimization +Patch621: 8210647-rh1630426-saproc-opt-fix.patch +# 8210416: [linux] Poor StrictMath performance due to non-optimized compilation +Patch622: 8210416-rh1630426-strict-math-opt.patch +# 8210425: [x86] sharedRuntimeTrig/sharedRuntimeTrans compiled without optimization +# Upstream 8u part. +Patch623: 8210425-01-rh1630426-hotspot-opt-fix.patch +# 8210425: [x86] sharedRuntimeTrig/sharedRuntimeTrans compiled without optimization +# Aarch64-port 8u local part +Patch624: 8210425-02-rh1630426-hotspot-opt-fix-aarch64.patch ############################################# # @@ -1613,6 +1625,11 @@ sh %{SOURCE12} %patch579 %patch580 %patch581 +%patch620 +%patch621 +%patch622 +%patch623 +%patch624 # RPM-only fixes %patch525 @@ -2268,6 +2285,14 @@ require "copy_jdk_configs.lua" %endif %changelog +* Thu Sep 27 2018 Severin Gehwolf - 1:1.8.0.181.b15-4 +- Add fixes for optimization gaps (annocheck issues): + - 8210761: libjsig is being compiled without optimization + - 8210647: libsaproc is being compiled without optimization + - 8210416: [linux] Poor StrictMath performance due to non-optimized compilation + - 8210425: [x86] sharedRuntimeTrig/sharedRuntimeTrans compiled without optimization + 8u upstream and aarch64/jdk8u upstream versions. + * Wed Sep 26 2018 Severin Gehwolf - 1:1.8.0.181.b15-3 - Renamed more patches for clarity: include-all-srcs.patch => 8044235-include-all-srcs.patch