From f9777af5fcb6d290285e5d3588bf71c937d71dda Mon Sep 17 00:00:00 2001
From: Cem Keylan <cem@ckyln.com>
Date: Sat, 30 May 2020 12:33:17 +0300
Subject: gcc: architecture dependent build

---
 core/gcc/build                     | 23 ++++++++++++++++++-----
 core/gcc/checksums                 |  1 +
 core/gcc/patches/musl-libssp.patch | 20 ++++++++++++++++++++
 core/gcc/sources                   |  1 +
 4 files changed, 40 insertions(+), 5 deletions(-)
 create mode 100644 core/gcc/patches/musl-libssp.patch

(limited to 'core/gcc')

diff --git a/core/gcc/build b/core/gcc/build
index 34c650a7..47bfc7c7 100755
--- a/core/gcc/build
+++ b/core/gcc/build
@@ -1,5 +1,7 @@
 #!/bin/sh -e
 
+sys_arch=${3:-$(uname -m)}
+
 sed_i() {
     for file; do :; done
     sed "$@" > _
@@ -10,9 +12,20 @@ sed_i() {
 cp gcc/gmp/configfsf.guess gcc/gmp/config.guess
 cp gcc/gmp/configfsf.sub   gcc/gmp/config.sub
 
-# Use lib not lib64 by default.
-sed_i '/m64=/s/lib64/lib/' gcc/gcc/config/i386/t-linux64
-sed_i 's/lib64/lib/'       gcc/gcc/config/i386/linux64.h
+if [ "${sys_arch#1*86}" ]; then
+    # Do not create lib64 directories
+    sed_i '/m64=/s/lib64/lib/' gcc/gcc/config/i386/t-linux64
+    sed_i 's/lib64/lib/'       gcc/gcc/config/i386/linux64.h
+else
+    # Apply libssp patch for i686.
+    (cd gcc; patch -Np1 < ../musl-libssp.patch)
+fi
+
+case "$sys_arch" in
+    i*86)   archopts="--build=i686-pc-linux-musl \
+                      --disable-libssp" ;;
+    x86_64) archopts="--build=x86_64-pc-linux-musl"
+esac
 
 # Build must happen outside of gcc source.
 mkdir -p gcc-build
@@ -43,7 +56,7 @@ export libat_cv_have_ifunc=no
     --enable-threads \
     --enable-tls \
     --enable-languages=c,c++ \
-    --build=x86_64-pc-linux-musl \
+    $archopts \
     --disable-bootstrap
 
 make
@@ -64,7 +77,7 @@ install -Dm755 ../c99 "$1/usr/bin/c99"
 {
     mkdir -p "$1/usr/lib/bfd-plugins"
 
-    ln -s /usr/libexec/gcc/x86_64-pc-linux-musl/9.2.0/liblto_plugin.so \
+    ln -s "/usr/libexec/gcc/$sys_arch-pc-linux-musl/9.2.0/liblto_plugin.so" \
         "$1/usr/lib/bfd-plugins/liblto_plugin.so"
 }
 
diff --git a/core/gcc/checksums b/core/gcc/checksums
index 31e5fbd3..ebe22b10 100644
--- a/core/gcc/checksums
+++ b/core/gcc/checksums
@@ -3,3 +3,4 @@ b6898a23844b656f1b68691c5c012036c2e694ac4b53a8918d4712ad876e7ea2  gcc-10.1.0.tar
 1d3be708604eae0e42d578ba93b390c2a145f17743a744d8f3f8c2ad5855a38a  mpfr-4.0.2.tar.xz
 6985c538143c1208dcb1ac42cedad6ff52e267b47e5f970183a3e75125b43c2e  mpc-1.1.0.tar.gz
 765614b3396d70bca3fa0ae4a813632486c6dca320e2bd13c8c39dca52be4a4c  c99
+4ece19529edb8e681e1778e977e2ba1d47984ccfcb82505e8b898bb29d659625  musl-libssp.patch
diff --git a/core/gcc/patches/musl-libssp.patch b/core/gcc/patches/musl-libssp.patch
new file mode 100644
index 00000000..fe5c6143
--- /dev/null
+++ b/core/gcc/patches/musl-libssp.patch
@@ -0,0 +1,20 @@
+Author: Timo Teräs <timo.teras@iki.fi>
+
+Alpine musl package provides libssp_nonshared.a. We link to it unconditionally,
+as otherwise we get link failures if some objects are -fstack-protector built
+and final link happens with -fno-stack-protector. This seems to be the common
+case when bootstrapping gcc, the piepatches do not seem to fully fix the
+crosstoolchain and  bootstrap sequence wrt. stack-protector flag usage.
+
+--- gcc-6.1.0/gcc/gcc.c.orig
++++ gcc-6.1.0/gcc/gcc.c
+@@ -870,8 +870,7 @@
+ 
+ #ifndef LINK_SSP_SPEC
+ #ifdef TARGET_LIBC_PROVIDES_SSP
+-#define LINK_SSP_SPEC "%{fstack-protector|fstack-protector-all" \
+-		       "|fstack-protector-strong|fstack-protector-explicit:}"
++#define LINK_SSP_SPEC "-lssp_nonshared"
+ #else
+ #define LINK_SSP_SPEC "%{fstack-protector|fstack-protector-all" \
+ 		       "|fstack-protector-strong|fstack-protector-explicit" \
diff --git a/core/gcc/sources b/core/gcc/sources
index 6eb83031..8a68dca5 100644
--- a/core/gcc/sources
+++ b/core/gcc/sources
@@ -3,3 +3,4 @@ https://gmplib.org/download/gmp/gmp-6.2.0.tar.xz gcc/gmp
 https://ftp.gnu.org/gnu/mpfr/mpfr-4.0.2.tar.xz gcc/mpfr
 https://ftp.gnu.org/gnu/mpc/mpc-1.1.0.tar.gz gcc/mpc
 files/c99
+patches/musl-libssp.patch
-- 
cgit v1.2.3