From 57a75502dd1e88aaa949c0e4c684c10783438f6b Mon Sep 17 00:00:00 2001 From: Eric Hameleers Date: Sun, 9 Jul 2017 21:52:00 +0200 Subject: development/gcc5: Added (gcc version 5 C, C++ and Java compilers). Signed-off-by: Eric Hameleers Signed-off-by: Matteo Bernardini --- development/gcc5/README | 41 ++ development/gcc5/c89.sh | 11 + development/gcc5/c99.sh | 11 + development/gcc5/ecj.sh | 5 + .../1000-fastjar-0.97-segfault.patch | 29 ++ .../fastjar-patches/1001-fastjar-0.97-len1.patch | 16 + .../1002-fastjar-0.97-filename0.patch | 14 + .../1003-fastjar-CVE-2010-0831.patch | 102 ++++ .../gcc5/fastjar-patches/1004-fastjar-man.patch | 27 + development/gcc5/gcc5.SlackBuild | 548 +++++++++++++++++++++ development/gcc5/gcc5.info | 17 + development/gcc5/libgcj-5.pc | 10 + development/gcc5/patches/gcc-no_fixincludes.diff | 27 + development/gcc5/patches/gcc.66782.diff | 124 +++++ development/gcc5/patches/gcc.69140.diff | 13 + development/gcc5/profile.d/gcc5.csh | 7 + development/gcc5/profile.d/gcc5.sh | 7 + development/gcc5/slack-desc.gcc5 | 19 + 18 files changed, 1028 insertions(+) create mode 100644 development/gcc5/README create mode 100644 development/gcc5/c89.sh create mode 100644 development/gcc5/c99.sh create mode 100644 development/gcc5/ecj.sh create mode 100644 development/gcc5/fastjar-patches/1000-fastjar-0.97-segfault.patch create mode 100644 development/gcc5/fastjar-patches/1001-fastjar-0.97-len1.patch create mode 100644 development/gcc5/fastjar-patches/1002-fastjar-0.97-filename0.patch create mode 100644 development/gcc5/fastjar-patches/1003-fastjar-CVE-2010-0831.patch create mode 100644 development/gcc5/fastjar-patches/1004-fastjar-man.patch create mode 100644 development/gcc5/gcc5.SlackBuild create mode 100644 development/gcc5/gcc5.info create mode 100644 development/gcc5/libgcj-5.pc create mode 100644 development/gcc5/patches/gcc-no_fixincludes.diff create mode 100644 development/gcc5/patches/gcc.66782.diff create mode 100644 development/gcc5/patches/gcc.69140.diff create mode 100644 development/gcc5/profile.d/gcc5.csh create mode 100644 development/gcc5/profile.d/gcc5.sh create mode 100644 development/gcc5/slack-desc.gcc5 (limited to 'development') diff --git a/development/gcc5/README b/development/gcc5/README new file mode 100644 index 000000000000..c1e912ed8628 --- /dev/null +++ b/development/gcc5/README @@ -0,0 +1,41 @@ +This gcc5 package can be installed alongside Slackware's gcc-7 packages. +These version 7 compilers can sometimes be quite a bit more strict about +what they accept as valid code. As a consequence, you will regularly run +into compilation issues with software. Not just the software made with +the scripts on slackbuilds.org, but also some of the software in +the Slackware core distribution requires patches in order to get them +to compile. + +Still having the gcc version 5 compilers can sometimes be a lifesaver. +Particulars of the gcc5 package: +- The gcc5 binaries were given a suffix '-5' to make them stand apart + from Slackware's default compilers. +- The gcc5 package only contains the C, C++ and Java language compilers. +- One all-encompassing package is built by the SlackBuild script. +- Profile scripts are added to /etc/profile.d/. You can 'source' + the profile script to prefer the gcc-5 compilers over gcc-7. +- On 64bit Slackware, the gcc5.SlackBuild will detect an existing gcc + multilib compiler and will then build a multilib capable gcc5. + If you run pure 64bit Slackware, then a pure 64bit gcc5 package is built. + +How to use these gcc5 compilers instead of Slackware's default C and C++? +Simple: +In your console or terminal, you 'source' the provided profile script, +like this (a c-shell compatible script is available as well): + + source /etc/profile.d/gcc5.sh + +The command 'source' is equivalent to the dot command ' . '. +The profile script will (re-)define the common variables that are used +by make and other programs to determine which binary to run as the compiler: + +export CC=gcc-5 +export CPP=cpp-5 +export CXX=g++-5 +export AR=gcc-ar-5 +export NM=gcc-nm-5 +export RANLIB=gcc-ranlib-5 + +Nothing else needs to be done after sourcing the profile script. +All you do next is run your compile job as usual in that same console. +Your program will be compiled with the binaries provided by the gcc5 package. diff --git a/development/gcc5/c89.sh b/development/gcc5/c89.sh new file mode 100644 index 000000000000..424b1e1669bb --- /dev/null +++ b/development/gcc5/c89.sh @@ -0,0 +1,11 @@ +#!/bin/sh +fl="-std=c89" +CC=${CC:-"gcc"} +for opt; do + case "$opt" in + -ansi|-std=c89|-std=iso9899:1990) fl="";; + -std=*) echo "`basename $0` called with non ANSI/ISO C option $opt" >&2 + exit 1;; + esac +done +exec $CC $fl ${1+"$@"} diff --git a/development/gcc5/c99.sh b/development/gcc5/c99.sh new file mode 100644 index 000000000000..c33636937c2d --- /dev/null +++ b/development/gcc5/c99.sh @@ -0,0 +1,11 @@ +#!/bin/sh +fl="-std=c99" +CC=${CC:-"gcc"} +for opt; do + case "$opt" in + -std=c99|-std=iso9899:1999) fl="";; + -std=*) echo "`basename $0` called with non ISO C99 option $opt" >&2 + exit 1;; + esac +done +exec $CC $fl ${1+"$@"} diff --git a/development/gcc5/ecj.sh b/development/gcc5/ecj.sh new file mode 100644 index 000000000000..1d8b797931e1 --- /dev/null +++ b/development/gcc5/ecj.sh @@ -0,0 +1,5 @@ +#!/bin/sh + +CLASSPATH=@JAVADIR@/ecj.jar${CLASSPATH:+:}$CLASSPATH \ + java org.eclipse.jdt.internal.compiler.batch.Main "$@" + diff --git a/development/gcc5/fastjar-patches/1000-fastjar-0.97-segfault.patch b/development/gcc5/fastjar-patches/1000-fastjar-0.97-segfault.patch new file mode 100644 index 000000000000..ab6262407a1a --- /dev/null +++ b/development/gcc5/fastjar-patches/1000-fastjar-0.97-segfault.patch @@ -0,0 +1,29 @@ +2009-01-14 Jakub Jelinek + + * jartool.c (make_manifest): Initialize current_time before + calling unix2dostime on it. + +--- fastjar-0.97/jartool.c.jj 2008-10-15 18:35:37.000000000 +0200 ++++ fastjar-0.97/jartool.c 2009-01-14 15:40:50.000000000 +0100 +@@ -820,6 +820,10 @@ int make_manifest(int jfd, const char *m + int mod_time; /* file modification time */ + struct zipentry *ze; + ++ current_time = time(NULL); ++ if(current_time == (time_t)-1) ++ exit_on_error("time"); ++ + mod_time = unix2dostime(¤t_time); + + /* If we are creating a new manifest, create a META-INF directory entry */ +@@ -828,10 +832,6 @@ int make_manifest(int jfd, const char *m + + memset((file_header + 12), '\0', 16); /*clear mod time, crc, size fields*/ + +- current_time = time(NULL); +- if(current_time == (time_t)-1) +- exit_on_error("time"); +- + PACK_UB2(file_header, LOC_EXTRA, 0); + PACK_UB2(file_header, LOC_COMP, 0); + PACK_UB2(file_header, LOC_FNLEN, nlen); diff --git a/development/gcc5/fastjar-patches/1001-fastjar-0.97-len1.patch b/development/gcc5/fastjar-patches/1001-fastjar-0.97-len1.patch new file mode 100644 index 000000000000..722351d3341d --- /dev/null +++ b/development/gcc5/fastjar-patches/1001-fastjar-0.97-len1.patch @@ -0,0 +1,16 @@ +2009-12-21 Chris Ball + + * jartool.c (add_file_to_jar): Test write return value against -1 + instead of 1. + +--- fastjar-0.97/jartool.c.jj 2008-10-15 12:35:37.000000000 -0400 ++++ fastjar-0.97/jartool.c 2009-12-22 06:48:09.309530000 -0500 +@@ -1257,7 +1257,7 @@ int add_file_to_jar(int jfd, int ffd, co + exit_on_error("write"); + + /* write the file name to the zip file */ +- if (1 == write(jfd, fname, file_name_length)) ++ if (-1 == write(jfd, fname, file_name_length)) + exit_on_error("write"); + + if(verbose){ diff --git a/development/gcc5/fastjar-patches/1002-fastjar-0.97-filename0.patch b/development/gcc5/fastjar-patches/1002-fastjar-0.97-filename0.patch new file mode 100644 index 000000000000..34a02a74f37c --- /dev/null +++ b/development/gcc5/fastjar-patches/1002-fastjar-0.97-filename0.patch @@ -0,0 +1,14 @@ +2010-03-01 Richard Guenther + + * jartool.c (read_entries): Properly zero-terminate filename. + +--- fastjar-0.97/jartool.c 6 Sep 2009 22:16:00 -0000 1.59 ++++ fastjar-0.97/jartool.c 1 Mar 2010 15:38:43 -0000 1.60 +@@ -790,6 +790,7 @@ int read_entries (int fd) + progname, jarfile); + return 1; + } ++ ze->filename[len] = '\0'; + len = UNPACK_UB4(header, CEN_EFLEN); + len += UNPACK_UB4(header, CEN_COMLEN); + if (lseek (fd, len, SEEK_CUR) == -1) diff --git a/development/gcc5/fastjar-patches/1003-fastjar-CVE-2010-0831.patch b/development/gcc5/fastjar-patches/1003-fastjar-CVE-2010-0831.patch new file mode 100644 index 000000000000..2c6e23c76c92 --- /dev/null +++ b/development/gcc5/fastjar-patches/1003-fastjar-CVE-2010-0831.patch @@ -0,0 +1,102 @@ +2010-06-10 Jakub Jelinek + Dan Rosenberg + + * jartool.c (extract_jar): Fix up checks for traversal to parent + directories, disallow absolute paths, make the code slightly more + efficient. + +--- fastjar-0.97/jartool.c.jj 2009-09-07 00:10:47.000000000 +0200 ++++ fastjar-0.97/jartool.c 2010-06-08 20:00:29.000000000 +0200 +@@ -1730,7 +1730,17 @@ int extract_jar(int fd, const char **fil + struct stat sbuf; + int depth = 0; + +- tmp_buff = malloc(sizeof(char) * strlen((const char *)filename)); ++ if(*filename == '/'){ ++ fprintf(stderr, "Absolute path names are not allowed.\n"); ++ exit(EXIT_FAILURE); ++ } ++ ++ tmp_buff = malloc(strlen((const char *)filename)); ++ ++ if(tmp_buff == NULL) { ++ fprintf(stderr, "Out of memory.\n"); ++ exit(EXIT_FAILURE); ++ } + + for(;;){ + const ub1 *idx = (const unsigned char *)strchr((const char *)start, '/'); +@@ -1738,25 +1748,28 @@ int extract_jar(int fd, const char **fil + if(idx == NULL) + break; + else if(idx == start){ ++ tmp_buff[idx - filename] = '/'; + start++; + continue; + } +- start = idx + 1; + +- strncpy(tmp_buff, (const char *)filename, (idx - filename)); +- tmp_buff[(idx - filename)] = '\0'; ++ memcpy(tmp_buff + (start - filename), (const char *)start, (idx - start)); ++ tmp_buff[idx - filename] = '\0'; + + #ifdef DEBUG + printf("checking the existance of %s\n", tmp_buff); + #endif +- if(strcmp(tmp_buff, "..") == 0){ ++ if(idx - start == 2 && memcmp(start, "..", 2) == 0){ + --depth; + if (depth < 0){ + fprintf(stderr, "Traversal to parent directories during unpacking!\n"); + exit(EXIT_FAILURE); + } +- } else if (strcmp(tmp_buff, ".") != 0) ++ } else if (idx - start != 1 || *start != '.') + ++depth; ++ ++ start = idx + 1; ++ + if(stat(tmp_buff, &sbuf) < 0){ + if(errno != ENOENT) + exit_on_error("stat"); +@@ -1765,6 +1778,7 @@ int extract_jar(int fd, const char **fil + #ifdef DEBUG + printf("Directory exists\n"); + #endif ++ tmp_buff[idx - filename] = '/'; + continue; + }else { + fprintf(stderr, "Hmmm.. %s exists but isn't a directory!\n", +@@ -1781,10 +1795,11 @@ int extract_jar(int fd, const char **fil + if(verbose && handle) + printf("%10s: %s/\n", "created", tmp_buff); + ++ tmp_buff[idx - filename] = '/'; + } + + /* only a directory */ +- if(strlen((const char *)start) == 0) ++ if(*start == '\0') + dir = TRUE; + + #ifdef DEBUG +@@ -1792,7 +1807,7 @@ int extract_jar(int fd, const char **fil + #endif + + /* If the entry was just a directory, don't write to file, etc */ +- if(strlen((const char *)start) == 0) ++ if(*start == '\0') + f_fd = -1; + + free(tmp_buff); +@@ -1876,7 +1891,8 @@ int extract_jar(int fd, const char **fil + exit(EXIT_FAILURE); + } + +- close(f_fd); ++ if (f_fd != -1) ++ close(f_fd); + + if(verbose && dir == FALSE && handle) + printf("%10s: %s\n", diff --git a/development/gcc5/fastjar-patches/1004-fastjar-man.patch b/development/gcc5/fastjar-patches/1004-fastjar-man.patch new file mode 100644 index 000000000000..34bf704dbbc2 --- /dev/null +++ b/development/gcc5/fastjar-patches/1004-fastjar-man.patch @@ -0,0 +1,27 @@ +2010-03-24 Jan Kratochvil + + * Makefile.am (POD2MAN): Provide --date from ChangeLog. + * Makefile.in: Regenerate. + +--- fastjar-0.97/Makefile.am.jj 2008-10-16 04:24:55.000000000 -0400 ++++ fastjar-0.97/Makefile.am 2010-06-21 09:29:41.021398000 -0400 +@@ -39,7 +39,7 @@ EXTRA_DIST = \ + texi2pod.pl + + TEXI2POD = perl $(srcdir)/texi2pod.pl +-POD2MAN = pod2man --center="GNU" --release=@VERSION@ ++POD2MAN = pod2man --center="GNU" --release=@VERSION@ --date=$(shell sed -n '1s/ .*//p' <$(srcdir)/ChangeLog) + + .pod.1: + -($(POD2MAN) --section=1 $< > $(@).T$$$$ && \ +--- fastjar-0.97/Makefile.in.jj 2008-10-16 04:15:16.000000000 -0400 ++++ fastjar-0.97/Makefile.in 2010-06-21 09:30:15.882810000 -0400 +@@ -515,7 +515,7 @@ EXTRA_DIST = \ + texi2pod.pl + + TEXI2POD = perl $(srcdir)/texi2pod.pl +-POD2MAN = pod2man --center="GNU" --release=@VERSION@ ++POD2MAN = pod2man --center="GNU" --release=@VERSION@ --date=$(shell sed -n '1s/ .*//p' <$(srcdir)/ChangeLog) + + #SPLINT_FLAGS=-I . -I $(srcdir)/lib -I $(srcdir) -DHAVE_CONFIG_H +posixlib +weak + SPLINT_FLAGS = -I . -I $(srcdir)/lib -I $(srcdir) -DHAVE_CONFIG_H -DPRIx32= -warnposix +weak diff --git a/development/gcc5/gcc5.SlackBuild b/development/gcc5/gcc5.SlackBuild new file mode 100644 index 000000000000..9e0786442dec --- /dev/null +++ b/development/gcc5/gcc5.SlackBuild @@ -0,0 +1,548 @@ +#!/bin/sh +# GCC package build script (written by volkerdi@slackware.com) +# +# Copyright 2003, 2004 Slackware Linux, Inc., Concord, California, USA +# Copyright 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016 Patrick J. Volkerding, Sebeka, MN, USA +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED +# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# + +# Modified 2011 by Eric Hameleers for OpenJDK. +# Modified 2017 by Eric Hameleers for gcc5. + +# Some notes, Fri May 16 12:31:32 PDT 2003: +# +# Why i486 and not i386? Because the shared C++ libraries in gcc-3.2.x will +# require 486 opcodes even when a 386 target is used (so we already weren't +# compatible with the i386 for Slackware 9.0, didn't notice, and nobody +# complained :-). gcc-3.3 fixes this issue and allows you to build a 386 +# compiler, but the fix is done in a way that produces binaries that are not +# compatible with gcc-3.2.x compiled binaries. To retain compatibility with +# Slackware 9.0, we'll have to use i486 (or better) as the compiler target +# for gcc-3.3. +# +# It's time to say goodbye to i386 support in Slackware. I've surveyed 386 +# usage online, and the most common thing I see people say when someone asks +# about running Linux on a 386 is to "run Slackware", but then they also +# usually go on to say "be sure to get an OLD version, like 4.0, before glibc, +# because it'll be more efficient." Now, if that's the general advice, then +# I see no reason to continue 386 support in the latest Slackware (and indeed +# it's no longer easily possible). + +# Some more notes, Mon Aug 3 19:49:51 UTC 2015: +# +# Changing to -march=i586 for 32-bit x86 as several things (Mesa being one of +# them) no longer work if constrained to -march=i486. We're not going to use +# -march=i686 since the only additional opcode is CMOV, which is actually less +# efficient on modern CPUs running in 32-bit mode than the alternate i586 +# instructions. No need to throw i586 CPUs under the bus (yet). + +PKGNAM=gcc5 +VERSION=${VERSION:-5.4.0} +MAJVER=$(echo ${VERSION} |cut -d. -f1) +BUILD=${BUILD:-1} +TAG=${TAG:-SBo} + +# What do we want to build +LANGS=${LANGS:-'c,c++,java'} + +echo "Building these compilers: $LANGS"; sleep 5 + +# Automatically determine the architecture we're building on: +if [ -z "$ARCH" ]; then + case "$(uname -m)" in + i?86) ARCH=i586 ;; + arm*) readelf /usr/bin/file -A | egrep -q "Tag_CPU.*[4,5]" && ARCH=arm || ARCH=armv7hl ;; + # Unless $ARCH is already set, use uname -m for all other archs: + *) ARCH=$(uname -m) ;; + esac + export ARCH +fi + +if [ "$ARCH" = "i386" ]; then + SLKCFLAGS="-O2 -march=i386 -mcpu=i686" + SLKLDFLAGS="" + LIBDIRSUFFIX="" + LIB_ARCH=i386 +elif [ "$ARCH" = "i486" ]; then + SLKCFLAGS="-O2 -march=i486 -mtune=i686" + SLKLDFLAGS="" + LIBDIRSUFFIX="" + LIB_ARCH=i386 +elif [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" + SLKLDFLAGS="" + LIBDIRSUFFIX="" + LIB_ARCH=i386 +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686" + SLKLDFLAGS="" + LIBDIRSUFFIX="" + LIB_ARCH=i386 +elif [ "$ARCH" = "s390" ]; then + SLKCFLAGS="-O2" + SLKLDFLAGS="" + LIBDIRSUFFIX="" + LIB_ARCH=s390 +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-O2 -fPIC" + SLKLDFLAGS="-L/usr/lib64" + LIBDIRSUFFIX="64" + LIB_ARCH=amd64 +elif [ "$ARCH" = "armv7hl" ]; then + SLKCFLAGS="-O3 -march=armv7-a -mfpu=vfpv3-d16" + SLKLDFLAGS="" + LIBDIRSUFFIX="" + LIB_ARCH=armv7hl +else + SLKCFLAGS="-O2" + SLKLDFLAGS="" + LIBDIRSUFFIX="" + LIB_ARCH=$ARCH +fi + +case "$ARCH" in + arm*) TARGET=$ARCH-slackware-linux-gnueabi ;; + *) TARGET=$ARCH-slackware-linux ;; +esac + +if [ "$ARCH" = "x86_64" -a -f /usr/lib/libc.a ]; then + # If we find a 32bit C library on 64bit Slackware, assume multilib: + GCC_ARCHOPTS="--enable-multilib" + MULTILIB="YES" +else + GCC_ARCHOPTS="--with-arch=$ARCH" + MULTILIB="NO" +fi + +CWD=$(pwd) +# Temporary build location. This should *NOT* be a directory +# path a non-root user could create later... +TMP=${TMP:-"/gcc-$(mcookie)"} + +# Where we dump the package: +OUTPUT=${OUTPUT:-/tmp} + +# This is the main DESTDIR target: +PKG1=$TMP/package-gcc + +# Clear the build locations: +if [ -d $TMP ]; then + rm -rf $TMP +fi +mkdir -p $PKG1/usr/doc/gcc-$VERSION + +# Insert package description: +mkdir -p $PKG1/install +if [ ${MULTILIB} = "YES" ]; then + SLDESC=" The compilers support multilib." +else + SLDESC="" +fi +cat $CWD/slack-desc.gcc5 | sed -e "s/@MULTILIB@/${SLDESC}/" \ + > $PKG1/install/slack-desc + +# Unpack the gcc sources: +cd $TMP +tar xvf $CWD/gcc-$VERSION.tar.?z* + +( cd gcc-$VERSION/gcc + cat $CWD/patches/gcc.66782.diff | patch -p0 --verbose || exit 1 +) || exit 1 + +# Copy ecj.jar into the TLD of the source. Needed for java compiler. +# This can be retrieved from ftp://sourceware.org/pub/java +cp $CWD/ecj-4.9.jar gcc-$VERSION/ecj.jar + +# Use an antlr runtime to compile javadoc. +# The runtime can be obtained from: +#https://oss.sonatype.org/content/repositories/releases/org/antlr/antlr-runtime/ +ANTLJAR=$(echo $CWD/antlr-*.jar | tail -1) + +# install docs +( cd gcc-$VERSION + # Smite the fixincludes: + cat $CWD/patches/gcc-no_fixincludes.diff | patch -p1 --verbose --backup --suffix=.orig || exit 1 + # Fix perms/owners + chown -R root:root . + find . -perm 777 -exec chmod 755 {} \; + find . -perm 775 -exec chmod 755 {} \; + find . -perm 754 -exec chmod 755 {} \; + find . -perm 664 -exec chmod 644 {} \; + mkdir -p $PKG1/usr/doc/gcc-$VERSION + cp -a \ + COPYING* ChangeLog* FAQ INSTALL \ + LAST_UPDATED MAINTAINERS NEWS \ + README* *.html \ + $PKG1/usr/doc/gcc-$VERSION + + # We will keep part of these, but they are really big... + if [ -r ChangeLog ]; then + DOCSDIR=$(echo $PKG1/usr/doc/gcc-$VERSION) + cat ChangeLog | head -n 1000 > $DOCSDIR/ChangeLog + touch -r ChangeLog $DOCSDIR/ChangeLog + fi + if [ -r NEWS ]; then + DOCSDIR=$(echo $PKG1/usr/doc/gcc-$VERSION) + cat NEWS | head -n 1000 > $DOCSDIR/NEWS + touch -r NEWS $DOCSDIR/NEWS + fi + + mkdir -p $PKG1/usr/doc/gcc-${VERSION}/gcc + ( cd gcc + cp -a \ + ABOUT* COPYING* DATESTAMP DEV-PHASE LANG* ONEWS README* SERVICE \ + $PKG1/usr/doc/gcc-$VERSION/gcc + + mkdir -p $PKG1/usr/doc/gcc-${VERSION}/gcc/java + ( cd java + cp -a \ + ChangeLog.tree-ssa \ + $PKG1/usr/doc/gcc-${VERSION}/gcc/java + if [ -r ChangeLog ]; then + cat ChangeLog | head -n 1000 > $PKG1/usr/doc/gcc-${VERSION}/gcc/java/ChangeLog + touch -r ChangeLog $PKG1/usr/doc/gcc-${VERSION}/gcc/java/ChangeLog + fi + ) + + ) || exit 1 + + mkdir -p $PKG1/usr/doc/gcc-${VERSION}/libffi + ( cd libffi + cp -a \ + ChangeLog.libgcj ChangeLog.v1 \ + LICENSE* README* \ + $PKG1/usr/doc/gcc-${VERSION}/libffi + if [ -r ChangeLog ]; then + cat ChangeLog | head -n 1000 > $PKG1/usr/doc/gcc-${VERSION}/libffi/ChangeLog + touch -r ChangeLog $PKG1/usr/doc/gcc-${VERSION}/libffi/ChangeLog + fi + ) + + mkdir -p $PKG1/usr/doc/gcc-${VERSION}/libjava + ( cd libjava + cp -a \ + COPYING* HACKING LIBGCJ_LICENSE \ + NEWS README* THANKS \ + $PKG1/usr/doc/gcc-${VERSION}/libjava + if [ -r ChangeLog ]; then + cat ChangeLog | head -n 1000 > $PKG1/usr/doc/gcc-${VERSION}/libjava/ChangeLog + touch -r ChangeLog $PKG1/usr/doc/gcc-${VERSION}/libjava/ChangeLog + fi + ) + + mkdir -p $PKG1/usr/doc/gcc-${VERSION}/libmudflap + ( cd libmudflap + if [ -r ChangeLog ]; then + cat ChangeLog | head -n 1000 > $PKG1/usr/doc/gcc-${VERSION}/libmudflap/ChangeLog + touch -r ChangeLog $PKG1/usr/doc/gcc-${VERSION}/libmudflap/ChangeLog + fi + ) + + mkdir -p $PKG1/usr/doc/gcc-${VERSION}/libgomp + ( cd libgomp + if [ -r ChangeLog ]; then + cat ChangeLog | head -n 1000 > $PKG1/usr/doc/gcc-${VERSION}/libgomp/ChangeLog + touch -r ChangeLog $PKG1/usr/doc/gcc-${VERSION}/libgomp/ChangeLog + fi + ) + + mkdir -p $PKG1/usr/doc/gcc-${VERSION}/libstdc++-v3 + ( cd libstdc++-v3 + cp -a \ + README* \ + doc/html/faq.html \ + $PKG1/usr/doc/gcc-${VERSION}/libstdc++-v3 + if [ -r ChangeLog ]; then + cat ChangeLog | head -n 1000 > $PKG1/usr/doc/gcc-${VERSION}/libstdc++-v3/ChangeLog + touch -r ChangeLog $PKG1/usr/doc/gcc-${VERSION}/libstdc++-v3/ChangeLog + fi + ) +) + +# Add fastjar to the gcc5 package: +( cd $TMP + FASTJARVER=$(echo $CWD/fastjar-*.tar.xz | rev | cut -f 3- -d . | cut -f 1 -d - | rev) + echo + echo "Building fastjar-$FASTJARVER first" + echo + rm -rf fastjar-$FASTJARVER + tar xvf $CWD/fastjar-$FASTJARVER.tar.xz || exit 1 + cd fastjar-$FASTJARVER || exit 1 + chown -R root:root . + find . \ + \( -perm 777 -o -perm 775 -o -perm 711 -o -perm 555 -o -perm 511 \) \ + -exec chmod 755 {} \; -o \ + \( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \ + -exec chmod 644 {} \; + for patch in $CWD/fastjar-patches/* ; do + cat $patch | patch -p1 --verbose || exit 1 + done + LDFLAGS="$SLKLDFLAGS" \ + CFLAGS="$SLKCFLAGS" \ + CXXFLAGS="$SLKCFLAGS" \ + ./configure \ + --prefix=/usr \ + --libdir=/usr/lib$LIBDIRSUFFIX \ + --mandir=/usr/man \ + --infodir=/usr/info \ + --build=$TARGET + make $NUMJOBS || exit 1 + make install DESTDIR=$PKG1 || exit 1 + mkdir -p $PKG1/usr/doc/fastjar-$FASTJARVER + cp -a \ + AUTHORS CHANGES COPYING* INSTALL NEWS README* TODO \ + $PKG1/usr/doc/fastjar-$FASTJARVER + # If there's a ChangeLog, installing at least part of the recent history + # is useful, but don't let it get totally out of control: + if [ -r ChangeLog ]; then + DOCSDIR=$(echo $PKG1/usr/doc/fastjar-$FASTJARVER) + cat ChangeLog | head -n 1000 > $DOCSDIR/ChangeLog + touch -r ChangeLog $DOCSDIR/ChangeLog + fi + find $PKG1 | xargs file | grep -e "executable" -e "shared object" | grep ELF \ + | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null + # Compress and if needed symlink the man pages: + if [ -d $PKG1/usr/man ]; then + ( cd $PKG1/usr/man + for manpagedir in $(find . -type d -name "man*") ; do + ( cd $manpagedir + for eachpage in $( find . -type l -maxdepth 1) ; do + ln -s $( readlink $eachpage ).gz $eachpage.gz + rm $eachpage + done + gzip -9 *.? + ) + done + ) + fi + # Compress info files, if any: + if [ -d $PKG1/usr/info ]; then + ( cd $PKG1/usr/info + rm -f dir + gzip -9 * + ) + fi + echo +) || exit 1 + +# build gcc +( mkdir gcc.build.lnx; + cd gcc.build.lnx; + + # I think it's incorrect to include this option (as it'll end up set + # to i586 on x86 platforms), and we want to tune the binary structure + # for i686, as that's where almost all of the optimization speedups + # are to be found. + # Correct me if my take on this is wrong. + # --with-cpu=$ARCH + + # NOTE: For Slackware 15.0, look into removing --with-default-libstdcxx-abi=gcc4-compatible, + # which will then require rebuilding all C++ libraries. That is, if there's any benefit. + + LDFLAGS="$SLKLDFLAGS" \ + CFLAGS="$SLKCFLAGS" \ + CXXFLAGS="$SLKCFLAGS" \ + ../gcc-$VERSION/configure \ + --prefix=/usr \ + --libdir=/usr/lib$LIBDIRSUFFIX \ + --mandir=/usr/man \ + --infodir=/usr/info \ + --enable-shared \ + --enable-bootstrap \ + --enable-languages=${LANGS} \ + --enable-threads=posix \ + --enable-checking=release \ + --enable-objc-gc \ + --with-system-zlib \ + --with-python-dir=/lib$LIBDIRSUFFIX/python2.7/site-packages \ + --enable-libstdcxx-dual-abi \ + --with-default-libstdcxx-abi=gcc4-compatible \ + --disable-libunwind-exceptions \ + --enable-__cxa_atexit \ + --enable-libssp \ + --enable-lto \ + --disable-install-libiberty \ + --with-gnu-ld \ + --verbose \ + --enable-java-home \ + --with-java-home=/usr/lib$LIBDIRSUFFIX/jvm/jre \ + --with-jvm-root-dir=/usr/lib$LIBDIRSUFFIX/jvm \ + --with-jvm-jar-dir=/usr/lib$LIBDIRSUFFIX/jvm/jvm-exports \ + --with-arch-directory=$LIB_ARCH \ + --with-antlr-jar=$ANTLJAR \ + --program-suffix=-${MAJVER} \ + --enable-version-specific-runtime-libs \ + $GCC_ARCHOPTS \ + --target=${TARGET} \ + --build=${TARGET} \ + --host=${TARGET} || exit 1 + #--enable-java-awt=gtk \ + #--disable-gtktest \ + + # Start the build: + + # Include all debugging info (for now): + make $NUMJOBS bootstrap + make info + make install DESTDIR=$PKG1 + +# KLUDGE ALERT +# These *gdb.py files are causing ldconfig to complain, so they are going +# to be REMOVED for now... at some point, they might be moved somewhere +# else, in which case things should Just Work(tm). Keep an eye on it. +rm -f $PKG1/usr/lib*/*gdb.py + +# Be sure the "specs" file is installed. +if [ ! -r $PKG1/usr/lib${LIBDIRSUFFIX}/gcc/${TARGET}/${VERSION}/specs ]; then + cat stage1-gcc/specs > $PKG1/usr/lib${LIBDIRSUFFIX}/gcc/${TARGET}/${VERSION}/specs +fi + +if [ ${MULTILIB} = "NO" ]; then + # Make our 64bit gcc look for 32bit gcc binaries in ./32 subdirectory: + (only needed if gcc was compiled with disable-multilib) + if [ "$ARCH" = "x86_64" ]; then + sed -i 's#;.\(:../lib !m64 m32;\)$#;32\1#' \ + $PKG1/usr/lib${LIBDIRSUFFIX}/gcc/${TARGET}/${VERSION}/specs + fi +fi + +make -i install-info DESTDIR=$PKG1 + +# Move potentially conflicting stuff to version specific subdirectory: +if [ -d $PKG1/usr/lib${LIBDIRSUFFIX} ]; then + mv $PKG1/usr/lib${LIBDIRSUFFIX}/lib* $PKG1/usr/lib${LIBDIRSUFFIX}/gcc/${TARGET}/${VERSION}/ +fi +if [ -d $PKG1/usr/lib${LIBDIRSUFFIX}/gcc/${TARGET}/lib${LIBDIRSUFFIX}/ ]; then + mv $PKG1/usr/lib${LIBDIRSUFFIX}/gcc/${TARGET}/lib${LIBDIRSUFFIX}/lib* $PKG1/usr/lib${LIBDIRSUFFIX}/gcc/${TARGET}/${VERSION}/ +fi +chmod 755 $PKG1/usr/lib${LIBDIRSUFFIX}/gcc/${TARGET}/${VERSION}/libgcc_s.so.1 +if [ ${MULTILIB} = "YES" ]; then + if [ -d $PKG1/usr/lib ]; then + mv $PKG1/usr/lib/lib* $PKG1/usr/lib/gcc/${TARGET}/${VERSION}/ + fi + if [ -d $PKG1/usr/lib/gcc/${TARGET}/lib/ ]; then + mv $PKG1/usr/lib/gcc/${TARGET}/lib/lib* $PKG1/usr/lib/gcc/${TARGET}/${VERSION}/ + fi + chmod 755 $PKG1/usr/lib/gcc/${TARGET}/${VERSION}/libgcc_s.so.1 +fi + +# The (huge) static GNU java libraries are not packaged. In nearly all +# cases one or more dependencies will not be available as static anyway. +rm -f $PKG1/usr/lib${LIBDIRSUFFIX}/libgcj.a +rm -f $PKG1/usr/lib${LIBDIRSUFFIX}/libgcj-tools.a +rm -f $PKG1/usr/lib/libgcj.a +rm -f $PKG1/usr/lib/libgcj-tools.a + +# Fix stuff up: +( cd $PKG1/usr/info + rm dir + for eachinfo in *.info ; do + mv $eachinfo $(basename $eachinfo .info)-${MAJVER}.info + done + gzip -9 * +) + +( cd $PKG1/usr/bin + ln -sf g++-${MAJVER} c++-${MAJVER} + ln -sf gcc-${MAJVER} cc-${MAJVER} + # Improved versions of the Slackware c?9 scripts: + cat $CWD/c89.sh > c89 + cat $CWD/c99.sh > c99 + chmod 755 c89 c99 +) + +( cd $PKG1/usr/man + rm -r man7 # Part of the system gcc package + gzip -9 */* + cd man1 + ln -sf g++-${MAJVER}.1.gz c++-${MAJVER}.1.gz + ln -sf gcc-${MAJVER}.1.gz cc-${MAJVER}.1.gz +) + +# keep a log +) 2>&1 | tee $TMP/gcc.build.log + +# Add profile scripts (non-executable by default) to make it easier +# to set the environment for compiling with gcc5: +mkdir -p $PKG1/etc/profile.d +cat $CWD/profile.d/gcc5.sh > $PKG1/etc/profile.d/gcc5.sh +cat $CWD/profile.d/gcc5.csh > $PKG1/etc/profile.d/gcc5.csh +chmod 644 $PKG1/etc/profile.d/* + +# The ecj wrapper script: +cat $CWD/ecj.sh | sed -e "s,@JAVADIR@,/usr/share/java," > $PKG1/usr/bin/ecj +chmod 755 $PKG1/usr/bin/ecj +# Some compatibility links. +for JAVAPROG in gcj gcjh gcj-dbtool ; do + ln -s ${JAVAPROG}-${MAJVER} $PKG1/usr/bin/${JAVAPROG} +done +( cd $PKG1 + for JAVALIB in usr/lib${LIBDIRSUFFIX}/gcc/${TARGET}/${VERSION}/libgcj* ; do + ln -s /${JAVALIB} $PKG1/usr/lib${LIBDIRSUFFIX}/ + done +) +# And add the missing javac symlink: +ln -s ../../../bin/ecj $PKG1/usr/lib$LIBDIRSUFFIX/jvm/bin/javac +# Don't package libffi stuff anymore. GCC will link the internal version +# statically, and we'll need a newer one elsewhere. +find . -name "ffi*.h" | xargs rm -f +find . -name "libffi*" | xargs rm -f +rm -f usr/man/man3/ffi* +rm -f usr/info/libffi* +# Install a proper pkgconfig file for libgcj: +rm $PKG1/usr/lib${LIBDIRSUFFIX}/gcc/${TARGET}/${VERSION}/pkgconfig/libgcj*pc +rm $PKG1/usr/lib${LIBDIRSUFFIX}/gcc/${TARGET}/${VERSION}/32/pkgconfig/libgcj*pc +mkdir -p $PKG1/usr/lib${LIBDIRSUFFIX}/pkgconfig +cat $CWD/libgcj-5.pc \ + | sed -e "s,@LIBDIRSUFFIX@,${LIBDIRSUFFIX}," \ + | sed -e "s,@TARGET@,${TARGET}," \ + | sed -e "s,@VERSION@,${VERSION}," \ + > $PKG1/usr/lib${LIBDIRSUFFIX}/pkgconfig/libgcj-5.pc + +# Filter all .la files (thanks much to Mark Post for the sed script): +( cd $TMP + for file in $(find . -type f -name "*.la") ; do + cat $file | sed -e 's%-L/gcc-[[:graph:]]* % %g' > $TMP/tmp-la-file + cat $TMP/tmp-la-file > $file + done + rm $TMP/tmp-la-file +) + +## Strip bloated binaries and libraries: +( cd $PKG1 + find . -name "lib*so*" -exec strip --strip-unneeded "{}" \; + find . -name "lib*a" -exec strip -g "{}" \; + strip --strip-unneeded usr/bin/* 2> /dev/null + find . | xargs file | grep "executable" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null + find . | xargs file | grep "shared object" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null +) + +( cd $PKG1 + if [ ${MULTILIB} = "YES" ]; then + /sbin/makepkg -l y -c n $OUTPUT/${PKGNAM}-${VERSION}_multilib-$ARCH-$BUILD$TAG.txz + else + /sbin/makepkg -l y -c n $OUTPUT/${PKGNAM}-${VERSION}-$ARCH-$BUILD$TAG.txz + fi +) + +echo +echo "Slackware GCC5 package build complete!" +echo + diff --git a/development/gcc5/gcc5.info b/development/gcc5/gcc5.info new file mode 100644 index 000000000000..9cc927819613 --- /dev/null +++ b/development/gcc5/gcc5.info @@ -0,0 +1,17 @@ +PRGNAM="gcc5" +VERSION="5.4.0" +HOMEPAGE="https://gcc.gnu.org/" +DOWNLOAD="https://ftp.gnu.org/gnu/gcc/gcc-5.4.0/gcc-5.4.0.tar.bz2 \ + http://www.antlr3.org/download/antlr-runtime-3.4.jar \ + https://sourceware.org/pub/java/ecj-4.9.jar \ + https://download.savannah.gnu.org/releases/fastjar/fastjar-0.97.tar.gz" +MD5SUM="4c626ac2a83ef30dfb9260e6f59c2b30 \ + 0e0318be407e51fdf7ba6777eabfdf73 \ + 7339f199ba11c941890031fd9981d7be \ + 62eff959f57f878067aad665ed8213a6" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +REQUIRES="" +MAINTAINER="Eric Hameleers" +EMAIL="alien@slackware.com" + diff --git a/development/gcc5/libgcj-5.pc b/development/gcc5/libgcj-5.pc new file mode 100644 index 000000000000..e2eb2932098d --- /dev/null +++ b/development/gcc5/libgcj-5.pc @@ -0,0 +1,10 @@ +prefix=/usr +exec_prefix=${prefix} +libdir=/usr/lib@LIBDIRSUFFIX@/gcc/@TARGET@/@VERSION@ +includedir=$(libdir)/include/ + +Name: libgcj +Description: libgcj +Version: @VERSION@ +Libs: -L${libdir} -lgcj +Cflags: -I${includedir} diff --git a/development/gcc5/patches/gcc-no_fixincludes.diff b/development/gcc5/patches/gcc-no_fixincludes.diff new file mode 100644 index 000000000000..52b661613d65 --- /dev/null +++ b/development/gcc5/patches/gcc-no_fixincludes.diff @@ -0,0 +1,27 @@ +--- ./gcc/Makefile.in.orig 2010-04-02 02:49:06.000000000 -0500 ++++ ./gcc/Makefile.in 2010-08-01 16:55:30.088318841 -0500 +@@ -3864,9 +3864,9 @@ + chmod a+r $${fix_dir}/limits.h; \ + done + # Install the README +- rm -f include-fixed/README +- cp $(srcdir)/../fixincludes/README-fixinc include-fixed/README +- chmod a+r include-fixed/README ++# rm -f include-fixed/README ++# cp $(srcdir)/../fixincludes/README-fixinc include-fixed/README ++# chmod a+r include-fixed/README + $(STAMP) $@ + + .PHONY: install-gcc-tooldir +@@ -3947,10 +3947,7 @@ + (TARGET_MACHINE='$(target)'; srcdir=`cd $(srcdir); ${PWD_COMMAND}`; \ + SHELL='$(SHELL)'; MACRO_LIST=`${PWD_COMMAND}`/macro_list ; \ + gcc_dir=`${PWD_COMMAND}` ; \ +- export TARGET_MACHINE srcdir SHELL MACRO_LIST && \ +- cd $(build_objdir)/fixincludes && \ +- $(SHELL) ./fixinc.sh "$${gcc_dir}/$${fix_dir}" \ +- $(SYSTEM_HEADER_DIR) $(OTHER_FIXINCLUDES_DIRS) ); \ ++ export TARGET_MACHINE srcdir SHELL MACRO_LIST ); \ + rm -f $${fix_dir}/syslimits.h; \ + if [ -f $${fix_dir}/limits.h ]; then \ + mv $${fix_dir}/limits.h $${fix_dir}/syslimits.h; \ diff --git a/development/gcc5/patches/gcc.66782.diff b/development/gcc5/patches/gcc.66782.diff new file mode 100644 index 000000000000..0743f8853b42 --- /dev/null +++ b/development/gcc5/patches/gcc.66782.diff @@ -0,0 +1,124 @@ +Index: config/i386/i386.md +=================================================================== +--- config/i386/i386.md (revision 225539) ++++ config/i386/i386.md (working copy) +@@ -108,6 +108,7 @@ + UNSPEC_LD_MPIC ; load_macho_picbase + UNSPEC_TRUNC_NOOP + UNSPEC_DIV_ALREADY_SPLIT ++ UNSPEC_MS_TO_SYSV_CALL + UNSPEC_PAUSE + UNSPEC_LEA_ADDR + UNSPEC_XBEGIN_ABORT +@@ -11584,6 +11585,15 @@ + "* return ix86_output_call_insn (insn, operands[0]);" + [(set_attr "type" "call")]) + ++(define_insn "*call_rex64_ms_sysv" ++ [(match_parallel 2 "call_rex64_ms_sysv_operation" ++ [(call (mem:QI (match_operand:DI 0 "call_insn_operand" "rBwBz")) ++ (match_operand 1)) ++ (unspec [(const_int 0)] UNSPEC_MS_TO_SYSV_CALL)])] ++ "TARGET_64BIT && !SIBLING_CALL_P (insn)" ++ "* return ix86_output_call_insn (insn, operands[0]);" ++ [(set_attr "type" "call")]) ++ + (define_insn "*sibcall" + [(call (mem:QI (match_operand:W 0 "sibcall_insn_operand" "UBsBz")) + (match_operand 1))] +@@ -11808,6 +11818,16 @@ + (match_dup 3))) + (unspec [(const_int 0)] UNSPEC_PEEPSIB)])]) + ++(define_insn "*call_value_rex64_ms_sysv" ++ [(match_parallel 3 "call_rex64_ms_sysv_operation" ++ [(set (match_operand 0) ++ (call (mem:QI (match_operand:DI 1 "call_insn_operand" "rBwBz")) ++ (match_operand 2))) ++ (unspec [(const_int 0)] UNSPEC_MS_TO_SYSV_CALL)])] ++ "TARGET_64BIT && !SIBLING_CALL_P (insn)" ++ "* return ix86_output_call_insn (insn, operands[1]);" ++ [(set_attr "type" "callv")]) ++ + (define_expand "call_value_pop" + [(parallel [(set (match_operand 0) + (call (match_operand:QI 1) +Index: config/i386/predicates.md +=================================================================== +--- config/i386/predicates.md (revision 225533) ++++ config/i386/predicates.md (working copy) +@@ -616,6 +616,36 @@ + && XINT (XEXP (op, 0), 1) == UNSPEC_GOTPCREL); + }) + ++;; Return true if OP is a call from MS ABI to SYSV ABI function. ++(define_predicate "call_rex64_ms_sysv_operation" ++ (match_code "parallel") ++{ ++ unsigned creg_size = ARRAY_SIZE (x86_64_ms_sysv_extra_clobbered_registers); ++ unsigned i; ++ ++ if ((unsigned) XVECLEN (op, 0) != creg_size + 2) ++ return false; ++ ++ for (i = 0; i < creg_size; i++) ++ { ++ rtx elt = XVECEXP (op, 0, i+2); ++ enum machine_mode mode; ++ unsigned regno; ++ ++ if (GET_CODE (elt) != CLOBBER ++ || GET_CODE (SET_DEST (elt)) != REG) ++ return false; ++ ++ regno = x86_64_ms_sysv_extra_clobbered_registers[i]; ++ mode = SSE_REGNO_P (regno) ? TImode : DImode; ++ ++ if (GET_MODE (SET_DEST (elt)) != mode ++ || REGNO (SET_DEST (elt)) != regno) ++ return false; ++ } ++ return true; ++}) ++ + ;; Match exactly zero. + (define_predicate "const0_operand" + (match_code "const_int,const_wide_int,const_double,const_vector") +Index: config/i386/i386.c +=================================================================== +--- config/i386/i386.c (revision 225533) ++++ config/i386/i386.c (working copy) +@@ -25639,7 +25639,9 @@ + rtx callarg2, + rtx pop, bool sibcall) + { +- rtx vec[3]; ++ unsigned int const cregs_size ++ = ARRAY_SIZE (x86_64_ms_sysv_extra_clobbered_registers); ++ rtx vec[3 + cregs_size]; + rtx use = NULL, call; + unsigned int vec_len = 0; + +@@ -25742,16 +25744,18 @@ + if (TARGET_64BIT_MS_ABI + && (!callarg2 || INTVAL (callarg2) != -2)) + { +- int const cregs_size +- = ARRAY_SIZE (x86_64_ms_sysv_extra_clobbered_registers); +- int i; ++ unsigned i; + ++ vec[vec_len++] = gen_rtx_UNSPEC (VOIDmode, gen_rtvec (1, const0_rtx), ++ UNSPEC_MS_TO_SYSV_CALL); ++ + for (i = 0; i < cregs_size; i++) + { + int regno = x86_64_ms_sysv_extra_clobbered_registers[i]; + machine_mode mode = SSE_REGNO_P (regno) ? TImode : DImode; + +- clobber_reg (&use, gen_rtx_REG (mode, regno)); ++ vec[vec_len++] ++ = gen_rtx_CLOBBER (VOIDmode, gen_rtx_REG (mode, regno)); + } + } + diff --git a/development/gcc5/patches/gcc.69140.diff b/development/gcc5/patches/gcc.69140.diff new file mode 100644 index 000000000000..ace60ebdd027 --- /dev/null +++ b/development/gcc5/patches/gcc.69140.diff @@ -0,0 +1,13 @@ +--- ./gcc/config/i386/i386.c.orig 2015-11-18 09:45:26.000000000 -0600 ++++ ./gcc/config/i386/i386.c 2016-02-05 13:50:07.202981920 -0600 +@@ -9677,6 +9677,10 @@ + if (TARGET_64BIT_MS_ABI && get_frame_size () > SEH_MAX_FRAME_SIZE) + return true; + ++ /* SSE saves require frame-pointer when stack is misaligned. */ ++ if (TARGET_64BIT_MS_ABI && ix86_incoming_stack_boundary < 128) ++ return true; ++ + /* In ix86_option_override_internal, TARGET_OMIT_LEAF_FRAME_POINTER + turns off the frame pointer by default. Turn it back on now if + we've not got a leaf function. */ diff --git a/development/gcc5/profile.d/gcc5.csh b/development/gcc5/profile.d/gcc5.csh new file mode 100644 index 000000000000..25f9dc1342b8 --- /dev/null +++ b/development/gcc5/profile.d/gcc5.csh @@ -0,0 +1,7 @@ +setenv CC gcc-5 +setenv CPP cpp-5 +setenv CXX g++-5 +setenv AR gcc-ar-5 +setenv NM gcc-nm-5 +setenv RANLIB gcc-ranlib-5 + diff --git a/development/gcc5/profile.d/gcc5.sh b/development/gcc5/profile.d/gcc5.sh new file mode 100644 index 000000000000..7143b5d0e9f9 --- /dev/null +++ b/development/gcc5/profile.d/gcc5.sh @@ -0,0 +1,7 @@ +export CC=gcc-5 +export CPP=cpp-5 +export CXX=g++-5 +export AR=gcc-ar-5 +export NM=gcc-nm-5 +export RANLIB=gcc-ranlib-5 + diff --git a/development/gcc5/slack-desc.gcc5 b/development/gcc5/slack-desc.gcc5 new file mode 100644 index 000000000000..d9d965846b3e --- /dev/null +++ b/development/gcc5/slack-desc.gcc5 @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. Line +# up the first '|' above the ':' following the base package name, and the '|' on +# the right side marks the last column you can put a character in. You must make +# exactly 11 lines for the formatting to be correct. It's also customary to +# leave one space after the ':'. + + |-----handy-ruler------------------------------------------------------| +gcc5: gcc5 (Co-installable GCC-5 package with C, C++ and Java support) +gcc5: +gcc5: GCC is the GNU Compiler Collection. +gcc5: +gcc5: This package contains those parts of the compiler collection needed to +gcc5: compile C and C++ code and programs written in the Java programming +gcc5: language.@MULTILIB@ +gcc5: +gcc5: This gcc5 package must be co-installed with Slackware's gcc7 compiler. +gcc5: +gcc5: -- cgit v1.2.3