hotspot/make/bsd/makefiles/gcc.make
Print this page
rev 5915 : 8032045: Enable compiler and linker safety switches for debug builds
Reviewed-by: duke
@@ -98,11 +98,11 @@
CC_VER_MAJOR := $(shell $(CC) -dumpversion | sed 's/egcs-//' | cut -d'.' -f1)
CC_VER_MINOR := $(shell $(CC) -dumpversion | sed 's/egcs-//' | cut -d'.' -f2)
endif
ifeq ($(USE_CLANG), true)
- # clang has precompiled headers support by default, but the user can switch
+ # Clang has precompiled headers support by default, but the user can switch
# it off by using 'USE_PRECOMPILED_HEADER=0'.
ifdef LP64
ifeq ($(USE_PRECOMPILED_HEADER),)
USE_PRECOMPILED_HEADER=1
endif
@@ -264,11 +264,11 @@
ifeq ($(USE_CLANG),)
# Since GCC 4.3, -Wconversion has changed its meanings to warn these implicit
# conversions which might affect the values. Only enable it in earlier versions.
ifeq "$(shell expr \( $(CC_VER_MAJOR) \> 4 \) \| \( \( $(CC_VER_MAJOR) = 4 \) \& \( $(CC_VER_MINOR) \>= 3 \) \))" "0"
- WARNINGS_FLAGS += -Wconversion
+ WARNING_FLAGS += -Wconversion
endif
endif
CFLAGS_WARN/DEFAULT = $(WARNINGS_ARE_ERRORS) $(WARNING_FLAGS)
# Special cases
@@ -276,27 +276,35 @@
# XXXDARWIN: for _dyld_bind_fully_image_containing_address
ifeq ($(OS_VENDOR), Darwin)
CFLAGS_WARN/os_bsd.o = $(CFLAGS_WARN/DEFAULT) -Wno-deprecated-declarations
endif
+# optimization control flags (Used by fastdebug and release variants)
+OPT_CFLAGS/NOOPT=-O0
+ifeq "$(shell expr \( $(CC_VER_MAJOR) \> 4 \) \| \( \( $(CC_VER_MAJOR) = 4 \) \& \( $(CC_VER_MINOR) \>= 8 \) \))" "1"
+ # Allow basic optimizations which don't distrupt debugging. (Principally dead code elimination)
+ OPT_CFLAGS/DEBUG=-Og
+else
+ # Allow no optimizations.
+ OPT_CFLAGS/DEBUG=-O0
+endif
OPT_CFLAGS/SIZE=-Os
OPT_CFLAGS/SPEED=-O3
-# 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.
-CFLAGS += -fno-strict-aliasing
-
-# The flags to use for an Optimized g++ build
ifeq ($(OS_VENDOR), Darwin)
# use -Os by default, unless -O3 can be proved to be worth the cost, as per policy
- # <http://wikis.sun.com/display/OpenJDK/Mac+OS+X+Port+Compilers>
+ # <https://wiki.openjdk.java.net/display/MacOSXPort/Compiler+Errata>
OPT_CFLAGS_DEFAULT ?= SIZE
else
OPT_CFLAGS_DEFAULT ?= SPEED
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.
+CFLAGS += -fno-strict-aliasing
+
ifdef OPT_CFLAGS
ifneq ("$(origin OPT_CFLAGS)", "command line")
$(error " Use OPT_EXTRAS instead of OPT_CFLAGS to add extra flags to OPT_CFLAGS.")
endif
endif
@@ -307,12 +315,10 @@
# if we use expensive-optimizations
ifeq ($(BUILDARCH), ia64)
OPT_CFLAGS += -fno-expensive-optimizations
endif
-OPT_CFLAGS/NOOPT=-O0
-
# Work around some compiler bugs.
ifeq ($(USE_CLANG), true)
ifeq ($(shell expr $(CC_VER_MAJOR) = 4 \& $(CC_VER_MINOR) = 2), 1)
OPT_CFLAGS/loopTransform.o += $(OPT_CFLAGS/NOOPT)
OPT_CFLAGS/unsafe.o += -O1
@@ -364,14 +370,27 @@
# statically link libstdc++.so, work with gcc but ignored by g++
STATIC_STDCXX = -Wl,-Bstatic -lstdc++ -Wl,-Bdynamic
ifeq ($(USE_CLANG),)
# statically link libgcc and/or libgcc_s, libgcc does not exist before gcc-3.x.
- ifneq ("${CC_VER_MAJOR}", "2")
+ ifneq ($(CC_VER_MAJOR), 2)
STATIC_LIBGCC += -static-libgcc
endif
+ # Enable linker optimization
+ LFLAGS += -Xlinker -O1
+
+ ifeq ($(VARIANT), DBG)
+ # for relocations read-only
+ LFLAGS += -Wl,-z,relro
+
+ ifeq ($(FASTDEBUG), false)
+ # disable incremental relocations linking
+ LFLAGS += -Wl,-z,now
+ endif
+ endif
+
ifeq ($(BUILDARCH), ia64)
LFLAGS += -Wl,-relax
endif
endif
@@ -418,10 +437,18 @@
# too big object files and speed the build up a little bit
# (see http://llvm.org/bugs/show_bug.cgi?id=7554)
CFLAGS += -flimit-debug-info
endif
+ifeq "$(shell expr \( $(CC_VER_MAJOR) \> 4 \) \| \( \( $(CC_VER_MAJOR) = 4 \) \& \( $(CC_VER_MINOR) \>= 8 \) \))" "1"
+ # Allow basic optimizations which don't distrupt debugging. (Principally dead code elimination)
+ DEBUG_CFLAGS=-Og
+else
+ # Allow no optimizations.
+ DEBUG_CFLAGS=-O0
+endif
+
# DEBUG_BINARIES uses full -g debug information for all configs
ifeq ($(DEBUG_BINARIES), true)
CFLAGS += -g
else
# Use the stabs format for debugging information (this is the default
@@ -434,12 +461,17 @@
DEBUG_CFLAGS/amd64 = -g
DEBUG_CFLAGS/arm = -g
DEBUG_CFLAGS/ppc = -g
DEBUG_CFLAGS += $(DEBUG_CFLAGS/$(BUILDARCH))
ifeq ($(DEBUG_CFLAGS/$(BUILDARCH)),)
+ ifeq ($(USE_CLANG), true)
+ # Clang doesn't understand -gstabs
+ DEBUG_CFLAGS += -g
+ else
DEBUG_CFLAGS += -gstabs
endif
+ endif
ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1)
FASTDEBUG_CFLAGS/ia64 = -g
FASTDEBUG_CFLAGS/amd64 = -g
FASTDEBUG_CFLAGS/arm = -g
@@ -468,10 +500,24 @@
endif
endif
endif
endif
+# Enable bounds checking.
+ifeq ($(VARIANT), DBG)
+ # _FORTIFY_SOURCE appears in GCC 4.0+
+ ifeq "$(shell expr \( $(CC_VER_MAJOR) \> 3 \) )" "0"
+ ifeq ($(FASTDEBUG), true)
+ # compile time size bounds checks
+ CFLAGS += -D_FORTIFY_SOURCE=1
+ else
+ # and runtime size bounds checks and paranoid stack smashing checks.
+ CFLAGS += -D_FORTIFY_SOURCE=2 -fstack-protector-all --param ssp-buffer-size=1
+ endif
+ endif
+endif
+
# If we are building HEADLESS, pass on to VM
# so it can set the java.awt.headless property
ifdef HEADLESS
CFLAGS += -DHEADLESS
endif