Long awaited, finally update the default version of GCC in the Ports

Collection as well as the lang/gcc port from GCC 4.8.5 to GCC 4.9.4!

See http://gcc.gnu.org/gcc-4.9/changes.html for an extensive list of
changes and http://gcc.gnu.org/gcc-4.9/porting_to.html for information
on how to port to that new version (if necessary).

files/java-patch-hier required adjustments, gcc/files/patch-arm-libcpp
is not needed any longer (merged upstream), and we're also loosing the
local Stack Protector patches/backports.

PR:		196712
Tested by:	antoine (-exp runs)
Supported by:	antoine, kwm, and others
This commit is contained in:
Gerald Pfeifer
2016-11-20 09:15:19 +00:00
parent b2102a262e
commit 64bbcf8b75
12 changed files with 48 additions and 433 deletions
+2 -2
View File
@@ -38,7 +38,7 @@ FIREBIRD_DEFAULT?= 2.5
# Possible values: 3.0.0
FPC_DEFAULT?= 3.0.0
# Possible values: 4.6, 4.7, 4.8, 4.9, 5
GCC_DEFAULT?= 4.8
GCC_DEFAULT?= 4.9
# Possible values: 7, 8, 9, agpl
GHOSTSCRIPT_DEFAULT?= agpl
# Possible values: f10, c6, c6_64, c7, c7_64
@@ -134,6 +134,6 @@ TCLTK_DEFAULT?= 8.6
VARNISH_DEFAULT?= 4
# Version of lang/gcc. Do not override!
LANG_GCC_IS= 4.8
LANG_GCC_IS= 4.9
.endif
+4 -4
View File
@@ -2,13 +2,12 @@
# $FreeBSD$
PORTNAME= gcc
PORTVERSION= 4.8.5
PORTREVISION= 2
PORTVERSION= 4.9.4
CATEGORIES= lang java
MASTER_SITES= GCC/releases/gcc-${DISTVERSION}
MAINTAINER= gerald@FreeBSD.org
COMMENT= GNU Compiler Collection 4.8
COMMENT= GNU Compiler Collection 4.9
LICENSE= GPLv3 GPLv3RLE
LICENSE_COMB= multi
@@ -23,7 +22,7 @@ RUN_DEPENDS+= ${LOCALBASE}/bin/as:devel/binutils
BUILD_DEPENDS+= runtest:misc/dejagnu
.endif
CONFLICTS= gcc48*
CONFLICTS= gcc49*
CPE_VENDOR= gnu
# DISTVERSION relates to downloads, GCC_VERSION and SUFFIX to names
@@ -40,6 +39,7 @@ SSP_UNSAFE= yes
OPTIONS_DEFINE= BOOTSTRAP
OPTIONS_DEFINE_i386= JAVA
OPTIONS_DEFINE_amd64= JAVA
OPTIONS_DEFINE_powerpc64= JAVA
OPTIONS_DEFAULT_i386= JAVA
OPTIONS_DEFAULT_amd64= JAVA
OPTIONS_DEFAULT_powerpc64= BOOTSTRAP
+3 -3
View File
@@ -1,3 +1,3 @@
TIMESTAMP = 1471124229
SHA256 (gcc-4.8.5.tar.bz2) = 22fb1e7e0f68a63cee631d85b20461d1ea6bda162f03096350e38c8d427ecf23
SIZE (gcc-4.8.5.tar.bz2) = 86165587
TIMESTAMP = 1478034530
SHA256 (gcc-4.9.4.tar.bz2) = 6c11d292cd01b294f9f84c9a59c230d80e9e4a47e5c6355f046bb36d4f358092
SIZE (gcc-4.9.4.tar.bz2) = 90097606
+9 -10
View File
@@ -1,13 +1,12 @@
Index: libjava/Makefile.in
===================================================================
--- libjava/Makefile.in (revision 117734)
+++ libjava/Makefile.in (working copy)
@@ -712,7 +712,7 @@
$(am__append_2) $(am__append_3)
toolexecmainlib_DATA = libgcj.spec
--- UTC
--- libjava/Makefile.in 2013-05-26 22:33:07.000000000 +0000
+++ libjava/Makefile.in 2013-05-31 21:19:23.000000000 +0000
@@ -941,7 +941,7 @@
@BUILD_SUBLIBS_FALSE@LIBJAVA_CORE_EXTRA =
@BUILD_SUBLIBS_TRUE@LIBJAVA_CORE_EXTRA = @LIBGCJ_SUBLIB_CORE_EXTRA_DEPS@
dbexec_LTLIBRARIES = libjvm.la
-pkgconfigdir = $(libdir)/pkgconfig
-pkgconfigdir = $(toolexeclibdir)/pkgconfig
+pkgconfigdir = $(prefix)/libdata/pkgconfig
jardir = $(datadir)/java
jar_DATA = libgcj-$(gcc_version).jar libgcj-tools-$(gcc_version).jar
@JAVA_HOME_SET_FALSE@JAVA_HOME_DIR = $(prefix)
jar_DATA = libgcj-$(gcc_version).jar libgcj-tools-$(gcc_version).jar \
$(am__append_5)
-24
View File
@@ -1,24 +0,0 @@
Index: libcpp/configure
===================================================================
--- libcpp/configure (revision 218760)
+++ libcpp/configure (working copy)
@@ -7153,6 +7153,7 @@
aarch64*-*-* | \
alpha*-*-* | \
arm*-*-*eabi* | \
+ arm*-*-freebsd* | \
arm*-*-rtems* | \
arm*-*-symbianelf* | \
x86_64-*-* | \
Index: libcpp/configure.ac
===================================================================
--- libcpp/configure.ac (revision 218760)
+++ libcpp/configure.ac (working copy)
@@ -185,6 +185,7 @@
aarch64*-*-* | \
alpha*-*-* | \
arm*-*-*eabi* | \
+ arm*-*-freebsd* | \
arm*-*-rtems* | \
arm*-*-symbianelf* | \
x86_64-*-* | \
-157
View File
@@ -1,157 +0,0 @@
--- gcc/cfgexpand.c.orig
+++ gcc/cfgexpand.c
@@ -1291,6 +1291,12 @@
clear_tree_used (t);
}
+ enum {
+ SPCT_FLAG_DEFAULT = 1,
+ SPCT_FLAG_ALL = 2,
+ SPCT_FLAG_STRONG = 3
+ };
+
/* Examine TYPE and determine a bit mask of the following features. */
#define SPCT_HAS_LARGE_CHAR_ARRAY 1
@@ -1360,7 +1366,8 @@
if (bits & SPCT_HAS_SMALL_CHAR_ARRAY)
has_short_buffer = true;
- if (flag_stack_protect == 2)
+ if (flag_stack_protect == SPCT_FLAG_ALL
+ || flag_stack_protect == SPCT_FLAG_STRONG)
{
if ((bits & (SPCT_HAS_SMALL_CHAR_ARRAY | SPCT_HAS_LARGE_CHAR_ARRAY))
&& !(bits & SPCT_HAS_AGGREGATE))
@@ -1514,6 +1521,27 @@
return size;
}
+/* Helper routine to check if a record or union contains an array field. */
+
+static int
+record_or_union_type_has_array_p (const_tree tree_type)
+{
+ tree fields = TYPE_FIELDS (tree_type);
+ tree f;
+
+ for (f = fields; f; f = DECL_CHAIN (f))
+ if (TREE_CODE (f) == FIELD_DECL)
+ {
+ tree field_type = TREE_TYPE (f);
+ if (RECORD_OR_UNION_TYPE_P (field_type)
+ && record_or_union_type_has_array_p (field_type))
+ return 1;
+ if (TREE_CODE (field_type) == ARRAY_TYPE)
+ return 1;
+ }
+ return 0;
+}
+
/* Expand all variables used in the function. */
static rtx
@@ -1525,6 +1553,7 @@
struct pointer_map_t *ssa_name_decls;
unsigned i;
unsigned len;
+ bool gen_stack_protect_signal = false;
/* Compute the phase of the stack frame for this function. */
{
@@ -1575,6 +1604,24 @@
}
}
pointer_map_destroy (ssa_name_decls);
+
+ if (flag_stack_protect == SPCT_FLAG_STRONG)
+ FOR_EACH_LOCAL_DECL (cfun, i, var)
+ if (!is_global_var (var))
+ {
+ tree var_type = TREE_TYPE (var);
+ /* Examine local referenced variables that have their addresses taken,
+ contain an array, or are arrays. */
+ if (TREE_CODE (var) == VAR_DECL
+ && (TREE_CODE (var_type) == ARRAY_TYPE
+ || TREE_ADDRESSABLE (var)
+ || (RECORD_OR_UNION_TYPE_P (var_type)
+ && record_or_union_type_has_array_p (var_type))))
+ {
+ gen_stack_protect_signal = true;
+ break;
+ }
+ }
/* At this point all variables on the local_decls with TREE_USED
set are not associated with any block scope. Lay them out. */
@@ -1662,12 +1709,32 @@
dump_stack_var_partition ();
}
- /* There are several conditions under which we should create a
- stack guard: protect-all, alloca used, protected decls present. */
- if (flag_stack_protect == 2
- || (flag_stack_protect
- && (cfun->calls_alloca || has_protected_decls)))
- create_stack_guard ();
+ /* Create stack guard, if
+ a) "-fstack-protector-all" - always;
+ b) "-fstack-protector-strong" - if there are arrays, memory
+ references to local variables, alloca used, or protected decls present;
+ c) "-fstack-protector" - if alloca used, or protected decls present */
+
+ switch (flag_stack_protect)
+ {
+ case SPCT_FLAG_ALL:
+ create_stack_guard ();
+ break;
+
+ case SPCT_FLAG_STRONG:
+ if (gen_stack_protect_signal
+ || cfun->calls_alloca || has_protected_decls)
+ create_stack_guard ();
+ break;
+
+ case SPCT_FLAG_DEFAULT:
+ if (cfun->calls_alloca || has_protected_decls)
+ create_stack_guard ();
+ break;
+
+ default:
+ ;
+ }
/* Assign rtl to each variable based on these partitions. */
if (stack_vars_num > 0)
@@ -1688,7 +1755,7 @@
expand_stack_vars (stack_protect_decl_phase_1, &data);
/* Phase 2 contains other kinds of arrays. */
- if (flag_stack_protect == 2)
+ if (flag_stack_protect == SPCT_FLAG_ALL)
expand_stack_vars (stack_protect_decl_phase_2, &data);
}
--- gcc/common.opt.orig
+++ gcc/common.opt
@@ -1942,6 +1942,10 @@ fstack-protector-all
Common Report RejectNegative Var(flag_stack_protect, 2)
Use a stack protection method for every function
+fstack-protector-strong
+Common Report RejectNegative Var(flag_stack_protect, 3)
+Use a smart stack protection method for certain functions
+
fstack-usage
Common RejectNegative Var(flag_stack_usage)
Output stack usage information on a per-function basis
--- gcc/gcc.c.orig
+++ gcc/gcc.c
@@ -655,7 +655,7 @@ proper position among the other output files. */
#ifdef TARGET_LIBC_PROVIDES_SSP
#define LINK_SSP_SPEC "%{fstack-protector:}"
#else
-#define LINK_SSP_SPEC "%{fstack-protector|fstack-protector-all:-lssp_nonshared -lssp}"
+#define LINK_SSP_SPEC "%{fstack-protector|fstack-protector-strong|fstack-protector-all:-lssp_nonshared -lssp}"
#endif
#endif
@@ -1,11 +0,0 @@
--- gcc/c-family/c-cppbuiltin.c.orig
+++ gcc/c-family/c-cppbuiltin.c
@@ -888,6 +888,8 @@ c_cpp_builtins (cpp_reader *pfile)
/* Make the choice of the stack protector runtime visible to source code.
The macro names and values here were chosen for compatibility with an
earlier implementation, i.e. ProPolice. */
+ if (flag_stack_protect == 3)
+ cpp_define (pfile, "__SSP_STRONG__=3");
if (flag_stack_protect == 2)
cpp_define (pfile, "__SSP_ALL__=2");
else if (flag_stack_protect == 1)
@@ -1,39 +0,0 @@
--- gcc/doc/cpp.texi.orig
+++ gcc/doc/cpp.texi
@@ -2349,6 +2349,10 @@ use.
This macro is defined, with value 2, when @option{-fstack-protector-all} is
in use.
+@item __SSP_STRONG__
+This macro is defined, with value 3, when @option{-fstack-protector-strong} is
+in use.
+
@item __SANITIZE_ADDRESS__
This macro is defined, with value 1, when @option{-fsanitize=address} is
in use.
--- gcc/doc/invoke.texi.orig
+++ gcc/doc/invoke.texi
@@ -407,8 +407,8 @@ Objective-C and Objective-C++ Dialects}.
-fsel-sched-pipelining -fsel-sched-pipelining-outer-loops @gol
-fshrink-wrap -fsignaling-nans -fsingle-precision-constant @gol
-fsplit-ivs-in-unroller -fsplit-wide-types -fstack-protector @gol
--fstack-protector-all -fstrict-aliasing -fstrict-overflow @gol
--fthread-jumps -ftracer -ftree-bit-ccp @gol
+-fstack-protector-all -fstack-protector-strong -fstrict-aliasing @gol
+-fstrict-overflow -fthread-jumps -ftracer -ftree-bit-ccp @gol
-ftree-builtin-call-dce -ftree-ccp -ftree-ch @gol
-ftree-coalesce-inline-vars -ftree-coalesce-vars -ftree-copy-prop @gol
-ftree-copyrename -ftree-dce -ftree-dominator-opts -ftree-dse @gol
@@ -8957,6 +8957,12 @@ If a guard check fails, an error message is printed and the program exits.
@opindex fstack-protector-all
Like @option{-fstack-protector} except that all functions are protected.
+@item -fstack-protector-strong
+@opindex fstack-protector-strong
+Like @option{-fstack-protector} but includes additional functions to
+be protected --- those that have local array definitions, or have
+references to local frame addresses.
+
@item -fsection-anchors
@opindex fsection-anchors
Try to reduce the number of symbolic address calculations by using
@@ -1,176 +0,0 @@
--- /dev/null
+++ gcc/testsuite/g++.dg/fstack-protector-strong.C
@@ -0,0 +1,35 @@
+/* Test that stack protection is done on chosen functions. */
+
+/* { dg-do compile { target i?86-*-* x86_64-*-* } } */
+/* { dg-options "-O2 -fstack-protector-strong" } */
+
+class A
+{
+public:
+ A() {}
+ ~A() {}
+ void method();
+ int state;
+};
+
+/* Frame address exposed to A::method via "this". */
+int
+foo1 ()
+{
+ A a;
+ a.method ();
+ return a.state;
+}
+
+/* Possible destroying foo2's stack via &a. */
+int
+global_func (A& a);
+
+/* Frame address exposed to global_func. */
+int foo2 ()
+{
+ A a;
+ return global_func (a);
+}
+
+/* { dg-final { scan-assembler-times "stack_chk_fail" 2 } } */
--- /dev/null
+++ gcc/testsuite/gcc.dg/fstack-protector-strong.c
@@ -0,0 +1,135 @@
+/* Test that stack protection is done on chosen functions. */
+
+/* { dg-do compile { target i?86-*-* x86_64-*-* } } */
+/* { dg-options "-O2 -fstack-protector-strong" } */
+
+#include<string.h>
+#include<stdlib.h>
+
+extern int g0;
+extern int* pg0;
+int
+goo (int *);
+int
+hoo (int);
+
+/* Function frame address escaped function call. */
+int
+foo1 ()
+{
+ int i;
+ return goo (&i);
+}
+
+struct ArrayStruct
+{
+ int a;
+ int array[10];
+};
+
+struct AA
+{
+ int b;
+ struct ArrayStruct as;
+};
+
+/* Function frame contains array. */
+int
+foo2 ()
+{
+ struct AA aa;
+ int i;
+ for (i = 0; i < 10; ++i)
+ {
+ aa.as.array[i] = i * (i-1) + i / 2;
+ }
+ return aa.as.array[5];
+}
+
+/* Address computation based on a function frame address. */
+int
+foo3 ()
+{
+ int a;
+ int *p;
+ p = &a + 5;
+ return goo (p);
+}
+
+/* Address cast based on a function frame address. */
+int
+foo4 ()
+{
+ int a;
+ return goo (g0 << 2 ? (int *)(3 * (long)(void *)(&a)) : 0);
+}
+
+/* Address cast based on a local array. */
+int
+foo5 ()
+{
+ short array[10];
+ return goo ((int *)(array + 5));
+}
+
+struct BB
+{
+ int one;
+ int two;
+ int three;
+};
+
+/* Address computaton based on a function frame address.*/
+int
+foo6 ()
+{
+ struct BB bb;
+ return goo (&bb.one + sizeof(int));
+}
+
+/* Function frame address escaped via global variable. */
+int
+foo7 ()
+{
+ int a;
+ pg0 = &a;
+ goo (pg0);
+ return *pg0;
+}
+
+/* Check that this covers -fstack-protector. */
+int
+foo8 ()
+{
+ char base[100];
+ memcpy ((void *)base, (const void *)pg0, 105);
+ return (int)(base[32]);
+}
+
+/* Check that this covers -fstack-protector. */
+int
+foo9 ()
+{
+ char* p = alloca (100);
+ return goo ((int *)(p + 50));
+}
+
+int
+global2 (struct BB* pbb);
+
+/* Address taken on struct. */
+int
+foo10 ()
+{
+ struct BB bb;
+ int i;
+ bb.one = global2 (&bb);
+ for (i = 0; i < 10; ++i)
+ {
+ bb.two = bb.one + bb.two;
+ bb.three = bb.one + bb.two + bb.three;
+ }
+ return bb.three;
+}
+
+/* { dg-final { scan-assembler-times "stack_chk_fail" 10 } } */
+25
View File
@@ -0,0 +1,25 @@
At the moment the -m16 option only passes the "--32" parameter to the
assembler on glibc OSes, while on other OSes the assembler is called
without any specific flag. This is wrong and causes the assembler to
fail. Fix it by adding support for the -m16 option to x86-64.h.
2016-07-06 Roger Pau Monné <roger.pau@citrix.com>
* x86-64.h: append --32 to the assembler options when -m16 is used
even on non-glibc OSes.
This should be backported to all stable branches up to 4.9 (when -m16 was
introduced).
--- UTC
--- gcc/config/i386/x86-64.h
+++ gcc/config/i386/x86-64.h
@@ -49,7 +49,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
#define WCHAR_TYPE_SIZE 32
#undef ASM_SPEC
-#define ASM_SPEC "%{m32:--32} %{m64:--64} %{mx32:--x32}"
+#define ASM_SPEC "%{m16|m32:--32} %{m64:--64} %{mx32:--x32}"
#undef ASM_OUTPUT_ALIGNED_BSS
#define ASM_OUTPUT_ALIGNED_BSS(FILE, DECL, NAME, SIZE, ALIGN) \
+4 -6
View File
@@ -1,11 +1,9 @@
GCC, the GNU Compiler Collection, supports a number of languages. This
port installs the C, C++, Fortran and Java front ends as gcc48, g++48,
gfortran48, and gcj48, respectively.
port installs the C, C++, Fortran and Java front ends as gcc49, g++49,
gfortran49, and gcj49, respectively.
It can be used interchangibly with the lang/gcc48 port which tracks
weekly upstream snapshots whereas this port will be updated less
frequently, mostly in sync with upstream releases, and will move to
lang/gcc49 and later over time.
It can be used interchangibly with the lang/gcc49 port, which tracks
GCC 4.9 releases, and will move to lang/gcc5 and later over time.
WWW: http://gcc.gnu.org/
+1 -1
View File
@@ -50,7 +50,7 @@ share/gcc-%%GCC_VERSION%%/python/libstdcxx/v6/printers.py
%%JAVA%%bin/gtnameserv%%SUFFIX%%
%%JAVA%%bin/jcf-dump%%SUFFIX%%
%%JAVA%%bin/jv-convert%%SUFFIX%%
%%JAVA%%libdata/pkgconfig/libgcj-4.8.pc
%%JAVA%%libdata/pkgconfig/libgcj-4.9.pc
%%JAVA%%man/man1/aot-compile%%SUFFIX%%.1.gz
%%JAVA%%man/man1/gappletviewer%%SUFFIX%%.1.gz
%%JAVA%%man/man1/gc-analyze%%SUFFIX%%.1.gz