diff options
Diffstat (limited to 'libre')
-rw-r--r-- | libre/java8-openjdk/PKGBUILD | 28 | ||||
-rw-r--r-- | libre/java8-openjdk/build_with_gcc6.patch | 1098 |
2 files changed, 1114 insertions, 12 deletions
diff --git a/libre/java8-openjdk/PKGBUILD b/libre/java8-openjdk/PKGBUILD index e3a78be53..1b7cc3788 100644 --- a/libre/java8-openjdk/PKGBUILD +++ b/libre/java8-openjdk/PKGBUILD @@ -13,11 +13,11 @@ pkgname=('jre8-openjdk-headless' 'jre8-openjdk' 'jdk8-openjdk') pkgbase=java8-openjdk _java_ver=8 # Found @ http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html -_jdk_update=92 +_jdk_update=102 _jdk_build=14 pkgver=${_java_ver}.u${_jdk_update} _repo_ver=jdk${_java_ver}u${_jdk_update}-b${_jdk_build} -pkgrel=1.parabola2 +pkgrel=1.parabola1 arch=('i686' 'x86_64') url='http://openjdk.java.net/' license=('custom') @@ -32,16 +32,18 @@ source=(jdk8u-${_repo_ver}.tar.gz::${_url_src}/archive/${_repo_ver}.tar.gz jaxws-${_repo_ver}.tar.gz::${_url_src}/jaxws/archive/${_repo_ver}.tar.gz jaxp-${_repo_ver}.tar.gz::${_url_src}/jaxp/archive/${_repo_ver}.tar.gz langtools-${_repo_ver}.tar.gz::${_url_src}/langtools/archive/${_repo_ver}.tar.gz - nashorn-${_repo_ver}.tar.gz::${_url_src}/nashorn/archive/${_repo_ver}.tar.gz) - -sha256sums=('19bc6028c18dd1993f734dc49991c181138e2e85ead42354d7236fb3c6169e16' - '287edac284f4b97f48a14fea331455c3807bcffd51612278decb0ac265303069' - '653821c6d3e542b4922aeedea6e25efb6d3c6ea2aaa0f5b038e6af972accf814' - '9a344a13bb327c5533c22c95b2cf3935d1d4c1612366e1d142b265dd6b93fe69' - '77aea5c781d6614b4be391befc59e3017d2d9c9303b6bc2ca9d316cb35954a89' - '63eff7fe1f6a0dd7ec0c450724a403dcff986e026b5b9ae9ac46edc7222f798c' - '374d12d1434172c775f0ecd944d0a903cd56264a4c9d5ef0be038715e47e67fd' - '76a18e240a8498c8d2a3a261b7845c8062dbf85941425adcd96f9e879141b3e6') + nashorn-${_repo_ver}.tar.gz::${_url_src}/nashorn/archive/${_repo_ver}.tar.gz + build_with_gcc6.patch) + +sha256sums=('d4161e41122de3526cfe4ca4d568e79b5843e833640752fa6ba2126f6372ed96' + 'ae51aaf7b6116ca11b79985f94af4b1cfed4675db6ee848904ddfc70b0ed0376' + '147e90989a6b1f8e8f7f808b082ec90ca8d79d25fe31db1a5ae04882a71bec0a' + 'bcf2490447164dee2c99a7f41958fd924a4f8542bc25099d4d268333bc04de61' + 'de8e8420dc02abbd6b06c6181776e23a38a053355955a8aac7a3cfcc2e733740' + 'bcff4bd5686c346e3fa676d0592e1e5b3b349f7f61636e702e999c00f940b066' + '5cad411081130829799440f155d4f70eb3178a7a603af68202a2f6ac19d40324' + '37050fe0525c45412f312fe88606e3c6b8cd02c0919b7695a1b94eff5dba8a42' + 'dcf5f495620231068b0c925a33ba7246bbeb85e9ae822b30ab77a66839c2d3b6') case "${CARCH}" in 'x86_64') _JARCH=amd64 ; _DOC_ARCH=x86_64 ;; @@ -65,6 +67,8 @@ prepare() { do ln -s ../${subrepo}-${_repo_ver} ${subrepo} done + + patch -p1 < ../build_with_gcc6.patch } build() { diff --git a/libre/java8-openjdk/build_with_gcc6.patch b/libre/java8-openjdk/build_with_gcc6.patch new file mode 100644 index 000000000..3579641ff --- /dev/null +++ b/libre/java8-openjdk/build_with_gcc6.patch @@ -0,0 +1,1098 @@ +# HG changeset patch +# User andrew +# Date 1468209748 -3600 +# Mon Jul 11 05:02:28 2016 +0100 +# Node ID 7eb66a95dbd58d26ed271477076e0ab72e8c9ebf +# Parent 817d9fb584baecae7c989dfd7009a7f0ac7c6360 +8151841: Build needs additional flags to compile with GCC 6 [plus parts of 8149647 & 8032045] +Summary: C++ standard needs to be explicitly set and some optimisations turned off to build on GCC 6 +Reviewed-by: erikj, dholmes, kbarrett + +diff --git a/common/autoconf/generated-configure.sh b/common/autoconf/generated-configure.sh +--- a/common/autoconf/generated-configure.sh ++++ b/common/autoconf/generated-configure.sh +@@ -679,6 +679,9 @@ + CFLAGS_JDKLIB + MACOSX_VERSION_MIN + PACKAGE_PATH ++NO_LIFETIME_DSE_CFLAG ++NO_DELETE_NULL_POINTER_CHECKS_CFLAG ++CXXSTD_CXXFLAG + LEGACY_EXTRA_LDFLAGS + LEGACY_EXTRA_CXXFLAGS + LEGACY_EXTRA_CFLAGS +@@ -743,6 +746,8 @@ + ac_ct_OBJC + OBJCFLAGS + OBJC ++CXX_VERSION ++CC_VERSION + ac_ct_CXX + CXXFLAGS + CXX +@@ -3672,7 +3677,7 @@ + + + # +-# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. ++# Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved. + # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + # + # This code is free software; you can redistribute it and/or modify it +@@ -3795,6 +3800,19 @@ + # questions. + # + ++# Prepare the system so that TOOLCHAIN_CHECK_COMPILER_VERSION can be called. ++# Must have CC_VERSION_NUMBER and CXX_VERSION_NUMBER. ++ ++ ++# Check if the configured compiler (C and C++) is of a specific version or ++# newer. TOOLCHAIN_PREPARE_FOR_VERSION_COMPARISONS must have been called before. ++# ++# Arguments: ++# $1: The version string to check against the found version ++# $2: block to run if the compiler is at least this version (>=) ++# $3: block to run if the compiler is older than this version (<) ++ ++ + # $1 = compiler to test (CC or CXX) + # $2 = human readable name of compiler (C or C++) + +@@ -3818,10 +3836,22 @@ + + + ++# TOOLCHAIN_C_COMPILER_CHECK_ARGUMENTS([ARGUMENT], [RUN-IF-TRUE], ++# [RUN-IF-FALSE]) ++# ------------------------------------------------------------ ++# Check that the C compiler supports an argument ++ ++ ++# TOOLCHAIN_CXX_COMPILER_CHECK_ARGUMENTS([ARGUMENT], [RUN-IF-TRUE], ++# [RUN-IF-FALSE]) ++# ------------------------------------------------------------ ++# Check that the C++ compiler supports an argument ++ ++ + # TOOLCHAIN_COMPILER_CHECK_ARGUMENTS([ARGUMENT], [RUN-IF-TRUE], +-# [RUN-IF-FALSE]) ++# [RUN-IF-FALSE]) + # ------------------------------------------------------------ +-# Check that the c and c++ compilers support an argument ++# Check that the C and C++ compilers support an argument + + + +@@ -3829,6 +3859,8 @@ + # Setup the JTREG paths + + ++ ++ + # + # Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. + # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +@@ -3880,7 +3912,7 @@ + #CUSTOM_AUTOCONF_INCLUDE + + # Do not change or remove the following line, it is needed for consistency checks: +-DATE_WHEN_GENERATED=1449096260 ++DATE_WHEN_GENERATED=1468207795 + + ############################################################################### + # +@@ -20368,7 +20400,8 @@ + + # First line typically looks something like: + # gcc (Ubuntu/Linaro 4.5.2-8ubuntu4) 4.5.2 +- COMPILER_VERSION=`$ECHO $COMPILER_VERSION_TEST | $SED -n "s/^.* \([1-9][0-9.]*\)/\1/p"` ++ COMPILER_VERSION=`$ECHO $COMPILER_VERSION_TEST | \ ++ $SED -e 's/^.* \([1-9]\.[0-9.]*\)[^0-9.].*$/\1/'` + COMPILER_VENDOR=`$ECHO $COMPILER_VERSION_TEST | $SED -n "s/^\(.*\) [1-9][0-9.]*/\1/p"` + fi + # This sets CC_VERSION or CXX_VERSION. (This comment is a grep marker) +@@ -21969,7 +22002,8 @@ + + # First line typically looks something like: + # gcc (Ubuntu/Linaro 4.5.2-8ubuntu4) 4.5.2 +- COMPILER_VERSION=`$ECHO $COMPILER_VERSION_TEST | $SED -n "s/^.* \([1-9][0-9.]*\)/\1/p"` ++ COMPILER_VERSION=`$ECHO $COMPILER_VERSION_TEST | \ ++ $SED -e 's/^.* \([1-9]\.[0-9.]*\)[^0-9.].*$/\1/'` + COMPILER_VENDOR=`$ECHO $COMPILER_VERSION_TEST | $SED -n "s/^\(.*\) [1-9][0-9.]*/\1/p"` + fi + # This sets CC_VERSION or CXX_VERSION. (This comment is a grep marker) +@@ -22240,6 +22274,32 @@ + ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + ++ # This is the compiler version number on the form X.Y[.Z] ++ ++ ++ ++ ++ if test "x$CC_VERSION" != "x$CXX_VERSION"; then ++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: C and C++ compiler has different version numbers, $CC_VERSION vs $CXX_VERSION." >&5 ++$as_echo "$as_me: WARNING: C and C++ compiler has different version numbers, $CC_VERSION vs $CXX_VERSION." >&2;} ++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: This typically indicates a broken setup, and is not supported" >&5 ++$as_echo "$as_me: WARNING: This typically indicates a broken setup, and is not supported" >&2;} ++ fi ++ ++ # We only check CC_VERSION since we assume CXX_VERSION is equal. ++ if [[ "$CC_VERSION" =~ (.*\.){3} ]] ; then ++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: C compiler version number has more than three parts (X.Y.Z): $CC_VERSION. Comparisons might be wrong." >&5 ++$as_echo "$as_me: WARNING: C compiler version number has more than three parts (X.Y.Z): $CC_VERSION. Comparisons might be wrong." >&2;} ++ fi ++ ++ if [[ "$CC_VERSION" =~ [0-9]{6} ]] ; then ++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: C compiler version number has a part larger than 99999: $CC_VERSION. Comparisons might be wrong." >&5 ++$as_echo "$as_me: WARNING: C compiler version number has a part larger than 99999: $CC_VERSION. Comparisons might be wrong." >&2;} ++ fi ++ ++ COMPARABLE_ACTUAL_VERSION=`$AWK -F. '{ printf("%05d%05d%05d\n", $1, $2, $3) }' <<< "$CC_VERSION"` ++ ++ + ### Locate other tools + + if test "x$OPENJDK_TARGET_OS" = xmacosx; then +@@ -24831,7 +24891,8 @@ + + + COMPILER_TYPE=CL +- CCXXFLAGS="$CCXXFLAGS -nologo" ++ # silence copyright notice and other headers. ++ COMMON_CCXXFLAGS="$COMMON_CCXXFLAGS -nologo" + + fi + +@@ -29664,12 +29725,57 @@ + # + # Now setup the CFLAGS and LDFLAGS for the JDK build. + # Later we will also have CFLAGS and LDFLAGS for the hotspot subrepo build. ++ # CFLAGS_JDK - C Compiler flags ++ # CXXFLAGS_JDK - C++ Compiler flags ++ # COMMON_CCXXFLAGS_JDK - common to C and C++ + # + case $COMPILER_NAME in + gcc ) +- CCXXFLAGS_JDK="$CCXXFLAGS $CCXXFLAGS_JDK -W -Wall -Wno-unused -Wno-parentheses \ ++ COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS $COMMON_CCXXFLAGS_JDK -W -Wall -Wno-unused -Wno-parentheses \ + -pipe \ + -D_GNU_SOURCE -D_REENTRANT -D_LARGEFILE64_SOURCE" ++ CXXSTD_CXXFLAG="-std=gnu++98" ++ ++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the C++ compiler supports \"$CXXSTD_CXXFLAG $CFLAGS_WARNINGS_ARE_ERRORS\"" >&5 ++$as_echo_n "checking if the C++ compiler supports \"$CXXSTD_CXXFLAG $CFLAGS_WARNINGS_ARE_ERRORS\"... " >&6; } ++ supports=yes ++ ++ saved_cxxflags="$CXXFLAGS" ++ CXXFLAGS="$CXXFLAG $CXXSTD_CXXFLAG $CFLAGS_WARNINGS_ARE_ERRORS" ++ ac_ext=cpp ++ac_cpp='$CXXCPP $CPPFLAGS' ++ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ++ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ++ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ++ ++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++int i; ++_ACEOF ++if ac_fn_cxx_try_compile "$LINENO"; then : ++ ++else ++ supports=no ++fi ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++ ac_ext=cpp ++ac_cpp='$CXXCPP $CPPFLAGS' ++ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ++ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ++ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ++ ++ CXXFLAGS="$saved_cxxflags" ++ ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supports" >&5 ++$as_echo "$supports" >&6; } ++ if test "x$supports" = "xyes" ; then ++ : ++ else ++ CXXSTD_CXXFLAG="" ++ fi ++ ++ CXXFLAGS_JDK="${CXXFLAGS_JDK} ${CXXSTD_CXXFLAG}" ++ + case $OPENJDK_TARGET_CPU_ARCH in + arm ) + # on arm we don't prevent gcc to omit frame pointer but do prevent strict aliasing +@@ -29679,16 +29785,234 @@ + # on ppc we don't prevent gcc to omit frame pointer nor strict-aliasing + ;; + * ) +- CCXXFLAGS_JDK="$CCXXFLAGS_JDK -fno-omit-frame-pointer" ++ COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -fno-omit-frame-pointer" + CFLAGS_JDK="${CFLAGS_JDK} -fno-strict-aliasing" + ;; + esac ++ ++ REFERENCE_VERSION=6 ++ ++ if [[ "$REFERENCE_VERSION" =~ (.*\.){3} ]] ; then ++ as_fn_error $? "Internal error: Cannot compare to $REFERENCE_VERSION, only three parts (X.Y.Z) is supported" "$LINENO" 5 ++ fi ++ ++ if [[ "$REFERENCE_VERSION" =~ [0-9]{6} ]] ; then ++ as_fn_error $? "Internal error: Cannot compare to $REFERENCE_VERSION, only parts < 99999 is supported" "$LINENO" 5 ++ fi ++ ++ # Version comparison method inspired by http://stackoverflow.com/a/24067243 ++ COMPARABLE_REFERENCE_VERSION=`$AWK -F. '{ printf("%05d%05d%05d\n", $1, $2, $3) }' <<< "$REFERENCE_VERSION"` ++ ++ if test $COMPARABLE_ACTUAL_VERSION -ge $COMPARABLE_REFERENCE_VERSION ; then ++ ++ # These flags are required for GCC 6 builds as undefined behaviour in OpenJDK code ++ # runs afoul of the more aggressive versions of these optimisations. ++ # Notably, value range propagation now assumes that the this pointer of C++ ++ # member functions is non-null. ++ NO_DELETE_NULL_POINTER_CHECKS_CFLAG="-fno-delete-null-pointer-checks" ++ ++ ++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the C compiler supports \"$NO_DELETE_NULL_POINTER_CHECKS_CFLAG -Werror\"" >&5 ++$as_echo_n "checking if the C compiler supports \"$NO_DELETE_NULL_POINTER_CHECKS_CFLAG -Werror\"... " >&6; } ++ supports=yes ++ ++ saved_cflags="$CFLAGS" ++ CFLAGS="$CFLAGS $NO_DELETE_NULL_POINTER_CHECKS_CFLAG -Werror" ++ ac_ext=c ++ac_cpp='$CPP $CPPFLAGS' ++ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ++ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ++ac_compiler_gnu=$ac_cv_c_compiler_gnu ++ ++ ++cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++int i; ++_ACEOF ++if ac_fn_c_try_compile "$LINENO"; then : ++ ++else ++ supports=no ++fi ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++ ac_ext=cpp ++ac_cpp='$CXXCPP $CPPFLAGS' ++ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ++ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ++ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ++ ++ CFLAGS="$saved_cflags" ++ ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supports" >&5 ++$as_echo "$supports" >&6; } ++ if test "x$supports" = "xyes" ; then ++ C_COMP_SUPPORTS="yes" ++ else ++ C_COMP_SUPPORTS="no" ++ fi ++ ++ ++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the C++ compiler supports \"$NO_DELETE_NULL_POINTER_CHECKS_CFLAG -Werror\"" >&5 ++$as_echo_n "checking if the C++ compiler supports \"$NO_DELETE_NULL_POINTER_CHECKS_CFLAG -Werror\"... " >&6; } ++ supports=yes ++ ++ saved_cxxflags="$CXXFLAGS" ++ CXXFLAGS="$CXXFLAG $NO_DELETE_NULL_POINTER_CHECKS_CFLAG -Werror" ++ ac_ext=cpp ++ac_cpp='$CXXCPP $CPPFLAGS' ++ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ++ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ++ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ++ ++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++int i; ++_ACEOF ++if ac_fn_cxx_try_compile "$LINENO"; then : ++ ++else ++ supports=no ++fi ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++ ac_ext=cpp ++ac_cpp='$CXXCPP $CPPFLAGS' ++ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ++ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ++ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ++ ++ CXXFLAGS="$saved_cxxflags" ++ ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supports" >&5 ++$as_echo "$supports" >&6; } ++ if test "x$supports" = "xyes" ; then ++ CXX_COMP_SUPPORTS="yes" ++ else ++ CXX_COMP_SUPPORTS="no" ++ fi ++ ++ ++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if both compilers support \"$NO_DELETE_NULL_POINTER_CHECKS_CFLAG -Werror\"" >&5 ++$as_echo_n "checking if both compilers support \"$NO_DELETE_NULL_POINTER_CHECKS_CFLAG -Werror\"... " >&6; } ++ supports=no ++ if test "x$C_COMP_SUPPORTS" = "xyes" -a "x$CXX_COMP_SUPPORTS" = "xyes"; then supports=yes; fi ++ ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supports" >&5 ++$as_echo "$supports" >&6; } ++ if test "x$supports" = "xyes" ; then ++ : ++ else ++ NO_DELETE_NULL_POINTER_CHECKS_CFLAG="" ++ fi ++ ++ ++ NO_LIFETIME_DSE_CFLAG="-fno-lifetime-dse" ++ ++ ++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the C compiler supports \"$NO_LIFETIME_DSE_CFLAG -Werror\"" >&5 ++$as_echo_n "checking if the C compiler supports \"$NO_LIFETIME_DSE_CFLAG -Werror\"... " >&6; } ++ supports=yes ++ ++ saved_cflags="$CFLAGS" ++ CFLAGS="$CFLAGS $NO_LIFETIME_DSE_CFLAG -Werror" ++ ac_ext=c ++ac_cpp='$CPP $CPPFLAGS' ++ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ++ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ++ac_compiler_gnu=$ac_cv_c_compiler_gnu ++ ++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++int i; ++_ACEOF ++if ac_fn_c_try_compile "$LINENO"; then : ++ ++else ++ supports=no ++fi ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++ ac_ext=cpp ++ac_cpp='$CXXCPP $CPPFLAGS' ++ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ++ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ++ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ++ ++ CFLAGS="$saved_cflags" ++ ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supports" >&5 ++$as_echo "$supports" >&6; } ++ if test "x$supports" = "xyes" ; then ++ C_COMP_SUPPORTS="yes" ++ else ++ C_COMP_SUPPORTS="no" ++ fi ++ ++ ++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the C++ compiler supports \"$NO_LIFETIME_DSE_CFLAG -Werror\"" >&5 ++$as_echo_n "checking if the C++ compiler supports \"$NO_LIFETIME_DSE_CFLAG -Werror\"... " >&6; } ++ supports=yes ++ ++ saved_cxxflags="$CXXFLAGS" ++ CXXFLAGS="$CXXFLAG $NO_LIFETIME_DSE_CFLAG -Werror" ++ ac_ext=cpp ++ac_cpp='$CXXCPP $CPPFLAGS' ++ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ++ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ++ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ++ ++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++int i; ++_ACEOF ++if ac_fn_cxx_try_compile "$LINENO"; then : ++ ++else ++ supports=no ++fi ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++ ac_ext=cpp ++ac_cpp='$CXXCPP $CPPFLAGS' ++ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ++ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ++ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ++ ++ CXXFLAGS="$saved_cxxflags" ++ ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supports" >&5 ++$as_echo "$supports" >&6; } ++ if test "x$supports" = "xyes" ; then ++ CXX_COMP_SUPPORTS="yes" ++ else ++ CXX_COMP_SUPPORTS="no" ++ fi ++ ++ ++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if both compilers support \"$NO_LIFETIME_DSE_CFLAG -Werror\"" >&5 ++$as_echo_n "checking if both compilers support \"$NO_LIFETIME_DSE_CFLAG -Werror\"... " >&6; } ++ supports=no ++ if test "x$C_COMP_SUPPORTS" = "xyes" -a "x$CXX_COMP_SUPPORTS" = "xyes"; then supports=yes; fi ++ ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supports" >&5 ++$as_echo "$supports" >&6; } ++ if test "x$supports" = "xyes" ; then ++ : ++ else ++ NO_LIFETIME_DSE_CFLAG="" ++ fi ++ ++ CFLAGS_JDK="${CFLAGS_JDK} ${NO_DELETE_NULL_POINTER_CHECKS_CFLAG} ${NO_LIFETIME_DSE_CFLAG}" ++ ++ ++ ++ else ++ : ++ fi ++ + ;; + ossc ) +- CCXXFLAGS_JDK="$CCXXFLAGS $CCXXFLAGS_JDK -DTRACING -DMACRO_MEMSYS_OPS -DBREAKPTS" ++ COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS $COMMON_CCXXFLAGS_JDK -DTRACING -DMACRO_MEMSYS_OPS -DBREAKPTS" + case $OPENJDK_TARGET_CPU_ARCH in + x86 ) +- CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DcpuIntel -Di586 -D$OPENJDK_TARGET_CPU_LEGACY_LIB" ++ COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -DcpuIntel -Di586 -D$OPENJDK_TARGET_CPU_LEGACY_LIB" + CFLAGS_JDK="$CFLAGS_JDK -erroff=E_BAD_PRAGMA_PACK_VALUE" + ;; + esac +@@ -29707,16 +30031,16 @@ + LDFLAGS_CXX_JDK="$LDFLAGS_CXX_JDK" + ;; + cl ) +- CCXXFLAGS_JDK="$CCXXFLAGS $CCXXFLAGS_JDK -Zi -MD -Zc:wchar_t- -W3 -wd4800 \ ++ COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS $COMMON_CCXXFLAGS_JDK -Zi -MD -Zc:wchar_t- -W3 -wd4800 \ + -D_STATIC_CPPLIB -D_DISABLE_DEPRECATE_STATIC_CPPLIB -DWIN32_LEAN_AND_MEAN \ + -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE \ + -DWIN32 -DIAL" + case $OPENJDK_TARGET_CPU in + x86 ) +- CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_X86_ -Dx86" ++ COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -D_X86_ -Dx86" + ;; + x86_64 ) +- CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_AMD64_ -Damd64" ++ COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -D_AMD64_ -Damd64" + ;; + esac + ;; +@@ -29746,7 +30070,7 @@ + ;; + esac + +- CCXXFLAGS_JDK="$CCXXFLAGS_JDK $ADD_LP64" ++ COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK $ADD_LP64" + + # The package path is used only on macosx? + PACKAGE_PATH=/opt/local +@@ -29759,27 +30083,27 @@ + # Note: -Dmacro is the same as #define macro 1 + # -Dmacro= is the same as #define macro + if test "x$OPENJDK_TARGET_OS" = xsolaris; then +- CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_LITTLE_ENDIAN=" +- else +- CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_LITTLE_ENDIAN" +- fi +- else +- CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_BIG_ENDIAN" ++ COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -D_LITTLE_ENDIAN=" ++ else ++ COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -D_LITTLE_ENDIAN" ++ fi ++ else ++ COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -D_BIG_ENDIAN" + fi + if test "x$OPENJDK_TARGET_OS" = xlinux; then +- CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DLINUX" ++ COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -DLINUX" + fi + if test "x$OPENJDK_TARGET_OS" = xwindows; then +- CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DWINDOWS" ++ COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -DWINDOWS" + fi + if test "x$OPENJDK_TARGET_OS" = xsolaris; then +- CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DSOLARIS" ++ COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -DSOLARIS" + fi + if test "x$OPENJDK_TARGET_OS" = xaix; then +- CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DAIX -DPPC64" ++ COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -DAIX -DPPC64" + fi + if test "x$OPENJDK_TARGET_OS" = xmacosx; then +- CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DMACOSX -D_ALLBSD_SOURCE -D_DARWIN_UNLIMITED_SELECT" ++ COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -DMACOSX -D_ALLBSD_SOURCE -D_DARWIN_UNLIMITED_SELECT" + # Setting these parameters makes it an error to link to macosx APIs that are + # newer than the given OS version and makes the linked binaries compatible even + # if built on a newer version of the OS. +@@ -29789,25 +30113,25 @@ + # The macro takes the version with no dots, ex: 1070 + # Let the flags variables get resolved in make for easier override on make + # command line. +- CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DMAC_OS_X_VERSION_MAX_ALLOWED=\$(subst .,,\$(MACOSX_VERSION_MIN)) -mmacosx-version-min=\$(MACOSX_VERSION_MIN)" ++ COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -DMAC_OS_X_VERSION_MAX_ALLOWED=\$(subst .,,\$(MACOSX_VERSION_MIN)) -mmacosx-version-min=\$(MACOSX_VERSION_MIN)" + LDFLAGS_JDK="$LDFLAGS_JDK -mmacosx-version-min=\$(MACOSX_VERSION_MIN)" + fi + if test "x$OPENJDK_TARGET_OS" = xbsd; then +- CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DBSD -D_ALLBSD_SOURCE" ++ COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -DBSD -D_ALLBSD_SOURCE" + fi + if test "x$DEBUG_LEVEL" = xrelease; then +- CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DNDEBUG" ++ COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -DNDEBUG" + if test "x$OPENJDK_TARGET_OS" = xsolaris; then +- CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DTRIMMED" +- fi +- else +- CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DDEBUG" +- fi +- +- CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DARCH='\"$OPENJDK_TARGET_CPU_LEGACY\"' -D$OPENJDK_TARGET_CPU_LEGACY" +- CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DRELEASE='\"\$(RELEASE)\"'" +- +- CCXXFLAGS_JDK="$CCXXFLAGS_JDK \ ++ COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -DTRIMMED" ++ fi ++ else ++ COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -DDEBUG" ++ fi ++ ++ COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -DARCH='\"$OPENJDK_TARGET_CPU_LEGACY\"' -D$OPENJDK_TARGET_CPU_LEGACY" ++ COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -DRELEASE='\"\$(RELEASE)\"'" ++ ++ COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK \ + -I${JDK_OUTPUTDIR}/include \ + -I${JDK_OUTPUTDIR}/include/$OPENJDK_TARGET_OS \ + -I${JDK_TOPDIR}/src/share/javavm/export \ +@@ -29816,12 +30140,12 @@ + -I${JDK_TOPDIR}/src/$OPENJDK_TARGET_OS_API_DIR/native/common" + + # The shared libraries are compiled using the picflag. +- CFLAGS_JDKLIB="$CCXXFLAGS_JDK $CFLAGS_JDK $PICFLAG $CFLAGS_JDKLIB_EXTRA" +- CXXFLAGS_JDKLIB="$CCXXFLAGS_JDK $CXXFLAGS_JDK $PICFLAG $CXXFLAGS_JDKLIB_EXTRA " ++ CFLAGS_JDKLIB="$COMMON_CCXXFLAGS_JDK $CFLAGS_JDK $PICFLAG $CFLAGS_JDKLIB_EXTRA" ++ CXXFLAGS_JDKLIB="$COMMON_CCXXFLAGS_JDK $CXXFLAGS_JDK $PICFLAG $CXXFLAGS_JDKLIB_EXTRA " + + # Executable flags +- CFLAGS_JDKEXE="$CCXXFLAGS_JDK $CFLAGS_JDK" +- CXXFLAGS_JDKEXE="$CCXXFLAGS_JDK $CXXFLAGS_JDK" ++ CFLAGS_JDKEXE="$COMMON_CCXXFLAGS_JDK $CFLAGS_JDK" ++ CXXFLAGS_JDKEXE="$COMMON_CCXXFLAGS_JDK $CXXFLAGS_JDK" + + # Now this is odd. The JDK native libraries have to link against libjvm.so + # On 32-bit machines there is normally two distinct libjvm.so:s, client and server. +@@ -29905,7 +30229,6 @@ + + + +- + # Some Zero and Shark settings. + # ZERO_ARCHFLAG tells the compiler which mode to build for + case "${OPENJDK_TARGET_CPU}" in +@@ -29916,8 +30239,9 @@ + ZERO_ARCHFLAG="${COMPILER_TARGET_BITS_FLAG}${OPENJDK_TARGET_CPU_BITS}" + esac + +- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler supports \"$ZERO_ARCHFLAG\"" >&5 +-$as_echo_n "checking if compiler supports \"$ZERO_ARCHFLAG\"... " >&6; } ++ ++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the C compiler supports \"$ZERO_ARCHFLAG\"" >&5 ++$as_echo_n "checking if the C compiler supports \"$ZERO_ARCHFLAG\"... " >&6; } + supports=yes + + saved_cflags="$CFLAGS" +@@ -29946,6 +30270,19 @@ + + CFLAGS="$saved_cflags" + ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supports" >&5 ++$as_echo "$supports" >&6; } ++ if test "x$supports" = "xyes" ; then ++ C_COMP_SUPPORTS="yes" ++ else ++ C_COMP_SUPPORTS="no" ++ fi ++ ++ ++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the C++ compiler supports \"$ZERO_ARCHFLAG\"" >&5 ++$as_echo_n "checking if the C++ compiler supports \"$ZERO_ARCHFLAG\"... " >&6; } ++ supports=yes ++ + saved_cxxflags="$CXXFLAGS" + CXXFLAGS="$CXXFLAG $ZERO_ARCHFLAG" + ac_ext=cpp +@@ -29975,6 +30312,20 @@ + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supports" >&5 + $as_echo "$supports" >&6; } + if test "x$supports" = "xyes" ; then ++ CXX_COMP_SUPPORTS="yes" ++ else ++ CXX_COMP_SUPPORTS="no" ++ fi ++ ++ ++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if both compilers support \"$ZERO_ARCHFLAG\"" >&5 ++$as_echo_n "checking if both compilers support \"$ZERO_ARCHFLAG\"... " >&6; } ++ supports=no ++ if test "x$C_COMP_SUPPORTS" = "xyes" -a "x$CXX_COMP_SUPPORTS" = "xyes"; then supports=yes; fi ++ ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supports" >&5 ++$as_echo "$supports" >&6; } ++ if test "x$supports" = "xyes" ; then + : + else + ZERO_ARCHFLAG="" +@@ -29985,8 +30336,9 @@ + # Check that the compiler supports -mX (or -qX on AIX) flags + # Set COMPILER_SUPPORTS_TARGET_BITS_FLAG to 'true' if it does + +- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler supports \"${COMPILER_TARGET_BITS_FLAG}${OPENJDK_TARGET_CPU_BITS}\"" >&5 +-$as_echo_n "checking if compiler supports \"${COMPILER_TARGET_BITS_FLAG}${OPENJDK_TARGET_CPU_BITS}\"... " >&6; } ++ ++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the C compiler supports \"${COMPILER_TARGET_BITS_FLAG}${OPENJDK_TARGET_CPU_BITS}\"" >&5 ++$as_echo_n "checking if the C compiler supports \"${COMPILER_TARGET_BITS_FLAG}${OPENJDK_TARGET_CPU_BITS}\"... " >&6; } + supports=yes + + saved_cflags="$CFLAGS" +@@ -30015,6 +30367,19 @@ + + CFLAGS="$saved_cflags" + ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supports" >&5 ++$as_echo "$supports" >&6; } ++ if test "x$supports" = "xyes" ; then ++ C_COMP_SUPPORTS="yes" ++ else ++ C_COMP_SUPPORTS="no" ++ fi ++ ++ ++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the C++ compiler supports \"${COMPILER_TARGET_BITS_FLAG}${OPENJDK_TARGET_CPU_BITS}\"" >&5 ++$as_echo_n "checking if the C++ compiler supports \"${COMPILER_TARGET_BITS_FLAG}${OPENJDK_TARGET_CPU_BITS}\"... " >&6; } ++ supports=yes ++ + saved_cxxflags="$CXXFLAGS" + CXXFLAGS="$CXXFLAG ${COMPILER_TARGET_BITS_FLAG}${OPENJDK_TARGET_CPU_BITS}" + ac_ext=cpp +@@ -30044,6 +30409,20 @@ + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supports" >&5 + $as_echo "$supports" >&6; } + if test "x$supports" = "xyes" ; then ++ CXX_COMP_SUPPORTS="yes" ++ else ++ CXX_COMP_SUPPORTS="no" ++ fi ++ ++ ++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if both compilers support \"${COMPILER_TARGET_BITS_FLAG}${OPENJDK_TARGET_CPU_BITS}\"" >&5 ++$as_echo_n "checking if both compilers support \"${COMPILER_TARGET_BITS_FLAG}${OPENJDK_TARGET_CPU_BITS}\"... " >&6; } ++ supports=no ++ if test "x$C_COMP_SUPPORTS" = "xyes" -a "x$CXX_COMP_SUPPORTS" = "xyes"; then supports=yes; fi ++ ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supports" >&5 ++$as_echo "$supports" >&6; } ++ if test "x$supports" = "xyes" ; then + COMPILER_SUPPORTS_TARGET_BITS_FLAG=true + else + COMPILER_SUPPORTS_TARGET_BITS_FLAG=false +diff --git a/common/autoconf/hotspot-spec.gmk.in b/common/autoconf/hotspot-spec.gmk.in +--- a/common/autoconf/hotspot-spec.gmk.in ++++ b/common/autoconf/hotspot-spec.gmk.in +@@ -1,5 +1,5 @@ + # +-# Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved. ++# Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved. + # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + # + # This code is free software; you can redistribute it and/or modify it +@@ -109,7 +109,8 @@ + MT:=@HOTSPOT_MT@ + RC:=@HOTSPOT_RC@ + +-EXTRA_CFLAGS=@LEGACY_EXTRA_CFLAGS@ ++EXTRA_CFLAGS=@LEGACY_EXTRA_CFLAGS@ $(NO_DELETE_NULL_POINTER_CHECKS_CFLAG) \ ++ $(NO_LIFETIME_DSE_CFLAG) $(CXXSTD_CXXFLAG) + EXTRA_CXXFLAGS=@LEGACY_EXTRA_CXXFLAGS@ + EXTRA_LDFLAGS=@LEGACY_EXTRA_LDFLAGS@ + +diff --git a/common/autoconf/spec.gmk.in b/common/autoconf/spec.gmk.in +--- a/common/autoconf/spec.gmk.in ++++ b/common/autoconf/spec.gmk.in +@@ -331,6 +331,10 @@ + CFLAGS_JDKEXE:=@CFLAGS_JDKEXE@ + CXXFLAGS_JDKEXE:=@CXXFLAGS_JDKEXE@ + ++NO_DELETE_NULL_POINTER_CHECKS_CFLAG=@NO_DELETE_NULL_POINTER_CHECKS_CFLAG@ ++NO_LIFETIME_DSE_CFLAG=@NO_LIFETIME_DSE_CFLAG@ ++CXXSTD_CXXFLAG=@CXXSTD_CXXFLAG@ ++ + CXX:=@FIXPATH@ @CCACHE@ @CXX@ + #CXXFLAGS:=@CXXFLAGS@ + +diff --git a/common/autoconf/toolchain.m4 b/common/autoconf/toolchain.m4 +--- a/common/autoconf/toolchain.m4 ++++ b/common/autoconf/toolchain.m4 +@@ -23,9 +23,59 @@ + # questions. + # + ++# Prepare the system so that TOOLCHAIN_CHECK_COMPILER_VERSION can be called. ++# Must have CC_VERSION_NUMBER and CXX_VERSION_NUMBER. ++AC_DEFUN([TOOLCHAIN_PREPARE_FOR_VERSION_COMPARISONS], ++[ ++ if test "x$CC_VERSION" != "x$CXX_VERSION"; then ++ AC_MSG_WARN([C and C++ compiler has different version numbers, $CC_VERSION vs $CXX_VERSION.]) ++ AC_MSG_WARN([This typically indicates a broken setup, and is not supported]) ++ fi ++ ++ # We only check CC_VERSION since we assume CXX_VERSION is equal. ++ if [ [[ "$CC_VERSION" =~ (.*\.){3} ]] ]; then ++ AC_MSG_WARN([C compiler version number has more than three parts (X.Y.Z): $CC_VERSION. Comparisons might be wrong.]) ++ fi ++ ++ if [ [[ "$CC_VERSION" =~ [0-9]{6} ]] ]; then ++ AC_MSG_WARN([C compiler version number has a part larger than 99999: $CC_VERSION. Comparisons might be wrong.]) ++ fi ++ ++ COMPARABLE_ACTUAL_VERSION=`$AWK -F. '{ printf("%05d%05d%05d\n", [$]1, [$]2, [$]3) }' <<< "$CC_VERSION"` ++]) ++ ++# Check if the configured compiler (C and C++) is of a specific version or ++# newer. TOOLCHAIN_PREPARE_FOR_VERSION_COMPARISONS must have been called before. ++# ++# Arguments: ++# $1: The version string to check against the found version ++# $2: block to run if the compiler is at least this version (>=) ++# $3: block to run if the compiler is older than this version (<) ++AC_DEFUN([TOOLCHAIN_CHECK_COMPILER_VERSION], ++[ ++ REFERENCE_VERSION=$1 ++ ++ if [ [[ "$REFERENCE_VERSION" =~ (.*\.){3} ]] ]; then ++ AC_MSG_ERROR([Internal error: Cannot compare to $REFERENCE_VERSION, only three parts (X.Y.Z) is supported]) ++ fi ++ ++ if [ [[ "$REFERENCE_VERSION" =~ [0-9]{6} ]] ]; then ++ AC_MSG_ERROR([Internal error: Cannot compare to $REFERENCE_VERSION, only parts < 99999 is supported]) ++ fi ++ ++ # Version comparison method inspired by http://stackoverflow.com/a/24067243 ++ COMPARABLE_REFERENCE_VERSION=`$AWK -F. '{ printf("%05d%05d%05d\n", [$]1, [$]2, [$]3) }' <<< "$REFERENCE_VERSION"` ++ ++ if test $COMPARABLE_ACTUAL_VERSION -ge $COMPARABLE_REFERENCE_VERSION ; then ++ m4_ifval([$2], [$2], [:]) ++ else ++ m4_ifval([$3], [$3], [:]) ++ fi ++]) ++ + # $1 = compiler to test (CC or CXX) + # $2 = human readable name of compiler (C or C++) +-AC_DEFUN([TOOLCHAIN_CHECK_COMPILER_VERSION], ++AC_DEFUN([TOOLCHAIN_EXTRACT_COMPILER_VERSION], + [ + COMPILER=[$]$1 + COMPILER_NAME=$2 +@@ -81,7 +131,8 @@ + + # First line typically looks something like: + # gcc (Ubuntu/Linaro 4.5.2-8ubuntu4) 4.5.2 +- COMPILER_VERSION=`$ECHO $COMPILER_VERSION_TEST | $SED -n "s/^.* \(@<:@1-9@:>@@<:@0-9.@:>@*\)/\1/p"` ++ COMPILER_VERSION=`$ECHO $COMPILER_VERSION_TEST | \ ++ $SED -e 's/^.* \(@<:@1-9@:>@\.@<:@0-9.@:>@*\)@<:@^0-9.@:>@.*$/\1/'` + COMPILER_VENDOR=`$ECHO $COMPILER_VERSION_TEST | $SED -n "s/^\(.*\) @<:@1-9@:>@@<:@0-9.@:>@*/\1/p"` + fi + # This sets CC_VERSION or CXX_VERSION. (This comment is a grep marker) +@@ -181,7 +232,7 @@ + AC_MSG_RESULT([no, keeping $1]) + $1="$TEST_COMPILER" + fi +- TOOLCHAIN_CHECK_COMPILER_VERSION([$1], [$COMPILER_NAME]) ++ TOOLCHAIN_EXTRACT_COMPILER_VERSION([$1], [$COMPILER_NAME]) + ]) + + +@@ -385,6 +436,12 @@ + # Now that we have resolved CXX ourself, let autoconf have its go at it + AC_PROG_CXX([$CXX]) + ++ # This is the compiler version number on the form X.Y[.Z] ++ AC_SUBST(CC_VERSION) ++ AC_SUBST(CXX_VERSION) ++ ++ TOOLCHAIN_PREPARE_FOR_VERSION_COMPARISONS ++ + ### Locate other tools + + if test "x$OPENJDK_TARGET_OS" = xmacosx; then +@@ -507,7 +564,8 @@ + BASIC_FIXUP_EXECUTABLE(DUMPBIN) + + COMPILER_TYPE=CL +- CCXXFLAGS="$CCXXFLAGS -nologo" ++ # silence copyright notice and other headers. ++ COMMON_CCXXFLAGS="$COMMON_CCXXFLAGS -nologo" + ]) + AC_SUBST(RC_FLAGS) + AC_SUBST(COMPILER_TYPE) +@@ -954,12 +1012,20 @@ + # + # Now setup the CFLAGS and LDFLAGS for the JDK build. + # Later we will also have CFLAGS and LDFLAGS for the hotspot subrepo build. ++ # CFLAGS_JDK - C Compiler flags ++ # CXXFLAGS_JDK - C++ Compiler flags ++ # COMMON_CCXXFLAGS_JDK - common to C and C++ + # + case $COMPILER_NAME in + gcc ) +- CCXXFLAGS_JDK="$CCXXFLAGS $CCXXFLAGS_JDK -W -Wall -Wno-unused -Wno-parentheses \ ++ COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS $COMMON_CCXXFLAGS_JDK -W -Wall -Wno-unused -Wno-parentheses \ + -pipe \ + -D_GNU_SOURCE -D_REENTRANT -D_LARGEFILE64_SOURCE" ++ CXXSTD_CXXFLAG="-std=gnu++98" ++ TOOLCHAIN_CXX_COMPILER_CHECK_ARGUMENTS([$CXXSTD_CXXFLAG $CFLAGS_WARNINGS_ARE_ERRORS], ++ [], [CXXSTD_CXXFLAG=""]) ++ CXXFLAGS_JDK="${CXXFLAGS_JDK} ${CXXSTD_CXXFLAG}" ++ AC_SUBST([CXXSTD_CXXFLAG]) + case $OPENJDK_TARGET_CPU_ARCH in + arm ) + # on arm we don't prevent gcc to omit frame pointer but do prevent strict aliasing +@@ -969,16 +1035,17 @@ + # on ppc we don't prevent gcc to omit frame pointer nor strict-aliasing + ;; + * ) +- CCXXFLAGS_JDK="$CCXXFLAGS_JDK -fno-omit-frame-pointer" ++ COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -fno-omit-frame-pointer" + CFLAGS_JDK="${CFLAGS_JDK} -fno-strict-aliasing" + ;; + esac ++ TOOLCHAIN_CHECK_COMPILER_VERSION(6, TOOLCHAIN_SETUP_GCC6_COMPILER_FLAGS) + ;; + ossc ) +- CCXXFLAGS_JDK="$CCXXFLAGS $CCXXFLAGS_JDK -DTRACING -DMACRO_MEMSYS_OPS -DBREAKPTS" ++ COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS $COMMON_CCXXFLAGS_JDK -DTRACING -DMACRO_MEMSYS_OPS -DBREAKPTS" + case $OPENJDK_TARGET_CPU_ARCH in + x86 ) +- CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DcpuIntel -Di586 -D$OPENJDK_TARGET_CPU_LEGACY_LIB" ++ COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -DcpuIntel -Di586 -D$OPENJDK_TARGET_CPU_LEGACY_LIB" + CFLAGS_JDK="$CFLAGS_JDK -erroff=E_BAD_PRAGMA_PACK_VALUE" + ;; + esac +@@ -997,16 +1064,16 @@ + LDFLAGS_CXX_JDK="$LDFLAGS_CXX_JDK" + ;; + cl ) +- CCXXFLAGS_JDK="$CCXXFLAGS $CCXXFLAGS_JDK -Zi -MD -Zc:wchar_t- -W3 -wd4800 \ ++ COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS $COMMON_CCXXFLAGS_JDK -Zi -MD -Zc:wchar_t- -W3 -wd4800 \ + -D_STATIC_CPPLIB -D_DISABLE_DEPRECATE_STATIC_CPPLIB -DWIN32_LEAN_AND_MEAN \ + -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE \ + -DWIN32 -DIAL" + case $OPENJDK_TARGET_CPU in + x86 ) +- CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_X86_ -Dx86" ++ COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -D_X86_ -Dx86" + ;; + x86_64 ) +- CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_AMD64_ -Damd64" ++ COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -D_AMD64_ -Damd64" + ;; + esac + ;; +@@ -1036,7 +1103,7 @@ + ;; + esac + +- CCXXFLAGS_JDK="$CCXXFLAGS_JDK $ADD_LP64" ++ COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK $ADD_LP64" + + # The package path is used only on macosx? + PACKAGE_PATH=/opt/local +@@ -1049,27 +1116,27 @@ + # Note: -Dmacro is the same as #define macro 1 + # -Dmacro= is the same as #define macro + if test "x$OPENJDK_TARGET_OS" = xsolaris; then +- CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_LITTLE_ENDIAN=" ++ COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -D_LITTLE_ENDIAN=" + else +- CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_LITTLE_ENDIAN" ++ COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -D_LITTLE_ENDIAN" + fi + else +- CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_BIG_ENDIAN" ++ COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -D_BIG_ENDIAN" + fi + if test "x$OPENJDK_TARGET_OS" = xlinux; then +- CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DLINUX" ++ COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -DLINUX" + fi + if test "x$OPENJDK_TARGET_OS" = xwindows; then +- CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DWINDOWS" ++ COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -DWINDOWS" + fi + if test "x$OPENJDK_TARGET_OS" = xsolaris; then +- CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DSOLARIS" ++ COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -DSOLARIS" + fi + if test "x$OPENJDK_TARGET_OS" = xaix; then +- CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DAIX -DPPC64" ++ COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -DAIX -DPPC64" + fi + if test "x$OPENJDK_TARGET_OS" = xmacosx; then +- CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DMACOSX -D_ALLBSD_SOURCE -D_DARWIN_UNLIMITED_SELECT" ++ COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -DMACOSX -D_ALLBSD_SOURCE -D_DARWIN_UNLIMITED_SELECT" + # Setting these parameters makes it an error to link to macosx APIs that are + # newer than the given OS version and makes the linked binaries compatible even + # if built on a newer version of the OS. +@@ -1079,25 +1146,25 @@ + # The macro takes the version with no dots, ex: 1070 + # Let the flags variables get resolved in make for easier override on make + # command line. +- CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DMAC_OS_X_VERSION_MAX_ALLOWED=\$(subst .,,\$(MACOSX_VERSION_MIN)) -mmacosx-version-min=\$(MACOSX_VERSION_MIN)" ++ COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -DMAC_OS_X_VERSION_MAX_ALLOWED=\$(subst .,,\$(MACOSX_VERSION_MIN)) -mmacosx-version-min=\$(MACOSX_VERSION_MIN)" + LDFLAGS_JDK="$LDFLAGS_JDK -mmacosx-version-min=\$(MACOSX_VERSION_MIN)" + fi + if test "x$OPENJDK_TARGET_OS" = xbsd; then +- CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DBSD -D_ALLBSD_SOURCE" ++ COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -DBSD -D_ALLBSD_SOURCE" + fi + if test "x$DEBUG_LEVEL" = xrelease; then +- CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DNDEBUG" ++ COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -DNDEBUG" + if test "x$OPENJDK_TARGET_OS" = xsolaris; then +- CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DTRIMMED" ++ COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -DTRIMMED" + fi + else +- CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DDEBUG" ++ COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -DDEBUG" + fi + +- CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DARCH='\"$OPENJDK_TARGET_CPU_LEGACY\"' -D$OPENJDK_TARGET_CPU_LEGACY" +- CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DRELEASE='\"\$(RELEASE)\"'" ++ COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -DARCH='\"$OPENJDK_TARGET_CPU_LEGACY\"' -D$OPENJDK_TARGET_CPU_LEGACY" ++ COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -DRELEASE='\"\$(RELEASE)\"'" + +- CCXXFLAGS_JDK="$CCXXFLAGS_JDK \ ++ COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK \ + -I${JDK_OUTPUTDIR}/include \ + -I${JDK_OUTPUTDIR}/include/$OPENJDK_TARGET_OS \ + -I${JDK_TOPDIR}/src/share/javavm/export \ +@@ -1106,12 +1173,12 @@ + -I${JDK_TOPDIR}/src/$OPENJDK_TARGET_OS_API_DIR/native/common" + + # The shared libraries are compiled using the picflag. +- CFLAGS_JDKLIB="$CCXXFLAGS_JDK $CFLAGS_JDK $PICFLAG $CFLAGS_JDKLIB_EXTRA" +- CXXFLAGS_JDKLIB="$CCXXFLAGS_JDK $CXXFLAGS_JDK $PICFLAG $CXXFLAGS_JDKLIB_EXTRA " ++ CFLAGS_JDKLIB="$COMMON_CCXXFLAGS_JDK $CFLAGS_JDK $PICFLAG $CFLAGS_JDKLIB_EXTRA" ++ CXXFLAGS_JDKLIB="$COMMON_CCXXFLAGS_JDK $CXXFLAGS_JDK $PICFLAG $CXXFLAGS_JDKLIB_EXTRA " + + # Executable flags +- CFLAGS_JDKEXE="$CCXXFLAGS_JDK $CFLAGS_JDK" +- CXXFLAGS_JDKEXE="$CCXXFLAGS_JDK $CXXFLAGS_JDK" ++ CFLAGS_JDKEXE="$COMMON_CCXXFLAGS_JDK $CFLAGS_JDK" ++ CXXFLAGS_JDKEXE="$COMMON_CCXXFLAGS_JDK $CXXFLAGS_JDK" + + # Now this is odd. The JDK native libraries have to link against libjvm.so + # On 32-bit machines there is normally two distinct libjvm.so:s, client and server. +@@ -1196,13 +1263,13 @@ + ]) + + +-# TOOLCHAIN_COMPILER_CHECK_ARGUMENTS([ARGUMENT], [RUN-IF-TRUE], +-# [RUN-IF-FALSE]) ++# TOOLCHAIN_C_COMPILER_CHECK_ARGUMENTS([ARGUMENT], [RUN-IF-TRUE], ++# [RUN-IF-FALSE]) + # ------------------------------------------------------------ +-# Check that the c and c++ compilers support an argument +-AC_DEFUN([TOOLCHAIN_COMPILER_CHECK_ARGUMENTS], ++# Check that the C compiler supports an argument ++AC_DEFUN([TOOLCHAIN_C_COMPILER_CHECK_ARGUMENTS], + [ +- AC_MSG_CHECKING([if compiler supports "$1"]) ++ AC_MSG_CHECKING([if the C compiler supports "$1"]) + supports=yes + + saved_cflags="$CFLAGS" +@@ -1213,6 +1280,23 @@ + AC_LANG_POP([C]) + CFLAGS="$saved_cflags" + ++ AC_MSG_RESULT([$supports]) ++ if test "x$supports" = "xyes" ; then ++ m4_ifval([$2], [$2], [:]) ++ else ++ m4_ifval([$3], [$3], [:]) ++ fi ++]) ++ ++# TOOLCHAIN_CXX_COMPILER_CHECK_ARGUMENTS([ARGUMENT], [RUN-IF-TRUE], ++# [RUN-IF-FALSE]) ++# ------------------------------------------------------------ ++# Check that the C++ compiler supports an argument ++AC_DEFUN([TOOLCHAIN_CXX_COMPILER_CHECK_ARGUMENTS], ++[ ++ AC_MSG_CHECKING([if the C++ compiler supports "$1"]) ++ supports=yes ++ + saved_cxxflags="$CXXFLAGS" + CXXFLAGS="$CXXFLAG $1" + AC_LANG_PUSH([C++]) +@@ -1220,7 +1304,32 @@ + [supports=no]) + AC_LANG_POP([C++]) + CXXFLAGS="$saved_cxxflags" ++ ++ AC_MSG_RESULT([$supports]) ++ if test "x$supports" = "xyes" ; then ++ m4_ifval([$2], [$2], [:]) ++ else ++ m4_ifval([$3], [$3], [:]) ++ fi ++]) + ++# TOOLCHAIN_COMPILER_CHECK_ARGUMENTS([ARGUMENT], [RUN-IF-TRUE], ++# [RUN-IF-FALSE]) ++# ------------------------------------------------------------ ++# Check that the C and C++ compilers support an argument ++AC_DEFUN([TOOLCHAIN_COMPILER_CHECK_ARGUMENTS], ++[ ++ TOOLCHAIN_C_COMPILER_CHECK_ARGUMENTS([$1], ++ [C_COMP_SUPPORTS="yes"], ++ [C_COMP_SUPPORTS="no"]) ++ TOOLCHAIN_CXX_COMPILER_CHECK_ARGUMENTS([$1], ++ [CXX_COMP_SUPPORTS="yes"], ++ [CXX_COMP_SUPPORTS="no"]) ++ ++ AC_MSG_CHECKING([if both compilers support "$1"]) ++ supports=no ++ if test "x$C_COMP_SUPPORTS" = "xyes" -a "x$CXX_COMP_SUPPORTS" = "xyes"; then supports=yes; fi ++ + AC_MSG_RESULT([$supports]) + if test "x$supports" = "xyes" ; then + m4_ifval([$2], [$2], [:]) +@@ -1311,3 +1420,20 @@ + AC_SUBST(JT_HOME) + AC_SUBST(JTREGEXE) + ]) ++ ++AC_DEFUN_ONCE([TOOLCHAIN_SETUP_GCC6_COMPILER_FLAGS], ++[ ++ # These flags are required for GCC 6 builds as undefined behaviour in OpenJDK code ++ # runs afoul of the more aggressive versions of these optimisations. ++ # Notably, value range propagation now assumes that the this pointer of C++ ++ # member functions is non-null. ++ NO_DELETE_NULL_POINTER_CHECKS_CFLAG="-fno-delete-null-pointer-checks" ++ TOOLCHAIN_COMPILER_CHECK_ARGUMENTS([$NO_DELETE_NULL_POINTER_CHECKS_CFLAG -Werror], ++ [], [NO_DELETE_NULL_POINTER_CHECKS_CFLAG=""]) ++ AC_SUBST([NO_DELETE_NULL_POINTER_CHECKS_CFLAG]) ++ NO_LIFETIME_DSE_CFLAG="-fno-lifetime-dse" ++ TOOLCHAIN_COMPILER_CHECK_ARGUMENTS([$NO_LIFETIME_DSE_CFLAG -Werror], ++ [], [NO_LIFETIME_DSE_CFLAG=""]) ++ CFLAGS_JDK="${CFLAGS_JDK} ${NO_DELETE_NULL_POINTER_CHECKS_CFLAG} ${NO_LIFETIME_DSE_CFLAG}" ++ AC_SUBST([NO_LIFETIME_DSE_CFLAG]) ++]) |