--- old/common/autoconf/toolchain.m4 2014-02-20 11:29:13.864011382 -0800 +++ new/common/autoconf/toolchain.m4 2014-02-20 11:29:13.780011378 -0800 @@ -702,26 +702,44 @@ CC ) case $COMPILER_NAME in gcc ) + C_O_FLAG_NONE="-O0" case $OPENJDK_TARGET_OS in macosx ) # On MacOSX we optimize for size, something # we should do for all platforms? C_O_FLAG_HI="-Os" C_O_FLAG_NORM="-Os" - C_O_FLAG_NONE="" ;; *) C_O_FLAG_HI="-O3" C_O_FLAG_NORM="-O2" - C_O_FLAG_NONE="-O0" ;; esac + # "-Og" suppported for GCC 4.8 and later + AC_MSG_CHECKING([if compiler supports -Og]) + SAVED_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -Og" + AC_LANG_PUSH([C]) + AC_LINK_IFELSE([AC_LANG_SOURCE([[int main() { return 0; }]])], + [ + AC_MSG_RESULT([yes]) + C_O_FLAG_DEBUG="-Og" + ], + [ + AC_MSG_RESULT([no]) + C_O_FLAG_DEBUG="-O0" + ] + ) + AC_LANG_POP([C]) + CFLAGS="$SAVED_CFLAGS" CXX_O_FLAG_HI="$C_O_FLAG_HI" CXX_O_FLAG_NORM="$C_O_FLAG_NORM" CXX_O_FLAG_NONE="$C_O_FLAG_NONE" + CXX_O_FLAG_DEBUG="$C_O_FLAG_DEBUG" CFLAGS_DEBUG_SYMBOLS="-g" CXXFLAGS_DEBUG_SYMBOLS="-g" if test "x$OPENJDK_TARGET_CPU_BITS" = "x64" && test "x$DEBUG_LEVEL" = "xfastdebug"; then + # reduce from default "-g2" option to save space CFLAGS_DEBUG_SYMBOLS="-g1" CXXFLAGS_DEBUG_SYMBOLS="-g1" fi @@ -777,6 +795,7 @@ C_O_FLAG_HI="-xO4 -Wu,-O4~yz -xregs=no%frameptr" C_O_FLAG_NORM="-xO2 -Wu,-O2~yz -xregs=no%frameptr" C_O_FLAG_NONE="-xregs=no%frameptr" + C_O_FLAG_DEBUG="-xregs=no%frameptr" CXX_O_FLAG_HIGHEST="-xO4 -Qoption ube -O4~yz $CC_HIGHEST -xregs=no%frameptr" CXX_O_FLAG_HI="-xO4 -Qoption ube -O4~yz -xregs=no%frameptr" CXX_O_FLAG_NORM="-xO2 -Qoption ube -O2~yz -xregs=no%frameptr" @@ -793,10 +812,12 @@ C_O_FLAG_HI="-xO4 -Wc,-Qrm-s -Wc,-Qiselect-T0" C_O_FLAG_NORM="-xO2 -Wc,-Qrm-s -Wc,-Qiselect-T0" C_O_FLAG_NONE="" + C_O_FLAG_DEBUG="" CXX_O_FLAG_HIGHEST="-xO4 -Qoption cg -Qrm-s -Qoption cg -Qiselect-T0 $CC_HIGHEST -xprefetch=auto,explicit -xchip=ultra" CXX_O_FLAG_HI="-xO4 -Qoption cg -Qrm-s -Qoption cg -Qiselect-T0" CXX_O_FLAG_NORM="-xO2 -Qoption cg -Qrm-s -Qoption cg -Qiselect-T0" CXX_O_FLAG_NONE="" + CXX_O_FLAG_DEBUG="" ;; esac @@ -809,11 +830,13 @@ C_O_FLAG_HIGHEST="-O3" C_O_FLAG_HI="-O3 -qstrict" C_O_FLAG_NORM="-O2" - C_O_FLAG_NONE="" + C_O_FLAG_NONE="-qnoopt" + C_O_FLAG_DEBUG="-qnoopt" CXX_O_FLAG_HIGHEST="-O3" CXX_O_FLAG_HI="-O3 -qstrict" CXX_O_FLAG_NORM="-O2" - CXX_O_FLAG_NONE="" + CXX_O_FLAG_NONE="-qnoopt" + CXX_O_FLAG_DEBUG="-qnoopt" CFLAGS_DEBUG_SYMBOLS="-g" CXXFLAGS_DEBUG_SYMBOLS="-g" LDFLAGS_JDK="${LDFLAGS_JDK} -q64 -brtl -bnolibpath -liconv -bexpall" @@ -826,11 +849,13 @@ C_O_FLAG_HIGHEST="-O2" C_O_FLAG_HI="-O1" C_O_FLAG_NORM="-O1" - C_O_FLAG_NONE="-Od" + C_O_FLAG_NONE="-O0" + C_O_FLAG_DEBUG="-Od" CXX_O_FLAG_HIGHEST="$C_O_FLAG_HIGHEST" CXX_O_FLAG_HI="$C_O_FLAG_HI" CXX_O_FLAG_NORM="$C_O_FLAG_NORM" CXX_O_FLAG_NONE="$C_O_FLAG_NONE" + CXX_O_FLAG_DEBUG="$C_O_FLAG_DEBUG" ;; esac @@ -842,13 +867,38 @@ CXX_O_FLAG_HIGHEST="$CXX_O_FLAG_HI" fi + # Adjust optimization flags according to debug level. + case $DEBUG_LEVEL in + release ) + # no adjustment + ;; + fastdebug ) + # Not quite so much optimization + C_O_FLAG_HIGHEST="$C_O_FLAG_NORM" + C_O_FLAG_HI="$C_O_FLAG_NORM" + CXX_O_FLAG_HIGHEST="$CXX_O_FLAG_NORM" + CXX_O_FLAG_HI="$CXX_O_FLAG_NORM" + ;; + slowdebug ) + # Disable optimization + C_O_FLAG_HIGHEST="$C_O_FLAG_NORM" + C_O_FLAG_HI="$C_O_FLAG_DEBUG" + C_O_FLAG_NORM="$C_O_FLAG_DEBUG" + CXX_O_FLAG_HIGHEST="$CXX_O_FLAG_DEBUG" + CXX_O_FLAG_HI="$CXX_O_FLAG_DEBUG" + CXX_O_FLAG_NORM="$CXX_O_FLAG_DEBUG" + ;; + esac + AC_SUBST(C_O_FLAG_HIGHEST) AC_SUBST(C_O_FLAG_HI) AC_SUBST(C_O_FLAG_NORM) + AC_SUBST(C_O_FLAG_DEBUG) AC_SUBST(C_O_FLAG_NONE) AC_SUBST(CXX_O_FLAG_HIGHEST) AC_SUBST(CXX_O_FLAG_HI) AC_SUBST(CXX_O_FLAG_NORM) + AC_SUBST(CXX_O_FLAG_DEBUG) AC_SUBST(CXX_O_FLAG_NONE) AC_SUBST(C_FLAG_DEPS) AC_SUBST(CXX_FLAG_DEPS) @@ -958,22 +1008,18 @@ # Adjust flags according to debug level. case $DEBUG_LEVEL in + release ) + ;; fastdebug ) - CFLAGS_JDK="$CFLAGS_JDK $CFLAGS_DEBUG_SYMBOLS" - CXXFLAGS_JDK="$CXXFLAGS_JDK $CXXFLAGS_DEBUG_SYMBOLS" - C_O_FLAG_HI="$C_O_FLAG_NORM" - C_O_FLAG_NORM="$C_O_FLAG_NORM" - CXX_O_FLAG_HI="$CXX_O_FLAG_NORM" - CXX_O_FLAG_NORM="$CXX_O_FLAG_NORM" + # Add compile time bounds checks and symbol info. + CFLAGS_JDK="$CFLAGS_JDK -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1 $CFLAGS_DEBUG_SYMBOLS" + CXXFLAGS_JDK="$CXXFLAGS_JDK -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1 $CXXFLAGS_DEBUG_SYMBOLS" JAVAC_FLAGS="$JAVAC_FLAGS -g" ;; slowdebug ) - CFLAGS_JDK="$CFLAGS_JDK $CFLAGS_DEBUG_SYMBOLS" - CXXFLAGS_JDK="$CXXFLAGS_JDK $CXXFLAGS_DEBUG_SYMBOLS" - C_O_FLAG_HI="$C_O_FLAG_NONE" - C_O_FLAG_NORM="$C_O_FLAG_NONE" - CXX_O_FLAG_HI="$CXX_O_FLAG_NONE" - CXX_O_FLAG_NORM="$CXX_O_FLAG_NONE" + # Add runtime bounds checks and symbol info. + CFLAGS_JDK="$CFLAGS_JDK -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fstack-protector-all --param ssp-buffer-size=1 $CFLAGS_DEBUG_SYMBOLS" + CXXFLAGS_JDK="$CXXFLAGS_JDK -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fstack-protector-all --param ssp-buffer-size=1 $CXXFLAGS_DEBUG_SYMBOLS" JAVAC_FLAGS="$JAVAC_FLAGS -g" ;; esac @@ -1089,11 +1135,23 @@ # And since we now know that the linker is gnu, then add -z defs, to forbid # undefined symbols in object files. LDFLAGS_JDK="${LDFLAGS_JDK} -Xlinker -z -Xlinker defs" - if test "x$DEBUG_LEVEL" = "xrelease"; then - # When building release libraries, tell the linker optimize them. - # Should this be supplied to the OSS linker as well? - LDFLAGS_JDK="${LDFLAGS_JDK} -Xlinker -O1" - fi + case $DEBUG_LEVEL in + release ) + # tell linker to optimize libraries. + # Should this be supplied to the OSS linker as well? + LDFLAGS_JDK="${LDFLAGS_JDK} -Xlinker -O1" + ;; + fastdebug ) + # if possible mark relocations read only + LDFLAGS_JDK="$LDFLAGS_JDK -z relro" + LDFLAGS_CXX_JDK="$LDFLAGS_CXX_JDK -z relro" + ;; + slowdebug ) + # do relocations at load and mark read only. + LDFLAGS_JDK="$LDFLAGS_JDK -z relro -z now" + LDFLAGS_CXX_JDK="$LDFLAGS_CXX_JDK -z relro -z now" + ;; + esac fi fi LDFLAGS_JDKLIB="${LDFLAGS_JDK} $SHARED_LIBRARY_FLAGS \