diff --git a/cross/binutils-riscv64/0001-Revert-PR25882-.gnu.attributes-are-not-checked-for-s.patch b/cross/binutils-riscv64/0001-Revert-PR25882-.gnu.attributes-are-not-checked-for-s.patch new file mode 100644 index 000000000..6e1fa7731 --- /dev/null +++ b/cross/binutils-riscv64/0001-Revert-PR25882-.gnu.attributes-are-not-checked-for-s.patch @@ -0,0 +1,55 @@ +From bbf05b742fde518fb97c789b043fe0d3aaf549f0 Mon Sep 17 00:00:00 2001 +From: Ariadne Conill +Date: Tue, 21 Sep 2021 14:53:13 +0000 +Subject: [PATCH] Revert "PR25882, .gnu.attributes are not checked for shared + libraries" + +This revert is needed to avoid wrongly tagging objects with the incompatible +IBM long double ABI, which is not supported by musl and will result in +linking errors if used. + +This reverts commit a8acd6eeb6dc2cc5460ece90f90ebe36b56b20ba. +--- + bfd/elf32-tic6x.c | 3 --- + ld/ldlang.c | 10 ++++------ + 2 files changed, 4 insertions(+), 9 deletions(-) + +diff --git a/bfd/elf32-tic6x.c b/bfd/elf32-tic6x.c +index 5754f3cb860..3ad1d612749 100644 +--- a/bfd/elf32-tic6x.c ++++ b/bfd/elf32-tic6x.c +@@ -3735,9 +3735,6 @@ elf32_tic6x_merge_attributes (bfd *ibfd, struct bfd_link_info *info) + + case Tag_ABI_PIC: + case Tag_ABI_PID: +- /* Don't transfer these tags from dynamic objects. */ +- if ((ibfd->flags & DYNAMIC) != 0) +- continue; + if (out_attr[i].i > in_attr[i].i) + out_attr[i].i = in_attr[i].i; + break; +diff --git a/ld/ldlang.c b/ld/ldlang.c +index 37b64c89ee1..f13beaef9d9 100644 +--- a/ld/ldlang.c ++++ b/ld/ldlang.c +@@ -7071,13 +7071,11 @@ lang_check (void) + bfd_printable_name (input_bfd), input_bfd, + bfd_printable_name (link_info.output_bfd)); + } +- +- /* If the input bfd has no contents, it shouldn't set the +- private data of the output bfd. */ +- else if (!file->flags.just_syms +- && ((input_bfd->flags & DYNAMIC) != 0 +- || bfd_count_sections (input_bfd) != 0)) ++ else if (bfd_count_sections (input_bfd)) + { ++ /* If the input bfd has no contents, it shouldn't set the ++ private data of the output bfd. */ ++ + bfd_error_handler_type pfn = NULL; + + /* If we aren't supposed to warn about mismatched input +-- +2.33.0 + diff --git a/cross/binutils-riscv64/APKBUILD b/cross/binutils-riscv64/APKBUILD new file mode 100644 index 000000000..177f1ad2b --- /dev/null +++ b/cross/binutils-riscv64/APKBUILD @@ -0,0 +1,155 @@ +# Automatically generated aport, do not edit! +# Generator: pmbootstrap aportgen binutils-riscv64 +# Based on: main/binutils + + +CTARGET_ARCH=riscv64 +CTARGET="$(arch_to_hostspec $CTARGET_ARCH)" + +pkgname=binutils-riscv64 +pkgver=2.39 +pkgrel=2 +pkgdesc="Tools necessary to build programs for riscv64 targets" +url="https://www.gnu.org/software/binutils/" +makedepends_build="bison flex texinfo" +makedepends_host="zlib-dev" +makedepends="$makedepends_build $makedepends_host" +arch="x86_64" +license="GPL-2.0 GPL-3.0-or-later LGPL-2.0 BSD" +subpackages="binutils-dev binutils-doc" +source="https://ftp.gnu.org/gnu/binutils/binutils-$pkgver.tar.xz + binutils-ld-fix-static-linking.patch + gold-mips.patch + ld-bfd-mips.patch + 0001-Revert-PR25882-.gnu.attributes-are-not-checked-for-s.patch + binutils-mips-disable-assert.patch + CVE-2022-38533.patch + " +builddir="$srcdir/binutils-$pkgver" + +if [ "$CHOST" = "$CBUILD" ] && [ "$CBUILD" = "$CTARGET" ] && [ "$CTARGET_ARCH" != "riscv64" ]; then + subpackages="$subpackages binutils-gold" +fi + +if [ "$CHOST" != "$CTARGET" ]; then + pkgname="binutils-$CTARGET_ARCH" + subpackages="" + sonameprefix="binutils:" +fi + +# secfixes: +# 2.39-r2: +# - CVE-2022-38533 +# 2.39-r0: +# - CVE-2022-38126 +# 2.35.2-r1: +# - CVE-2021-3487 +# 2.32-r0: +# - CVE-2018-19931 +# - CVE-2018-19932 +# - CVE-2018-20002 +# - CVE-2018-20712 +# 2.28-r1: +# - CVE-2017-7614 + +build() { + local _sysroot=/ + local _cross_configure="--enable-install-libiberty --enable-shared" + local _arch_configure="" + local _gold_configure="--disable-gold" + local _plugin_configure="--enable-plugins" + + if [ "$CHOST" != "$CTARGET" ]; then + _sysroot="$CBUILDROOT" + _cross_configure="--disable-install-libiberty" + _plugin_configure="--disable-plugins" + fi + + if [ "$CHOST" = "$CBUILD" ] && [ "$CBUILD" = "$CTARGET" ] && [ "$CTARGET_ARCH" != "riscv64" ]; then + _gold_configure="--enable-gold" + fi + + if [ "$CTARGET_ARCH" = "x86_64" ]; then + _arch_configure="--enable-targets=x86_64-pep" + fi + + if [ "$CTARGET_ARCH" = "riscv64" ]; then + _gold_configure="--disable-gold" + fi + + case "$CTARGET_ARCH" in + mips*) _hash_style_configure="--enable-default-hash-style=sysv" ;; + *) _hash_style_configure="--enable-default-hash-style=gnu" ;; + esac + + ./configure \ + --build=$CBUILD \ + --host=$CHOST \ + --target=$CTARGET \ + --with-build-sysroot="$CBUILDROOT" \ + --with-sysroot=$_sysroot \ + --prefix=/usr \ + --mandir=/usr/share/man \ + --infodir=/usr/share/info \ + --disable-multilib \ + --disable-gprofng \ + --enable-ld=default \ + $_gold_configure \ + --enable-64-bit-bfd \ + $_plugin_configure \ + --enable-relro \ + --enable-deterministic-archives \ + --enable-default-execstack=no \ + $_cross_configure \ + $_arch_configure \ + $_hash_style_configure \ + --with-pic \ + --disable-werror \ + --disable-nls \ + --with-mmap \ + --with-system-zlib + make +} + +package() { + make install DESTDIR="$pkgdir" + if [ -d "$pkgdir"/usr/lib64 ]; then + mv "$pkgdir"/usr/lib64/* "$pkgdir"/usr/lib/ + rmdir "$pkgdir"/usr/lib64 + fi + if [ "$CHOST" != "$CTARGET" ]; then + # creating cross tools: remove any files that would conflict + # with the native tools, or other cross tools + rm -r "${pkgdir:?}"/usr/share + rm -f "$pkgdir"/usr/lib/libiberty.a + rm -r "${pkgdir:?}"/usr/lib/bfd-plugins + fi +} + +libs() { + pkgdesc="Runtime libraries from binutils - libbfd and libopcodes" + + mkdir -p "$subpkgdir"/usr/lib + mv "$pkgdir"/usr/lib/lib*.so "$subpkgdir"/usr/lib/ +} + +gold() { + pkgdesc="GNU binutils - gold linker" + + if [ -e "$pkgdir"/usr/bin/ld.gold ]; then + mkdir -p "$subpkgdir"/usr/bin + mv "$pkgdir"/usr/bin/ld.gold "$subpkgdir"/usr/bin + fi + mkdir -p "$subpkgdir"/usr/$CTARGET/bin + mv "$pkgdir"/usr/$CTARGET/bin/ld.gold "$subpkgdir"/usr/$CTARGET/bin/ld.gold +} + +sha512sums=" +68e038f339a8c21faa19a57bbc447a51c817f47c2e06d740847c6e9cc3396c025d35d5369fa8c3f8b70414757c89f0e577939ddc0d70f283182504920f53b0a3 binutils-2.39.tar.xz +ecee33b0e435aa704af1c334e560f201638ff79e199aa11ed78a72f7c9b46f85fbb227af5748e735fd681d1965fcc42ac81b0c8824e540430ce0c706c81e8b49 binutils-ld-fix-static-linking.patch +f55cf2e0bf82f97583a1abe10710e4013ecf7d64f1da2ef8659a44a06d0dd8beaf58dab98a183488ea137f03e32d62efc878d95f018f836f8cec870bc448556f gold-mips.patch +314d2ef9071c89940aa6c8118e8a1e2f191a5d0a4bf596da1ad9cc84f884d8bc7dea8bd7b9fc3f8f1bddd3fd41c6eb017e1e804044b3bf084df1ed9e6e095e2d ld-bfd-mips.patch +70ec22bd72ef6dddecfd970613387dd4a8cdc8730dd3cbf03d5a0c3a7c4d839383167bb06dad21bf7c235329fd44b5dc4aefe762f68544f17155cf002bf1be4a 0001-Revert-PR25882-.gnu.attributes-are-not-checked-for-s.patch +609cd90d8b334eb309f586b17b9d335a08d3dbb6def7c3eb5c010028fcb681674031e5b9d853aa7a39a50304356a86afc184b85562b3f228f8197f4d29395c8f binutils-mips-disable-assert.patch +631726e557524633ace39c597acbc5ac39bfd25f7b292eee1f0b2a80a503f4ff799f027757d12d5a24b2fa3c07c7e14602d8a86d96e19876d6d0d5d1a02817e7 CVE-2022-38533.patch +" diff --git a/cross/binutils-riscv64/CVE-2022-38533.patch b/cross/binutils-riscv64/CVE-2022-38533.patch new file mode 100644 index 000000000..df948da2e --- /dev/null +++ b/cross/binutils-riscv64/CVE-2022-38533.patch @@ -0,0 +1,22 @@ +X-Git-Url: https://sourceware.org/git/?p=binutils-gdb.git;a=blobdiff_plain;f=bfd%2Fcoffcode.h;h=52027981c3f052d98e043cd0c877f0bb5da97c7f;hp=67aaf158ca1829fe63f0065f31a0b1009b227b36;hb=ef186fe54aa6d281a3ff8a9528417e5cc614c797;hpb=80075150727d653c39e9d037e15c6b87dcef08cd + +diff --git a/bfd/coffcode.h b/bfd/coffcode.h +index 67aaf158ca1..52027981c3f 100644 +--- a/bfd/coffcode.h ++++ b/bfd/coffcode.h +@@ -4302,10 +4302,13 @@ coff_set_section_contents (bfd * abfd, + + rec = (bfd_byte *) location; + recend = rec + count; +- while (rec < recend) ++ while (recend - rec >= 4) + { ++ size_t len = bfd_get_32 (abfd, rec); ++ if (len == 0 || len > (size_t) (recend - rec) / 4) ++ break; ++ rec += len * 4; + ++section->lma; +- rec += bfd_get_32 (abfd, rec) * 4; + } + + BFD_ASSERT (rec == recend); diff --git a/cross/binutils-riscv64/binutils-ld-fix-static-linking.patch b/cross/binutils-riscv64/binutils-ld-fix-static-linking.patch new file mode 100644 index 000000000..bc5d76265 --- /dev/null +++ b/cross/binutils-riscv64/binutils-ld-fix-static-linking.patch @@ -0,0 +1,46 @@ +This fixes static linking for our hardened toolchain +diff --git a/ld/scripttempl/elf.sc b/ld/scripttempl/elf.sc +index e8126cb..9532bfb 100644 +--- a/ld/scripttempl/elf.sc ++++ b/ld/scripttempl/elf.sc +@@ -235,8 +235,8 @@ test "${LARGE_SECTIONS}" = "yes" && LARGE_SECTIONS=" + if test "${ENABLE_INITFINI_ARRAY}" = "yes"; then + SORT_INIT_ARRAY="KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))" + SORT_FINI_ARRAY="KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))" +- CTORS_IN_INIT_ARRAY="EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o $OTHER_EXCLUDE_FILES) .ctors" +- DTORS_IN_FINI_ARRAY="EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o $OTHER_EXCLUDE_FILES) .dtors" ++ CTORS_IN_INIT_ARRAY="EXCLUDE_FILE (*crtbegin*.o *crtend*.o $OTHER_EXCLUDE_FILES) .ctors" ++ DTORS_IN_FINI_ARRAY="EXCLUDE_FILE (*crtbegin*.o *crtend*.o $OTHER_EXCLUDE_FILES) .dtors" + else + SORT_INIT_ARRAY="KEEP (*(SORT(.init_array.*)))" + SORT_FINI_ARRAY="KEEP (*(SORT(.fini_array.*)))" +@@ -270,15 +270,14 @@ CTOR=".ctors ${CONSTRUCTING-0} : + doesn't matter which directory crtbegin.o + is in. */ + +- KEEP (*crtbegin.o(.ctors)) +- KEEP (*crtbegin?.o(.ctors)) ++ KEEP (*crtbegin*.o(.ctors)) + + /* We don't want to include the .ctor section from + the crtend.o file until after the sorted ctors. + The .ctor section from the crtend file contains the + end of ctors marker and it must be last */ + +- KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o $OTHER_EXCLUDE_FILES) .ctors)) ++ KEEP (*(EXCLUDE_FILE (*crtend*.o $OTHER_EXCLUDE_FILES) .ctors)) + KEEP (*(SORT(.ctors.*))) + KEEP (*(.ctors)) + ${CONSTRUCTING+${CTOR_END}} +@@ -286,9 +285,8 @@ CTOR=".ctors ${CONSTRUCTING-0} : + DTOR=".dtors ${CONSTRUCTING-0} : + { + ${CONSTRUCTING+${DTOR_START}} +- KEEP (*crtbegin.o(.dtors)) +- KEEP (*crtbegin?.o(.dtors)) +- KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o $OTHER_EXCLUDE_FILES) .dtors)) ++ KEEP (*crtbegin*.o(.dtors)) ++ KEEP (*(EXCLUDE_FILE (*crtend*.o $OTHER_EXCLUDE_FILES) .dtors)) + KEEP (*(SORT(.dtors.*))) + KEEP (*(.dtors)) + ${CONSTRUCTING+${DTOR_END}} diff --git a/cross/binutils-riscv64/binutils-mips-disable-assert.patch b/cross/binutils-riscv64/binutils-mips-disable-assert.patch new file mode 100644 index 000000000..1a7885803 --- /dev/null +++ b/cross/binutils-riscv64/binutils-mips-disable-assert.patch @@ -0,0 +1,14 @@ +diff -urN binutils-2.35.2.orig/bfd/elfxx-mips.c binutils-2.35.2/bfd/elfxx-mips.c +--- binutils-2.35.2.orig/bfd/elfxx-mips.c 2021-01-30 01:38:03.000000000 -0700 ++++ binutils-2.35.2/bfd/elfxx-mips.c 2021-05-13 17:35:34.706913601 -0600 +@@ -6744,8 +6744,10 @@ + in the relocation. */ + if (h != NULL && ! SYMBOL_REFERENCES_LOCAL (info, &h->root)) + { ++#if 0 + BFD_ASSERT (htab->root.target_os == is_vxworks + || h->global_got_area != GGA_NONE); ++#endif + indx = h->root.dynindx; + if (SGI_COMPAT (output_bfd)) + defined_p = h->root.def_regular; diff --git a/cross/binutils-riscv64/gold-mips.patch b/cross/binutils-riscv64/gold-mips.patch new file mode 100644 index 000000000..291a2aae6 --- /dev/null +++ b/cross/binutils-riscv64/gold-mips.patch @@ -0,0 +1,39 @@ +# DP: Fix gold on mips64 targets. + +gold/ + +2016-08-09 Aurelien Jarno + + * configure.tgt: Add mips64el*-*-*|mips64le*-*-* and mips64*-*-*. + + +--- a/gold/configure.tgt ++++ b/gold/configure.tgt +@@ -153,6 +153,13 @@ aarch64*-*) + targ_big_endian=false + targ_extra_big_endian=true + ;; ++mips*64*el*-*-*|mips*64*le*-*-*) ++ targ_obj=mips ++ targ_machine=EM_MIPS_RS3_LE ++ targ_size=64 ++ targ_big_endian=false ++ targ_extra_big_endian=true ++ ;; + mips*el*-*-*|mips*le*-*-*) + targ_obj=mips + targ_machine=EM_MIPS_RS3_LE +@@ -160,6 +167,13 @@ mips*el*-*-*|mips*le*-*-*) + targ_big_endian=false + targ_extra_big_endian=true + ;; ++mips*64*-*-*) ++ targ_obj=mips ++ targ_machine=EM_MIPS ++ targ_size=64 ++ targ_big_endian=true ++ targ_extra_big_endian=false ++ ;; + mips*-*-*) + targ_obj=mips + targ_machine=EM_MIPS diff --git a/cross/binutils-riscv64/ld-bfd-mips.patch b/cross/binutils-riscv64/ld-bfd-mips.patch new file mode 100644 index 000000000..2991c8857 --- /dev/null +++ b/cross/binutils-riscv64/ld-bfd-mips.patch @@ -0,0 +1,19 @@ +--- ./ld/configure.tgt.orig ++++ ./ld/configure.tgt +@@ -541,12 +541,12 @@ + ;; + mips*-*-windiss) targ_emul=elf32mipswindiss + ;; +-mips64*el-*-linux-*) targ_emul=elf32ltsmipn32 +- targ_extra_emuls="elf32btsmipn32 elf32ltsmip elf32btsmip elf64ltsmip elf64btsmip" ++mips64*el-*-linux-*) targ_emul=elf64ltsmip ++ targ_extra_emuls="elf32ltsmipn32 elf32btsmipn32 elf32ltsmip elf32btsmip elf64btsmip" + targ_extra_libpath=$targ_extra_emuls + ;; +-mips64*-*-linux-*) targ_emul=elf32btsmipn32 +- targ_extra_emuls="elf32ltsmipn32 elf32btsmip elf32ltsmip elf64btsmip elf64ltsmip" ++mips64*-*-linux-*) targ_emul=elf64btsmip ++ targ_extra_emuls="elf32btsmipn32 elf32ltsmipn32 elf32btsmip elf32ltsmip elf64ltsmip" + targ_extra_libpath=$targ_extra_emuls + ;; + mips*el-*-linux-*) targ_emul=elf32ltsmip diff --git a/cross/gcc-riscv64/0001-posix_memalign.patch b/cross/gcc-riscv64/0001-posix_memalign.patch new file mode 100644 index 000000000..9533061b9 --- /dev/null +++ b/cross/gcc-riscv64/0001-posix_memalign.patch @@ -0,0 +1,39 @@ +From 74c7b0df9971b6bc75d7d172c2819ffd21d51050 Mon Sep 17 00:00:00 2001 +From: Szabolcs Nagy +Date: Fri, 26 Jan 2018 20:32:50 +0000 +Subject: [PATCH] posix_memalign + +--- + gcc/config/i386/pmm_malloc.h | 9 +++++---- + 1 file changed, 5 insertions(+), 4 deletions(-) + +diff --git a/gcc/config/i386/pmm_malloc.h b/gcc/config/i386/pmm_malloc.h +index 3b2e4f47915..20f790904a2 100644 +--- a/gcc/config/i386/pmm_malloc.h ++++ b/gcc/config/i386/pmm_malloc.h +@@ -27,12 +27,13 @@ + #include + + /* We can't depend on since the prototype of posix_memalign +- may not be visible. */ ++ may not be visible and we can't pollute the namespace either. */ + #ifndef __cplusplus +-extern int posix_memalign (void **, size_t, size_t); ++extern int _mm_posix_memalign (void **, size_t, size_t) + #else +-extern "C" int posix_memalign (void **, size_t, size_t) throw (); ++extern "C" int _mm_posix_memalign (void **, size_t, size_t) throw () + #endif ++__asm__("posix_memalign"); + + static __inline void * + _mm_malloc (size_t __size, size_t __alignment) +@@ -42,7 +43,7 @@ _mm_malloc (size_t __size, size_t __alignment) + return malloc (__size); + if (__alignment == 2 || (sizeof (void *) == 8 && __alignment == 4)) + __alignment = sizeof (void *); +- if (posix_memalign (&__ptr, __alignment, __size) == 0) ++ if (_mm_posix_memalign (&__ptr, __alignment, __size) == 0) + return __ptr; + else + return NULL; diff --git a/cross/gcc-riscv64/0002-gcc-poison-system-directories.patch b/cross/gcc-riscv64/0002-gcc-poison-system-directories.patch new file mode 100644 index 000000000..ffc92f9e8 --- /dev/null +++ b/cross/gcc-riscv64/0002-gcc-poison-system-directories.patch @@ -0,0 +1,200 @@ +From dd1e75ff4ecda96957465b34681f245e818928bd Mon Sep 17 00:00:00 2001 +From: Khem Raj +Date: Fri, 29 Mar 2013 08:59:00 +0400 +Subject: [PATCH] gcc: poison-system-directories + +Add /sw/include and /opt/include based on the original +zecke-no-host-includes.patch patch. The original patch checked for +/usr/include, /sw/include and /opt/include and then triggered a failure and +aborted. + +Instead, we add the two missing items to the current scan. If the user +wants this to be a failure, they can add "-Werror=poison-system-directories". + +Signed-off-by: Mark Hatle +Signed-off-by: Khem Raj + +Upstream-Status: Pending +--- + gcc/common.opt | 4 ++++ + gcc/config.in | 6 ++++++ + gcc/configure | 16 ++++++++++++++++ + gcc/configure.ac | 10 ++++++++++ + gcc/doc/invoke.texi | 9 +++++++++ + gcc/gcc.cc | 2 ++ + gcc/incpath.cc | 21 +++++++++++++++++++++ + 7 files changed, 68 insertions(+) + +diff --git a/gcc/common.opt b/gcc/common.opt +index 8a0dafc522d..0357868e22c 100644 +--- a/gcc/common.opt ++++ b/gcc/common.opt +@@ -710,6 +710,10 @@ Wreturn-local-addr + Common Var(warn_return_local_addr) Init(1) Warning + Warn about returning a pointer/reference to a local or temporary variable. + ++Wpoison-system-directories ++Common Var(flag_poison_system_directories) Init(1) Warning ++Warn for -I and -L options using system directories if cross compiling ++ + Wshadow + Common Var(warn_shadow) Warning + Warn when one variable shadows another. Same as -Wshadow=global. +diff --git a/gcc/config.in b/gcc/config.in +index 64c27c9cfac..f0fbf123aa8 100644 +--- a/gcc/config.in ++++ b/gcc/config.in +@@ -230,6 +230,12 @@ + #endif + + ++/* Define to warn for use of native system header directories */ ++#ifndef USED_FOR_TARGET ++#undef ENABLE_POISON_SYSTEM_DIRECTORIES ++#endif ++ ++ + /* Define if you want all operations on RTL (the basic data structure of the + optimizer and back end) to be checked for dynamic type safety at runtime. + This is quite expensive. */ +diff --git a/gcc/configure b/gcc/configure +index 5ce0557719a..e9060112384 100755 +--- a/gcc/configure ++++ b/gcc/configure +@@ -1023,6 +1023,7 @@ enable_maintainer_mode + enable_link_mutex + enable_link_serialization + enable_version_specific_runtime_libs ++enable_poison_system_directories + enable_plugin + enable_host_shared + enable_libquadmath_support +@@ -1785,6 +1786,8 @@ Optional Features: + --enable-version-specific-runtime-libs + specify that runtime libraries should be installed + in a compiler-specific directory ++ --enable-poison-system-directories ++ warn for use of native system header directories + --enable-plugin enable plugin support + --enable-host-shared build host code as shared libraries + --disable-libquadmath-support +@@ -31982,6 +31985,19 @@ if test "${enable_version_specific_runtime_libs+set}" = set; then : + fi + + ++# Check whether --enable-poison-system-directories was given. ++if test "${enable_poison_system_directories+set}" = set; then : ++ enableval=$enable_poison_system_directories; ++else ++ enable_poison_system_directories=no ++fi ++ ++if test "x${enable_poison_system_directories}" = "xyes"; then ++ ++$as_echo "#define ENABLE_POISON_SYSTEM_DIRECTORIES 1" >>confdefs.h ++ ++fi ++ + # Substitute configuration variables + + +diff --git a/gcc/configure.ac b/gcc/configure.ac +index 23bee7010a3..75a7048045c 100644 +--- a/gcc/configure.ac ++++ b/gcc/configure.ac +@@ -7421,6 +7421,16 @@ AC_ARG_ENABLE(version-specific-runtime-libs, + [specify that runtime libraries should be + installed in a compiler-specific directory])]) + ++AC_ARG_ENABLE([poison-system-directories], ++ AS_HELP_STRING([--enable-poison-system-directories], ++ [warn for use of native system header directories]),, ++ [enable_poison_system_directories=no]) ++if test "x${enable_poison_system_directories}" = "xyes"; then ++ AC_DEFINE([ENABLE_POISON_SYSTEM_DIRECTORIES], ++ [1], ++ [Define to warn for use of native system header directories]) ++fi ++ + # Substitute configuration variables + AC_SUBST(subdirs) + AC_SUBST(srcdir) +diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi +index 07b440190c3..b2de464798a 100644 +--- a/gcc/doc/invoke.texi ++++ b/gcc/doc/invoke.texi +@@ -379,6 +379,7 @@ Objective-C and Objective-C++ Dialects}. + -Wpacked -Wno-packed-bitfield-compat -Wpacked-not-aligned -Wpadded @gol + -Wparentheses -Wno-pedantic-ms-format @gol + -Wpointer-arith -Wno-pointer-compare -Wno-pointer-to-int-cast @gol ++-Wno-poison-system-directories @gol + -Wno-pragmas -Wno-prio-ctor-dtor -Wredundant-decls @gol + -Wrestrict -Wno-return-local-addr -Wreturn-type @gol + -Wno-scalar-storage-order -Wsequence-point @gol +@@ -8029,6 +8030,14 @@ made up of data only and thus requires no special treatment. But, for + most targets, it is made up of code and thus requires the stack to be + made executable in order for the program to work properly. + ++@item -Wno-poison-system-directories ++@opindex Wno-poison-system-directories ++Do not warn for @option{-I} or @option{-L} options using system ++directories such as @file{/usr/include} when cross compiling. This ++option is intended for use in chroot environments when such ++directories contain the correct headers and libraries for the target ++system rather than the host. ++ + @item -Wfloat-equal + @opindex Wfloat-equal + @opindex Wno-float-equal +diff --git a/gcc/gcc.cc b/gcc/gcc.cc +index bb07cc244e3..47fb5802194 100644 +--- a/gcc/gcc.cc ++++ b/gcc/gcc.cc +@@ -1159,6 +1159,8 @@ proper position among the other output files. */ + "%{fuse-ld=*:-fuse-ld=%*} " LINK_COMPRESS_DEBUG_SPEC \ + "%X %{o*} %{e*} %{N} %{n} %{r}\ + %{s} %{t} %{u*} %{z} %{Z} %{!nostdlib:%{!r:%{!nostartfiles:%S}}} \ ++ %{Wno-poison-system-directories:--no-poison-system-directories} \ ++ %{Werror=poison-system-directories:--error-poison-system-directories} \ + %{static|no-pie|static-pie:} %@{L*} %(mfwrap) %(link_libgcc) " \ + VTABLE_VERIFICATION_SPEC " " SANITIZER_EARLY_SPEC " %o "" \ + %{fopenacc|fopenmp|%:gt(%{ftree-parallelize-loops=*:%*} 1):\ +diff --git a/gcc/incpath.cc b/gcc/incpath.cc +index bd2a97938eb..c80f100f476 100644 +--- a/gcc/incpath.cc ++++ b/gcc/incpath.cc +@@ -26,6 +26,7 @@ + #include "intl.h" + #include "incpath.h" + #include "cppdefault.h" ++#include "diagnostic-core.h" + + /* Microsoft Windows does not natively support inodes. + VMS has non-numeric inodes. */ +@@ -399,6 +400,26 @@ merge_include_chains (const char *sysroot, cpp_reader *pfile, int verbose) + } + fprintf (stderr, _("End of search list.\n")); + } ++ ++#ifdef ENABLE_POISON_SYSTEM_DIRECTORIES ++ if (flag_poison_system_directories) ++ { ++ struct cpp_dir *p; ++ ++ for (p = heads[INC_QUOTE]; p; p = p->next) ++ { ++ if ((!strncmp (p->name, "/usr/include", 12)) ++ || (!strncmp (p->name, "/usr/local/include", 18)) ++ || (!strncmp (p->name, "/usr/X11R6/include", 18)) ++ || (!strncmp (p->name, "/sw/include", 11)) ++ || (!strncmp (p->name, "/opt/include", 12))) ++ warning (OPT_Wpoison_system_directories, ++ "include location \"%s\" is unsafe for " ++ "cross-compilation", ++ p->name); ++ } ++ } ++#endif + } + + /* Use given -I paths for #include "..." but not #include <...>, and diff --git a/cross/gcc-riscv64/0003-specs-turn-on-Wl-z-now-by-default.patch b/cross/gcc-riscv64/0003-specs-turn-on-Wl-z-now-by-default.patch new file mode 100644 index 000000000..61b9c1a7c --- /dev/null +++ b/cross/gcc-riscv64/0003-specs-turn-on-Wl-z-now-by-default.patch @@ -0,0 +1,41 @@ +From 40e45739e7d3787acd13b5b9a4c27d843de0ffe2 Mon Sep 17 00:00:00 2001 +From: Ariadne Conill +Date: Fri, 21 Aug 2020 06:45:49 +0000 +Subject: [PATCH] specs: turn on -Wl,-z,now by default + +Previously, we also used to turn on -z relro here, but we now build +binutils with --enable-relro, which is functionally equivalent. + +Binutils does not appear to have a similar option for enabling -z +now by default. +--- + gcc/doc/invoke.texi | 3 +++ + gcc/gcc.cc | 1 + + 2 files changed, 4 insertions(+) + +diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi +index b2de464798a..83bd1bde433 100644 +--- a/gcc/doc/invoke.texi ++++ b/gcc/doc/invoke.texi +@@ -16872,6 +16872,9 @@ For example, @option{-Wl,-Map,output.map} passes @option{-Map output.map} to the + linker. When using the GNU linker, you can also get the same effect with + @option{-Wl,-Map=output.map}. + ++NOTE: In Alpine Linux, for LDFLAGS, the option ++@option{-Wl,-z,now} is used. To disable, use @option{-Wl,-z,nonow}. ++ + @item -u @var{symbol} + @opindex u + Pretend the symbol @var{symbol} is undefined, to force linking of +diff --git a/gcc/gcc.cc b/gcc/gcc.cc +index 47fb5802194..d18b5d7b59a 100644 +--- a/gcc/gcc.cc ++++ b/gcc/gcc.cc +@@ -1157,6 +1157,7 @@ proper position among the other output files. */ + "%{flto|flto=*:% +Date: Fri, 21 Aug 2020 06:46:22 +0000 +Subject: [PATCH] Turn on -D_FORTIFY_SOURCE=2 by default for C, C++, ObjC, + ObjC++, if the optimization level is > 0 + +--- + gcc/c-family/c-cppbuiltin.cc | 4 ++++ + gcc/doc/invoke.texi | 6 ++++++ + 2 files changed, 10 insertions(+) + +diff --git a/gcc/c-family/c-cppbuiltin.cc b/gcc/c-family/c-cppbuiltin.cc +index 4672ae8486a..573c021e1e8 100644 +--- a/gcc/c-family/c-cppbuiltin.cc ++++ b/gcc/c-family/c-cppbuiltin.cc +@@ -1510,6 +1510,10 @@ c_cpp_builtins (cpp_reader *pfile) + builtin_define_with_value ("__REGISTER_PREFIX__", REGISTER_PREFIX, 0); + builtin_define_with_value ("__USER_LABEL_PREFIX__", user_label_prefix, 0); + ++ /* Fortify Source enabled by default for optimization levels > 0 */ ++ if (optimize) ++ builtin_define_with_int_value ("_FORTIFY_SOURCE", 2); ++ + /* Misc. */ + if (flag_gnu89_inline) + cpp_define (pfile, "__GNUC_GNU_INLINE__"); +diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi +index 83bd1bde433..dda299a9987 100644 +--- a/gcc/doc/invoke.texi ++++ b/gcc/doc/invoke.texi +@@ -10896,6 +10896,12 @@ also turns on the following optimization flags: + Please note the warning under @option{-fgcse} about + invoking @option{-O2} on programs that use computed gotos. + ++NOTE: In Alpine Linux, @option{-D_FORTIFY_SOURCE=2} is ++set by default, and is activated when @option{-O} is set to 2 or higher. ++This enables additional compile-time and run-time checks for several libc ++functions. To disable, specify either @option{-U_FORTIFY_SOURCE} or ++@option{-D_FORTIFY_SOURCE=0}. ++ + @item -O3 + @opindex O3 + Optimize yet more. @option{-O3} turns on all optimizations specified diff --git a/cross/gcc-riscv64/0005-On-linux-targets-pass-as-needed-by-default-to-the-li.patch b/cross/gcc-riscv64/0005-On-linux-targets-pass-as-needed-by-default-to-the-li.patch new file mode 100644 index 000000000..e55ce8c67 --- /dev/null +++ b/cross/gcc-riscv64/0005-On-linux-targets-pass-as-needed-by-default-to-the-li.patch @@ -0,0 +1,269 @@ +From 75d1a35180cf0967f062765314bf091a64032062 Mon Sep 17 00:00:00 2001 +From: Ariadne Conill +Date: Fri, 21 Aug 2020 06:46:56 +0000 +Subject: [PATCH] On linux targets pass --as-needed by default to the linker, + but always link the sanitizer libraries with --no-as-needed. + +--- + gcc/config/aarch64/aarch64-linux.h | 1 + + gcc/config/alpha/linux-elf.h | 2 +- + gcc/config/arm/linux-elf.h | 1 + + gcc/config/gnu-user.h | 6 +++--- + gcc/config/i386/gnu-user.h | 2 +- + gcc/config/i386/gnu-user64.h | 1 + + gcc/config/ia64/linux.h | 2 +- + gcc/config/mips/gnu-user.h | 1 + + gcc/config/riscv/linux.h | 1 + + gcc/config/rs6000/linux64.h | 4 ++-- + gcc/config/rs6000/sysv4.h | 2 +- + gcc/config/s390/linux.h | 2 +- + gcc/config/sparc/linux.h | 2 +- + gcc/gcc.cc | 28 ++++++++++++++++++++-------- + 14 files changed, 36 insertions(+), 19 deletions(-) + +diff --git a/gcc/config/aarch64/aarch64-linux.h b/gcc/config/aarch64/aarch64-linux.h +index 5e4553d79f5..b516f3ef97f 100644 +--- a/gcc/config/aarch64/aarch64-linux.h ++++ b/gcc/config/aarch64/aarch64-linux.h +@@ -35,6 +35,7 @@ + #define CPP_SPEC "%{pthread:-D_REENTRANT}" + + #define LINUX_TARGET_LINK_SPEC "%{h*} \ ++ --as-needed \ + %{static:-Bstatic} \ + %{shared:-shared} \ + %{symbolic:-Bsymbolic} \ +diff --git a/gcc/config/alpha/linux-elf.h b/gcc/config/alpha/linux-elf.h +index 17f16a55910..9ec667e9a5e 100644 +--- a/gcc/config/alpha/linux-elf.h ++++ b/gcc/config/alpha/linux-elf.h +@@ -37,7 +37,7 @@ along with GCC; see the file COPYING3. If not see + + #define ELF_DYNAMIC_LINKER GNU_USER_DYNAMIC_LINKER + +-#define LINK_SPEC "-m elf64alpha %{G*} %{relax:-relax} \ ++#define LINK_SPEC "-m elf64alpha --as-needed %{G*} %{relax:-relax} \ + %{O*:-O3} %{!O*:-O1} \ + %{shared:-shared} \ + %{!shared: \ +diff --git a/gcc/config/arm/linux-elf.h b/gcc/config/arm/linux-elf.h +index df3da67c4f0..7532bc29f9b 100644 +--- a/gcc/config/arm/linux-elf.h ++++ b/gcc/config/arm/linux-elf.h +@@ -70,6 +70,7 @@ + %{rdynamic:-export-dynamic} \ + %{!shared:-dynamic-linker " GNU_USER_DYNAMIC_LINKER "}} \ + -X \ ++ --as-needed \ + %{mbig-endian:-EB} %{mlittle-endian:-EL}" \ + SUBTARGET_EXTRA_LINK_SPEC + +diff --git a/gcc/config/gnu-user.h b/gcc/config/gnu-user.h +index 857c0e077bf..8433e56c3e1 100644 +--- a/gcc/config/gnu-user.h ++++ b/gcc/config/gnu-user.h +@@ -136,7 +136,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see + #define LIBASAN_EARLY_SPEC "%{!shared:libasan_preinit%O%s} " \ + "%{static-libasan:%{!shared:" \ + LD_STATIC_OPTION " --whole-archive -lasan --no-whole-archive " \ +- LD_DYNAMIC_OPTION "}}%{!static-libasan:-lasan}" ++ LD_DYNAMIC_OPTION "}}%{!static-libasan:%{!fuse-ld=gold:--push-state} --no-as-needed -lasan %{fuse-ld=gold:--as-needed;:--pop-state}}" + #undef LIBHWASAN_EARLY_SPEC + #define LIBHWASAN_EARLY_SPEC "%{static-libhwasan:%{!shared:" \ + LD_STATIC_OPTION " --whole-archive -lhwasan --no-whole-archive " \ +@@ -145,12 +145,12 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see + #define LIBTSAN_EARLY_SPEC "%{!shared:libtsan_preinit%O%s} " \ + "%{static-libtsan:%{!shared:" \ + LD_STATIC_OPTION " --whole-archive -ltsan --no-whole-archive " \ +- LD_DYNAMIC_OPTION "}}%{!static-libtsan:-ltsan}" ++ LD_DYNAMIC_OPTION "}}%{!static-libtsan:%{!fuse-ld=gold:--push-state} --no-as-needed -ltsan %{fuse-ld=gold:--as-needed;:--pop-state}}" + #undef LIBLSAN_EARLY_SPEC + #define LIBLSAN_EARLY_SPEC "%{!shared:liblsan_preinit%O%s} " \ + "%{static-liblsan:%{!shared:" \ + LD_STATIC_OPTION " --whole-archive -llsan --no-whole-archive " \ +- LD_DYNAMIC_OPTION "}}%{!static-liblsan:-llsan}" ++ LD_DYNAMIC_OPTION "}}%{!static-liblsan:%{!fuse-ld=gold:--push-state} --no-as-needed -llsan %{fuse-ld=gold:--as-needed;:--pop-state}}" + #endif + + #undef TARGET_F951_OPTIONS +diff --git a/gcc/config/i386/gnu-user.h b/gcc/config/i386/gnu-user.h +index 0102b2a6f3b..994414c1845 100644 +--- a/gcc/config/i386/gnu-user.h ++++ b/gcc/config/i386/gnu-user.h +@@ -68,7 +68,7 @@ along with GCC; see the file COPYING3. If not see + { "link_emulation", GNU_USER_LINK_EMULATION },\ + { "dynamic_linker", GNU_USER_DYNAMIC_LINKER } + +-#define GNU_USER_TARGET_LINK_SPEC "-m %(link_emulation) %{shared:-shared} \ ++#define GNU_USER_TARGET_LINK_SPEC "-m %(link_emulation) --as-needed %{shared:-shared} \ + %{!shared: \ + %{!static: \ + %{!static-pie: \ +diff --git a/gcc/config/i386/gnu-user64.h b/gcc/config/i386/gnu-user64.h +index abc8cf624ca..fe656aeae27 100644 +--- a/gcc/config/i386/gnu-user64.h ++++ b/gcc/config/i386/gnu-user64.h +@@ -56,6 +56,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see + "%{" SPEC_64 ":-m " GNU_USER_LINK_EMULATION64 "} \ + %{" SPEC_32 ":-m " GNU_USER_LINK_EMULATION32 "} \ + %{" SPEC_X32 ":-m " GNU_USER_LINK_EMULATIONX32 "} \ ++ --as-needed \ + %{shared:-shared} \ + %{!shared: \ + %{!static: \ +diff --git a/gcc/config/ia64/linux.h b/gcc/config/ia64/linux.h +index 93510098ccc..3813e536423 100644 +--- a/gcc/config/ia64/linux.h ++++ b/gcc/config/ia64/linux.h +@@ -58,7 +58,7 @@ do { \ + #define GLIBC_DYNAMIC_LINKER "/lib/ld-linux-ia64.so.2" + + #undef LINK_SPEC +-#define LINK_SPEC "\ ++#define LINK_SPEC " --as-needed \ + %{shared:-shared} \ + %{!shared: \ + %{!static: \ +diff --git a/gcc/config/mips/gnu-user.h b/gcc/config/mips/gnu-user.h +index 6aad7192e69..e1256a55add 100644 +--- a/gcc/config/mips/gnu-user.h ++++ b/gcc/config/mips/gnu-user.h +@@ -55,6 +55,7 @@ along with GCC; see the file COPYING3. If not see + #undef GNU_USER_TARGET_LINK_SPEC + #define GNU_USER_TARGET_LINK_SPEC "\ + %{G*} %{EB} %{EL} %{mips*} %{shared} \ ++ -as-needed \ + %{!shared: \ + %{!static: \ + %{rdynamic:-export-dynamic} \ +diff --git a/gcc/config/riscv/linux.h b/gcc/config/riscv/linux.h +index 38803723ba9..3067ed6eac8 100644 +--- a/gcc/config/riscv/linux.h ++++ b/gcc/config/riscv/linux.h +@@ -58,6 +58,7 @@ along with GCC; see the file COPYING3. If not see + "%{mabi=ilp32:_ilp32}" + + #define LINK_SPEC "\ ++-as-needed \ + -melf" XLEN_SPEC DEFAULT_ENDIAN_SPEC "riscv" LD_EMUL_SUFFIX " \ + %{mno-relax:--no-relax} \ + %{mbig-endian:-EB} \ +diff --git a/gcc/config/rs6000/linux64.h b/gcc/config/rs6000/linux64.h +index b2a7afabc73..34ceb4e4fce 100644 +--- a/gcc/config/rs6000/linux64.h ++++ b/gcc/config/rs6000/linux64.h +@@ -377,13 +377,13 @@ extern int dot_symbols; + " -m elf64ppc") + #endif + +-#define LINK_OS_LINUX_SPEC32 LINK_OS_LINUX_EMUL32 " %{!shared: %{!static: \ ++#define LINK_OS_LINUX_SPEC32 LINK_OS_LINUX_EMUL32 " --as-needed %{!shared: %{!static: \ + %{!static-pie: \ + %{rdynamic:-export-dynamic} \ + -dynamic-linker " GNU_USER_DYNAMIC_LINKER32 "}}} \ + %(link_os_extra_spec32)" + +-#define LINK_OS_LINUX_SPEC64 LINK_OS_LINUX_EMUL64 " %{!shared: %{!static: \ ++#define LINK_OS_LINUX_SPEC64 LINK_OS_LINUX_EMUL64 " --as-needed %{!shared: %{!static: \ + %{!static-pie: \ + %{rdynamic:-export-dynamic} \ + -dynamic-linker " GNU_USER_DYNAMIC_LINKER64 "}}} \ +diff --git a/gcc/config/rs6000/sysv4.h b/gcc/config/rs6000/sysv4.h +index 7e2519de5d4..61215a7a1b3 100644 +--- a/gcc/config/rs6000/sysv4.h ++++ b/gcc/config/rs6000/sysv4.h +@@ -788,7 +788,7 @@ GNU_USER_TARGET_CC1_SPEC + #define GNU_USER_DYNAMIC_LINKER GLIBC_DYNAMIC_LINKER + #endif + +-#define LINK_OS_LINUX_SPEC "-m elf32ppclinux %{!shared: %{!static: \ ++#define LINK_OS_LINUX_SPEC "-m elf32ppclinux --as-needed %{!shared: %{!static: \ + %{rdynamic:-export-dynamic} \ + -dynamic-linker " GNU_USER_DYNAMIC_LINKER "}}" + +diff --git a/gcc/config/s390/linux.h b/gcc/config/s390/linux.h +index d7b7e7a7b02..d2287f14f2e 100644 +--- a/gcc/config/s390/linux.h ++++ b/gcc/config/s390/linux.h +@@ -82,7 +82,7 @@ along with GCC; see the file COPYING3. If not see + + #undef LINK_SPEC + #define LINK_SPEC \ +- "%{m31:-m elf_s390}%{m64:-m elf64_s390} \ ++ "%{m31:-m elf_s390}%{m64:-m elf64_s390} --as-needed \ + %{shared:-shared} \ + %{!shared: \ + %{static:-static} \ +diff --git a/gcc/config/sparc/linux.h b/gcc/config/sparc/linux.h +index 6a809e9092d..93bfb92d3ff 100644 +--- a/gcc/config/sparc/linux.h ++++ b/gcc/config/sparc/linux.h +@@ -81,7 +81,7 @@ extern const char *host_detect_local_cpu (int argc, const char **argv); + #define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2" + + #undef LINK_SPEC +-#define LINK_SPEC "-m elf32_sparc %{shared:-shared} \ ++#define LINK_SPEC "-m elf32_sparc --as-needed %{shared:-shared} \ + %{!mno-relax:%{!r:-relax}} \ + %{!shared: \ + %{!static: \ +diff --git a/gcc/gcc.cc b/gcc/gcc.cc +index d18b5d7b59a..3b76311b544 100644 +--- a/gcc/gcc.cc ++++ b/gcc/gcc.cc +@@ -744,8 +744,11 @@ proper position among the other output files. */ + #ifdef LIBASAN_EARLY_SPEC + #define LIBASAN_SPEC STATIC_LIBASAN_LIBS + #elif defined(HAVE_LD_STATIC_DYNAMIC) +-#define LIBASAN_SPEC "%{static-libasan:" LD_STATIC_OPTION \ +- "} -lasan %{static-libasan:" LD_DYNAMIC_OPTION "}" \ ++#define LIBASAN_SPEC "%{static-libasan:" LD_STATIC_OPTION "}" \ ++ " %{!static-libasan:%{!fuse-ld=gold:--push-state }--no-as-needed}" \ ++ " -lasan " \ ++ " %{static-libasan:" LD_DYNAMIC_OPTION "}" \ ++ " %{!static-libasan:%{fuse-ld=gold:--as-needed;:--pop-state}}" \ + STATIC_LIBASAN_LIBS + #else + #define LIBASAN_SPEC "-lasan" STATIC_LIBASAN_LIBS +@@ -780,8 +783,11 @@ proper position among the other output files. */ + #ifdef LIBTSAN_EARLY_SPEC + #define LIBTSAN_SPEC STATIC_LIBTSAN_LIBS + #elif defined(HAVE_LD_STATIC_DYNAMIC) +-#define LIBTSAN_SPEC "%{static-libtsan:" LD_STATIC_OPTION \ +- "} -ltsan %{static-libtsan:" LD_DYNAMIC_OPTION "}" \ ++#define LIBTSAN_SPEC "%{static-libtsan:" LD_STATIC_OPTION "}" \ ++ " %{!static-libtsan:%{!fuse-ld=gold:--push-state }--no-as-needed}" \ ++ " -ltsan " \ ++ " %{static-libtsan:" LD_DYNAMIC_OPTION "}" \ ++ " %{!static-libtsan:%{fuse-ld=gold:--as-needed;:--pop-state}}" \ + STATIC_LIBTSAN_LIBS + #else + #define LIBTSAN_SPEC "-ltsan" STATIC_LIBTSAN_LIBS +@@ -798,8 +804,11 @@ proper position among the other output files. */ + #ifdef LIBLSAN_EARLY_SPEC + #define LIBLSAN_SPEC STATIC_LIBLSAN_LIBS + #elif defined(HAVE_LD_STATIC_DYNAMIC) +-#define LIBLSAN_SPEC "%{static-liblsan:" LD_STATIC_OPTION \ +- "} -llsan %{static-liblsan:" LD_DYNAMIC_OPTION "}" \ ++#define LIBLSAN_SPEC "%{static-liblsan:" LD_STATIC_OPTION "}" \ ++ " %{!static-liblsan:%{!fuse-ld=gold:--push-state }--no-as-needed}" \ ++ " -llsan " \ ++ " %{static-liblsan:" LD_DYNAMIC_OPTION "}" \ ++ " %{!static-liblsan:%{fuse-ld=gold:--as-needed;:--pop-state}}" \ + STATIC_LIBLSAN_LIBS + #else + #define LIBLSAN_SPEC "-llsan" STATIC_LIBLSAN_LIBS +@@ -814,8 +823,11 @@ proper position among the other output files. */ + #define STATIC_LIBUBSAN_LIBS \ + " %{static-libubsan|static:%:include(libsanitizer.spec)%(link_libubsan)}" + #ifdef HAVE_LD_STATIC_DYNAMIC +-#define LIBUBSAN_SPEC "%{static-libubsan:" LD_STATIC_OPTION \ +- "} -lubsan %{static-libubsan:" LD_DYNAMIC_OPTION "}" \ ++#define LIBUBSAN_SPEC "%{static-libubsan:" LD_STATIC_OPTION "}" \ ++ " %{!static-libubsan:%{!fuse-ld=gold:--push-state }--no-as-needed}" \ ++ " -lubsan " \ ++ " %{static-libubsan:" LD_DYNAMIC_OPTION "}" \ ++ " %{!static-libubsan:%{fuse-ld=gold:--as-needed;:--pop-state}}" \ + STATIC_LIBUBSAN_LIBS + #else + #define LIBUBSAN_SPEC "-lubsan" STATIC_LIBUBSAN_LIBS diff --git a/cross/gcc-riscv64/0006-Enable-Wformat-and-Wformat-security-by-default.patch b/cross/gcc-riscv64/0006-Enable-Wformat-and-Wformat-security-by-default.patch new file mode 100644 index 000000000..d500b7487 --- /dev/null +++ b/cross/gcc-riscv64/0006-Enable-Wformat-and-Wformat-security-by-default.patch @@ -0,0 +1,31 @@ +From c664283dd30949c5299d1c45bd5740bcfe993d22 Mon Sep 17 00:00:00 2001 +From: Ariadne Conill +Date: Fri, 21 Aug 2020 06:47:43 +0000 +Subject: [PATCH] Enable -Wformat and -Wformat-security by default. + +--- + gcc/c-family/c.opt | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/gcc/c-family/c.opt b/gcc/c-family/c.opt +index 07da40ef43b..8683f706426 100644 +--- a/gcc/c-family/c.opt ++++ b/gcc/c-family/c.opt +@@ -692,7 +692,7 @@ Warn about function calls with format strings that write past the end + of the destination region. Same as -Wformat-overflow=1. + + Wformat-security +-C ObjC C++ ObjC++ Var(warn_format_security) Warning LangEnabledBy(C ObjC C++ ObjC++,Wformat=, warn_format >= 2, 0) ++C ObjC C++ ObjC++ Var(warn_format_security) Init(1) Warning LangEnabledBy(C ObjC C++ ObjC++,Wformat=, warn_format >= 2, 0) + Warn about possible security problems with format functions. + + Wformat-signedness +@@ -713,7 +713,7 @@ C ObjC C++ ObjC++ Var(warn_format_zero_length) Warning LangEnabledBy(C ObjC C++ + Warn about zero-length formats. + + Wformat= +-C ObjC C++ ObjC++ Joined RejectNegative UInteger Var(warn_format) Warning LangEnabledBy(C ObjC C++ ObjC++,Wall, 1, 0) IntegerRange(0, 2) ++C ObjC C++ ObjC++ Joined RejectNegative UInteger Var(warn_format) Init(1) Warning LangEnabledBy(C ObjC C++ ObjC++,Wall, 1, 0) IntegerRange(0, 2) + Warn about printf/scanf/strftime/strfmon format string anomalies. + + Wformat-overflow= diff --git a/cross/gcc-riscv64/0007-Enable-Wtrampolines-by-default.patch b/cross/gcc-riscv64/0007-Enable-Wtrampolines-by-default.patch new file mode 100644 index 000000000..f3df217dc --- /dev/null +++ b/cross/gcc-riscv64/0007-Enable-Wtrampolines-by-default.patch @@ -0,0 +1,22 @@ +From e4d0ec43e772b6dc7c3708aed5309897df26a125 Mon Sep 17 00:00:00 2001 +From: Ariadne Conill +Date: Fri, 21 Aug 2020 06:48:24 +0000 +Subject: [PATCH] Enable -Wtrampolines by default. + +--- + gcc/common.opt | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/gcc/common.opt b/gcc/common.opt +index 0357868e22c..6d5e5eebe60 100644 +--- a/gcc/common.opt ++++ b/gcc/common.opt +@@ -802,7 +802,7 @@ Common Var(warn_system_headers) Warning + Do not suppress warnings from system headers. + + Wtrampolines +-Common Var(warn_trampolines) Warning ++Common Var(warn_trampolines) Init(1) Warning + Warn whenever a trampoline is generated. + + Wtrivial-auto-var-init diff --git a/cross/gcc-riscv64/0008-Disable-ssp-on-nostdlib-nodefaultlibs-and-ffreestand.patch b/cross/gcc-riscv64/0008-Disable-ssp-on-nostdlib-nodefaultlibs-and-ffreestand.patch new file mode 100644 index 000000000..a0dc5862b --- /dev/null +++ b/cross/gcc-riscv64/0008-Disable-ssp-on-nostdlib-nodefaultlibs-and-ffreestand.patch @@ -0,0 +1,50 @@ +From 27e5d5bd3fed9006a2958d2b09750d15ad07383b Mon Sep 17 00:00:00 2001 +From: Ariadne Conill +Date: Fri, 21 Aug 2020 06:49:40 +0000 +Subject: [PATCH] Disable ssp on -nostdlib, -nodefaultlibs and -ffreestanding + Change the buffer size. + +--- + gcc/gcc.cc | 8 +++++++- + gcc/params.opt | 2 +- + 2 files changed, 8 insertions(+), 2 deletions(-) + +diff --git a/gcc/gcc.cc b/gcc/gcc.cc +index 3b76311b544..cc99d0b7aa1 100644 +--- a/gcc/gcc.cc ++++ b/gcc/gcc.cc +@@ -996,6 +996,12 @@ proper position among the other output files. */ + #define LINK_GCC_C_SEQUENCE_SPEC "%G %{!nolibc:%L %G}" + #endif + ++#ifdef ENABLE_DEFAULT_SSP ++#define NO_SSP_SPEC "%{nostdlib|nodefaultlibs|ffreestanding:-fno-stack-protector} " ++#else ++#define NO_SSP_SPEC "" ++#endif ++ + #ifndef LINK_SSP_SPEC + #ifdef TARGET_LIBC_PROVIDES_SSP + #define LINK_SSP_SPEC "%{fstack-protector|fstack-protector-all" \ +@@ -1295,7 +1301,7 @@ static const char *cc1_options = + %{-version:--version}\ + %{-help=*:--help=%*}\ + %{!fsyntax-only:%{S:%W{o*}%{!o*:-o %w%b.s}}}\ +- %{fsyntax-only:-o %j} %{-param*}\ ++ %{fsyntax-only:-o %j} %{-param*} " NO_SSP_SPEC "\ + %{coverage:-fprofile-arcs -ftest-coverage}\ + %{fprofile-arcs|fprofile-generate*|coverage:\ + %{!fprofile-update=single:\ +diff --git a/gcc/params.opt b/gcc/params.opt +index b88e1372005..82a7e25dd2f 100644 +--- a/gcc/params.opt ++++ b/gcc/params.opt +@@ -1012,7 +1012,7 @@ Common Joined UInteger Var(param_ssa_name_def_chain_limit) Init(512) Param Optim + The maximum number of SSA_NAME assignments to follow in determining a value. + + -param=ssp-buffer-size= +-Common Joined UInteger Var(param_ssp_buffer_size) Init(8) IntegerRange(1, 65536) Param Optimization ++Common Joined UInteger Var(param_ssp_buffer_size) Init(4) IntegerRange(1, 65536) Param Optimization + The lower bound for a buffer to be considered for stack smashing protection. + + -param=stack-clash-protection-guard-size= diff --git a/cross/gcc-riscv64/0009-Ensure-that-msgfmt-doesn-t-encounter-problems-during.patch b/cross/gcc-riscv64/0009-Ensure-that-msgfmt-doesn-t-encounter-problems-during.patch new file mode 100644 index 000000000..8adaab5b5 --- /dev/null +++ b/cross/gcc-riscv64/0009-Ensure-that-msgfmt-doesn-t-encounter-problems-during.patch @@ -0,0 +1,51 @@ +From 83bf2a316222e2fe0b72968cadf4e334d41173f6 Mon Sep 17 00:00:00 2001 +From: Ariadne Conill +Date: Fri, 21 Aug 2020 06:50:33 +0000 +Subject: [PATCH] Ensure that msgfmt doesn't encounter problems during gcc + bootstrapping. + +Solves error messages like the following: + +msgfmt: /var/tmp/portage/sys-devel/gcc-4.1.2/work/build/./gcc/libgcc_s.so.1: version `GCC_4.2.0' not found (required by /usr/lib/gcc/x86_64-pc-linux-gnu/4.5.3/libstdc++.so.6) + +The libgcc_s.so used during build doesn't satisfy the needs of the +libstdc++.so that msgfmt is linked against. On the other hand, msgfmt +is used as a stand-alone application here, and what library it uses +behind the scenes is of no concern to the gcc build process. +Therefore, simply invoking it "as usual", i.e. without any special +library path, will make it work as expected here. + +2011-09-19 Martin von Gagern + +References: +https://bugs.gentoo.org/372377 +https://bugs.gentoo.org/295480 +--- + libstdc++-v3/po/Makefile.am | 1 + + libstdc++-v3/po/Makefile.in | 1 + + 2 files changed, 2 insertions(+) + +diff --git a/libstdc++-v3/po/Makefile.am b/libstdc++-v3/po/Makefile.am +index 8f51544989e..5329804d136 100644 +--- a/libstdc++-v3/po/Makefile.am ++++ b/libstdc++-v3/po/Makefile.am +@@ -38,6 +38,7 @@ MSGFMT = msgfmt + EXTRA_DIST = string_literals.cc POTFILES.in $(PACKAGE).pot $(LOCALE_IN) + + .po.mo: ++ env --unset=LD_LIBRARY_PATH \ + $(MSGFMT) -o $@ $< + + all-local: all-local-$(USE_NLS) +diff --git a/libstdc++-v3/po/Makefile.in b/libstdc++-v3/po/Makefile.in +index 243f3db7b72..822210781fa 100644 +--- a/libstdc++-v3/po/Makefile.in ++++ b/libstdc++-v3/po/Makefile.in +@@ -561,6 +561,7 @@ uninstall-am: + + + .po.mo: ++ env --unset=LD_LIBRARY_PATH \ + $(MSGFMT) -o $@ $< + + all-local: all-local-$(USE_NLS) diff --git a/cross/gcc-riscv64/0010-Don-t-declare-asprintf-if-defined-as-a-macro.patch b/cross/gcc-riscv64/0010-Don-t-declare-asprintf-if-defined-as-a-macro.patch new file mode 100644 index 000000000..071ce7f81 --- /dev/null +++ b/cross/gcc-riscv64/0010-Don-t-declare-asprintf-if-defined-as-a-macro.patch @@ -0,0 +1,25 @@ +From 190064993cd8ddbd48015c1fc1916e4110a97733 Mon Sep 17 00:00:00 2001 +From: Ariadne Conill +Date: Fri, 21 Aug 2020 06:52:07 +0000 +Subject: [PATCH] Don't declare asprintf if defined as a macro. + +--- + include/libiberty.h | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/include/libiberty.h b/include/libiberty.h +index a65ced9c820..eb20ab0f95f 100644 +--- a/include/libiberty.h ++++ b/include/libiberty.h +@@ -652,8 +652,11 @@ extern void *bsearch_r (const void *, const void *, + /* Like sprintf but provides a pointer to malloc'd storage, which must + be freed by the caller. */ + ++/* asprintf may be declared as a macro by glibc with __USE_FORTIFY_LEVEL. */ ++#ifndef asprintf + extern int asprintf (char **, const char *, ...) ATTRIBUTE_PRINTF_2; + #endif ++#endif + + /* Like asprintf but allocates memory without fail. This works like + xmalloc. */ diff --git a/cross/gcc-riscv64/0011-libiberty-copy-PIC-objects-during-build-process.patch b/cross/gcc-riscv64/0011-libiberty-copy-PIC-objects-during-build-process.patch new file mode 100644 index 000000000..bfbe4c4ff --- /dev/null +++ b/cross/gcc-riscv64/0011-libiberty-copy-PIC-objects-during-build-process.patch @@ -0,0 +1,21 @@ +From 838e1daa955d9013c462be3471497cb39641e951 Mon Sep 17 00:00:00 2001 +From: Ariadne Conill +Date: Fri, 21 Aug 2020 06:53:00 +0000 +Subject: [PATCH] libiberty: copy PIC objects during build process + +--- + libiberty/Makefile.in | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/libiberty/Makefile.in b/libiberty/Makefile.in +index 1b17c2e3a47..8db1176df2e 100644 +--- a/libiberty/Makefile.in ++++ b/libiberty/Makefile.in +@@ -265,6 +265,7 @@ $(TARGETLIB): $(REQUIRED_OFILES) $(EXTRA_OFILES) $(LIBOBJS) + $(AR) $(AR_FLAGS) $(TARGETLIB) \ + $(REQUIRED_OFILES) $(EXTRA_OFILES) $(LIBOBJS); \ + $(RANLIB) $(TARGETLIB); \ ++ cp $(TARGETLIB) ../ ; \ + cd ..; \ + else true; fi + diff --git a/cross/gcc-riscv64/0012-libitm-disable-FORTIFY.patch b/cross/gcc-riscv64/0012-libitm-disable-FORTIFY.patch new file mode 100644 index 000000000..2e5f0c157 --- /dev/null +++ b/cross/gcc-riscv64/0012-libitm-disable-FORTIFY.patch @@ -0,0 +1,30 @@ +From 717346fbbd6642ba6b0c3af2deb3771794346507 Mon Sep 17 00:00:00 2001 +From: Ariadne Conill +Date: Fri, 21 Aug 2020 06:53:36 +0000 +Subject: [PATCH] libitm: disable FORTIFY + +--- + libitm/configure.tgt | 10 ++++++++++ + 1 file changed, 10 insertions(+) + +diff --git a/libitm/configure.tgt b/libitm/configure.tgt +index 06e90973ef3..669e64236c3 100644 +--- a/libitm/configure.tgt ++++ b/libitm/configure.tgt +@@ -47,6 +47,16 @@ if test "$gcc_cv_have_tls" = yes ; then + esac + fi + ++# FIXME: error: inlining failed in call to always_inline ++# ‘int vfprintf(FILE*, const char*, __va_list_tag*)’ ++# : function body can be overwritten at link time ++# Disable Fortify in libitm for now. #508852 ++case "${target}" in ++ *-*-linux*) ++ XCFLAGS="${XCFLAGS} -U_FORTIFY_SOURCE" ++ ;; ++esac ++ + # Map the target cpu to an ARCH sub-directory. At the same time, + # work out any special compilation flags as necessary. + case "${target_cpu}" in diff --git a/cross/gcc-riscv64/0013-libgcc_s.patch b/cross/gcc-riscv64/0013-libgcc_s.patch new file mode 100644 index 000000000..258ee1f36 --- /dev/null +++ b/cross/gcc-riscv64/0013-libgcc_s.patch @@ -0,0 +1,54 @@ +From 048c394eb709bfd216e307c1b92ac7f8a7e7758b Mon Sep 17 00:00:00 2001 +From: Szabolcs Nagy +Date: Sat, 24 Oct 2015 20:09:53 +0000 +Subject: [PATCH] libgcc_s + +--- + gcc/config/i386/i386-expand.cc | 4 ++-- + libgcc/config/i386/cpuinfo.c | 6 +++--- + libgcc/config/i386/t-linux | 2 +- + 3 files changed, 6 insertions(+), 6 deletions(-) + +diff --git a/gcc/config/i386/i386-expand.cc b/gcc/config/i386/i386-expand.cc +index 31780b6daf7..d89898846e1 100644 +--- a/gcc/config/i386/i386-expand.cc ++++ b/gcc/config/i386/i386-expand.cc +@@ -12338,10 +12338,10 @@ ix86_expand_builtin (tree exp, rtx target, rtx subtarget, + { + case IX86_BUILTIN_CPU_INIT: + { +- /* Make it call __cpu_indicator_init in libgcc. */ ++ /* Make it call __cpu_indicator_init in libgcc.a. */ + tree call_expr, fndecl, type; + type = build_function_type_list (integer_type_node, NULL_TREE); +- fndecl = build_fn_decl ("__cpu_indicator_init", type); ++ fndecl = build_fn_decl ("__cpu_indicator_init_local", type); + call_expr = build_call_expr (fndecl, 0); + return expand_expr (call_expr, target, mode, EXPAND_NORMAL); + } +diff --git a/libgcc/config/i386/cpuinfo.c b/libgcc/config/i386/cpuinfo.c +index dab1d98060f..cf824b4114a 100644 +--- a/libgcc/config/i386/cpuinfo.c ++++ b/libgcc/config/i386/cpuinfo.c +@@ -63,7 +63,7 @@ __cpu_indicator_init (void) + __cpu_features2); + } + +-#if defined SHARED && defined USE_ELF_SYMVER +-__asm__ (".symver __cpu_indicator_init, __cpu_indicator_init@GCC_4.8.0"); +-__asm__ (".symver __cpu_model, __cpu_model@GCC_4.8.0"); ++#ifndef SHARED ++int __cpu_indicator_init_local (void) ++ __attribute__ ((weak, alias ("__cpu_indicator_init"))); + #endif +diff --git a/libgcc/config/i386/t-linux b/libgcc/config/i386/t-linux +index 8506a635790..564296f788e 100644 +--- a/libgcc/config/i386/t-linux ++++ b/libgcc/config/i386/t-linux +@@ -3,5 +3,5 @@ + # t-slibgcc-elf-ver and t-linux + SHLIB_MAPFILES = libgcc-std.ver $(srcdir)/config/i386/libgcc-glibc.ver + +-HOST_LIBGCC2_CFLAGS += -mlong-double-80 -DUSE_ELF_SYMVER $(CET_FLAGS) ++HOST_LIBGCC2_CFLAGS += -mlong-double-80 $(CET_FLAGS) + CRTSTUFF_T_CFLAGS += $(CET_FLAGS) diff --git a/cross/gcc-riscv64/0014-nopie.patch b/cross/gcc-riscv64/0014-nopie.patch new file mode 100644 index 000000000..7f309a77d --- /dev/null +++ b/cross/gcc-riscv64/0014-nopie.patch @@ -0,0 +1,72 @@ +From db28b1e0f3b06325026ec5b5e7cdca4e9992e05c Mon Sep 17 00:00:00 2001 +From: Szabolcs Nagy +Date: Sat, 7 Nov 2015 02:08:05 +0000 +Subject: [PATCH] nopie + +--- + gcc/configure | 27 +++++++++++++++++++++++++++ + gcc/configure.ac | 13 +++++++++++++ + 2 files changed, 40 insertions(+) + +diff --git a/gcc/configure b/gcc/configure +index e9060112384..2f6b3265a6c 100755 +--- a/gcc/configure ++++ b/gcc/configure +@@ -32497,6 +32497,33 @@ fi + $as_echo "$gcc_cv_no_pie" >&6; } + if test "$gcc_cv_no_pie" = "yes"; then + NO_PIE_FLAG="-no-pie" ++else ++ # Check if -nopie works. ++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -nopie option" >&5 ++$as_echo_n "checking for -nopie option... " >&6; } ++if test "${gcc_cv_nopie+set}" = set; then : ++ $as_echo_n "(cached) " >&6 ++else ++ saved_LDFLAGS="$LDFLAGS" ++ LDFLAGS="$LDFLAGS -nopie" ++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++int main(void) {return 0;} ++_ACEOF ++if ac_fn_cxx_try_link "$LINENO"; then : ++ gcc_cv_nopie=yes ++else ++ gcc_cv_nopie=no ++fi ++rm -f core conftest.err conftest.$ac_objext \ ++ conftest$ac_exeext conftest.$ac_ext ++ LDFLAGS="$saved_LDFLAGS" ++fi ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_nopie" >&5 ++$as_echo "$gcc_cv_nopie" >&6; } ++ if test "$gcc_cv_nopie" = "yes"; then ++ NO_PIE_FLAG="-nopie" ++ fi + fi + + +diff --git a/gcc/configure.ac b/gcc/configure.ac +index 75a7048045c..e683d3a7a5f 100644 +--- a/gcc/configure.ac ++++ b/gcc/configure.ac +@@ -7681,6 +7681,19 @@ AC_CACHE_CHECK([for -no-pie option], + LDFLAGS="$saved_LDFLAGS"]) + if test "$gcc_cv_no_pie" = "yes"; then + NO_PIE_FLAG="-no-pie" ++else ++ # Check if -nopie works. ++ AC_CACHE_CHECK([for -nopie option], ++ [gcc_cv_nopie], ++ [saved_LDFLAGS="$LDFLAGS" ++ LDFLAGS="$LDFLAGS -nopie" ++ AC_LINK_IFELSE([int main(void) {return 0;}], ++ [gcc_cv_nopie=yes], ++ [gcc_cv_nopie=no]) ++ LDFLAGS="$saved_LDFLAGS"]) ++ if test "$gcc_cv_nopie" = "yes"; then ++ NO_PIE_FLAG="-nopie" ++ fi + fi + AC_SUBST([NO_PIE_FLAG]) + diff --git a/cross/gcc-riscv64/0015-dlang-use-libucontext-on-mips64.patch b/cross/gcc-riscv64/0015-dlang-use-libucontext-on-mips64.patch new file mode 100644 index 000000000..0af9b0b91 --- /dev/null +++ b/cross/gcc-riscv64/0015-dlang-use-libucontext-on-mips64.patch @@ -0,0 +1,21 @@ +From 686e85d8a05f9f9e6c983afb13f937bd88fe84dd Mon Sep 17 00:00:00 2001 +From: Ariadne Conill +Date: Thu, 6 Jan 2022 03:18:32 +0000 +Subject: [PATCH] dlang: use libucontext on mips64 + +--- + libphobos/configure.tgt | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/libphobos/configure.tgt b/libphobos/configure.tgt +index 0063dd23249..c5e782a1238 100644 +--- a/libphobos/configure.tgt ++++ b/libphobos/configure.tgt +@@ -38,6 +38,7 @@ case "${target}" in + ;; + mips*-*-linux*) + LIBPHOBOS_SUPPORTED=yes ++ LIBDRUNTIME_NEEDS_UCONTEXT=yes + ;; + power*-*-freebsd*) + LIBPHOBOS_SUPPORTED=yes diff --git a/cross/gcc-riscv64/0016-ada-fix-shared-linking.patch b/cross/gcc-riscv64/0016-ada-fix-shared-linking.patch new file mode 100644 index 000000000..c7876ceea --- /dev/null +++ b/cross/gcc-riscv64/0016-ada-fix-shared-linking.patch @@ -0,0 +1,39 @@ +From fd642f8cd61849a9dc169588be5562ceda96a889 Mon Sep 17 00:00:00 2001 +From: Ariadne Conill +Date: Fri, 21 Aug 2020 06:59:16 +0000 +Subject: [PATCH] ada: fix shared linking + +--- + gcc/ada/link.c | 12 ++++++------ + 1 file changed, 6 insertions(+), 6 deletions(-) + +diff --git a/gcc/ada/link.c b/gcc/ada/link.c +index a7574efb472..0ad0d66463c 100644 +--- a/gcc/ada/link.c ++++ b/gcc/ada/link.c +@@ -107,9 +107,9 @@ const char *__gnat_default_libgcc_subdir = "lib"; + || defined (__NetBSD__) || defined (__OpenBSD__) \ + || defined (__QNX__) + const char *__gnat_object_file_option = "-Wl,@"; +-const char *__gnat_run_path_option = "-Wl,-rpath,"; +-char __gnat_shared_libgnat_default = STATIC; +-char __gnat_shared_libgcc_default = STATIC; ++const char *__gnat_run_path_option = ""; ++char __gnat_shared_libgnat_default = SHARED; ++char __gnat_shared_libgcc_default = SHARED; + int __gnat_link_max = 8192; + unsigned char __gnat_objlist_file_supported = 1; + const char *__gnat_object_library_extension = ".a"; +@@ -129,9 +129,9 @@ const char *__gnat_default_libgcc_subdir = "lib"; + + #elif defined (__linux__) || defined (__GLIBC__) + const char *__gnat_object_file_option = "-Wl,@"; +-const char *__gnat_run_path_option = "-Wl,-rpath,"; +-char __gnat_shared_libgnat_default = STATIC; +-char __gnat_shared_libgcc_default = STATIC; ++const char *__gnat_run_path_option = ""; ++char __gnat_shared_libgnat_default = SHARED; ++char __gnat_shared_libgcc_default = SHARED; + int __gnat_link_max = 8192; + unsigned char __gnat_objlist_file_supported = 1; + const char *__gnat_object_library_extension = ".a"; diff --git a/cross/gcc-riscv64/0017-build-fix-CXXFLAGS_FOR_BUILD-passing.patch b/cross/gcc-riscv64/0017-build-fix-CXXFLAGS_FOR_BUILD-passing.patch new file mode 100644 index 000000000..41548680f --- /dev/null +++ b/cross/gcc-riscv64/0017-build-fix-CXXFLAGS_FOR_BUILD-passing.patch @@ -0,0 +1,21 @@ +From a547632f5c7caec4a164e8d5e5b568fb7a461365 Mon Sep 17 00:00:00 2001 +From: Ariadne Conill +Date: Fri, 21 Aug 2020 06:59:43 +0000 +Subject: [PATCH] build: fix CXXFLAGS_FOR_BUILD passing + +--- + Makefile.in | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/Makefile.in b/Makefile.in +index 593495e1650..b96f60e33e2 100644 +--- a/Makefile.in ++++ b/Makefile.in +@@ -176,6 +176,7 @@ BUILD_EXPORTS = \ + # built for the build system to override those in BASE_FLAGS_TO_PASS. + EXTRA_BUILD_FLAGS = \ + CFLAGS="$(CFLAGS_FOR_BUILD)" \ ++ CXXFLAGS="$(CXXFLAGS_FOR_BUILD)" \ + LDFLAGS="$(LDFLAGS_FOR_BUILD)" + + # This is the list of directories to built for the host system. diff --git a/cross/gcc-riscv64/0018-add-fortify-headers-paths.patch b/cross/gcc-riscv64/0018-add-fortify-headers-paths.patch new file mode 100644 index 000000000..48f6c9bb8 --- /dev/null +++ b/cross/gcc-riscv64/0018-add-fortify-headers-paths.patch @@ -0,0 +1,22 @@ +From 5bd37f8ee93a0fe1a3f841f48ed6626e7e0aa19d Mon Sep 17 00:00:00 2001 +From: Ariadne Conill +Date: Fri, 21 Aug 2020 07:01:06 +0000 +Subject: [PATCH] add fortify-headers paths + +--- + gcc/config/linux.h | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/gcc/config/linux.h b/gcc/config/linux.h +index 74f70793d90..61b07f319f6 100644 +--- a/gcc/config/linux.h ++++ b/gcc/config/linux.h +@@ -172,6 +172,8 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see + + #ifdef NATIVE_SYSTEM_HEADER_DIR + #define INCLUDE_DEFAULTS_MUSL_NATIVE \ ++ { NATIVE_SYSTEM_HEADER_DIR "/fortify", 0, 0, 0, 1, 2 }, \ ++ { NATIVE_SYSTEM_HEADER_DIR "/fortify", 0, 0, 0, 1, 0 }, \ + { NATIVE_SYSTEM_HEADER_DIR, 0, 0, 0, 1, 2 }, \ + { NATIVE_SYSTEM_HEADER_DIR, 0, 0, 0, 1, 0 }, + #else diff --git a/cross/gcc-riscv64/0019-Alpine-musl-package-provides-libssp_nonshared.a.-We-.patch b/cross/gcc-riscv64/0019-Alpine-musl-package-provides-libssp_nonshared.a.-We-.patch new file mode 100644 index 000000000..f18f4611a --- /dev/null +++ b/cross/gcc-riscv64/0019-Alpine-musl-package-provides-libssp_nonshared.a.-We-.patch @@ -0,0 +1,28 @@ +From d2577dc78a1f159e5c41fd0b53e73fa0e264cb52 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Timo=20Ter=C3=A4s?= +Date: Fri, 21 Aug 2020 07:03:00 +0000 +Subject: [PATCH] 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/gcc.cc | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +diff --git a/gcc/gcc.cc b/gcc/gcc.cc +index cc99d0b7aa1..c60a75371f8 100644 +--- a/gcc/gcc.cc ++++ b/gcc/gcc.cc +@@ -1004,8 +1004,7 @@ proper position among the other output files. */ + + #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/cross/gcc-riscv64/0020-DP-Use-push-state-pop-state-for-gold-as-well-when-li.patch b/cross/gcc-riscv64/0020-DP-Use-push-state-pop-state-for-gold-as-well-when-li.patch new file mode 100644 index 000000000..8fb4a222a --- /dev/null +++ b/cross/gcc-riscv64/0020-DP-Use-push-state-pop-state-for-gold-as-well-when-li.patch @@ -0,0 +1,66 @@ +From bbd5c529ef878c2d6096fd4949616714eb82683a Mon Sep 17 00:00:00 2001 +From: Ariadne Conill +Date: Fri, 21 Aug 2020 07:03:42 +0000 +Subject: [PATCH] DP: Use --push-state/--pop-state for gold as well when + linking libtsan. + +--- + gcc/gcc.cc | 16 ++++++++-------- + 1 file changed, 8 insertions(+), 8 deletions(-) + +diff --git a/gcc/gcc.cc b/gcc/gcc.cc +index c60a75371f8..735b2b1bba1 100644 +--- a/gcc/gcc.cc ++++ b/gcc/gcc.cc +@@ -745,10 +745,10 @@ proper position among the other output files. */ + #define LIBASAN_SPEC STATIC_LIBASAN_LIBS + #elif defined(HAVE_LD_STATIC_DYNAMIC) + #define LIBASAN_SPEC "%{static-libasan:" LD_STATIC_OPTION "}" \ +- " %{!static-libasan:%{!fuse-ld=gold:--push-state }--no-as-needed}" \ ++ " %{!static-libasan:--push-state --no-as-needed}" \ + " -lasan " \ + " %{static-libasan:" LD_DYNAMIC_OPTION "}" \ +- " %{!static-libasan:%{fuse-ld=gold:--as-needed;:--pop-state}}" \ ++ " %{!static-libasan:--pop-state}" \ + STATIC_LIBASAN_LIBS + #else + #define LIBASAN_SPEC "-lasan" STATIC_LIBASAN_LIBS +@@ -784,10 +784,10 @@ proper position among the other output files. */ + #define LIBTSAN_SPEC STATIC_LIBTSAN_LIBS + #elif defined(HAVE_LD_STATIC_DYNAMIC) + #define LIBTSAN_SPEC "%{static-libtsan:" LD_STATIC_OPTION "}" \ +- " %{!static-libtsan:%{!fuse-ld=gold:--push-state }--no-as-needed}" \ ++ " %{!static-libtsan:--push-state --no-as-needed}" \ + " -ltsan " \ + " %{static-libtsan:" LD_DYNAMIC_OPTION "}" \ +- " %{!static-libtsan:%{fuse-ld=gold:--as-needed;:--pop-state}}" \ ++ " %{!static-libtsan:--pop-state}" \ + STATIC_LIBTSAN_LIBS + #else + #define LIBTSAN_SPEC "-ltsan" STATIC_LIBTSAN_LIBS +@@ -805,10 +805,10 @@ proper position among the other output files. */ + #define LIBLSAN_SPEC STATIC_LIBLSAN_LIBS + #elif defined(HAVE_LD_STATIC_DYNAMIC) + #define LIBLSAN_SPEC "%{static-liblsan:" LD_STATIC_OPTION "}" \ +- " %{!static-liblsan:%{!fuse-ld=gold:--push-state }--no-as-needed}" \ ++ " %{!static-liblsan:--push-state --no-as-needed}" \ + " -llsan " \ + " %{static-liblsan:" LD_DYNAMIC_OPTION "}" \ +- " %{!static-liblsan:%{fuse-ld=gold:--as-needed;:--pop-state}}" \ ++ " %{!static-liblsan:--pop-state}" \ + STATIC_LIBLSAN_LIBS + #else + #define LIBLSAN_SPEC "-llsan" STATIC_LIBLSAN_LIBS +@@ -824,10 +824,10 @@ proper position among the other output files. */ + " %{static-libubsan|static:%:include(libsanitizer.spec)%(link_libubsan)}" + #ifdef HAVE_LD_STATIC_DYNAMIC + #define LIBUBSAN_SPEC "%{static-libubsan:" LD_STATIC_OPTION "}" \ +- " %{!static-libubsan:%{!fuse-ld=gold:--push-state }--no-as-needed}" \ ++ " %{!static-libubsan:--push-state --no-as-needed}" \ + " -lubsan " \ + " %{static-libubsan:" LD_DYNAMIC_OPTION "}" \ +- " %{!static-libubsan:%{fuse-ld=gold:--as-needed;:--pop-state}}" \ ++ " %{!static-libubsan:--pop-state}" \ + STATIC_LIBUBSAN_LIBS + #else + #define LIBUBSAN_SPEC "-lubsan" STATIC_LIBUBSAN_LIBS diff --git a/cross/gcc-riscv64/0021-mips64-disable-multilib-support.patch b/cross/gcc-riscv64/0021-mips64-disable-multilib-support.patch new file mode 100644 index 000000000..cabb121ad --- /dev/null +++ b/cross/gcc-riscv64/0021-mips64-disable-multilib-support.patch @@ -0,0 +1,45 @@ +From 714ed6d9649bf9ed42e34fef9c41169921e63921 Mon Sep 17 00:00:00 2001 +From: Nils Andreas Svee +Date: Thu, 21 Dec 2017 03:14:33 +0100 +Subject: [PATCH] mips64: disable multilib support + +multilib is not supported by Alpine GCC +--- + gcc/config/mips/mips.h | 8 ++++---- + gcc/config/mips/t-linux64 | 6 +++--- + 2 files changed, 7 insertions(+), 7 deletions(-) + +diff --git a/gcc/config/mips/mips.h b/gcc/config/mips/mips.h +index 858bbba3a36..2d4f553e652 100644 +--- a/gcc/config/mips/mips.h ++++ b/gcc/config/mips/mips.h +@@ -3447,11 +3447,11 @@ struct GTY(()) machine_function { + /* If we are *not* using multilibs and the default ABI is not ABI_32 we + need to change these from /lib and /usr/lib. */ + #if MIPS_ABI_DEFAULT == ABI_N32 +-#define STANDARD_STARTFILE_PREFIX_1 "/lib32/" +-#define STANDARD_STARTFILE_PREFIX_2 "/usr/lib32/" ++#define STANDARD_STARTFILE_PREFIX_1 "/lib/" ++#define STANDARD_STARTFILE_PREFIX_2 "/usr/lib/" + #elif MIPS_ABI_DEFAULT == ABI_64 +-#define STANDARD_STARTFILE_PREFIX_1 "/lib64/" +-#define STANDARD_STARTFILE_PREFIX_2 "/usr/lib64/" ++#define STANDARD_STARTFILE_PREFIX_1 "/lib/" ++#define STANDARD_STARTFILE_PREFIX_2 "/usr/lib/" + #endif + + /* Load store bonding is not supported by micromips and fix_24k. The +diff --git a/gcc/config/mips/t-linux64 b/gcc/config/mips/t-linux64 +index 2fdd8e00407..406a3676289 100644 +--- a/gcc/config/mips/t-linux64 ++++ b/gcc/config/mips/t-linux64 +@@ -21,6 +21,6 @@ MULTILIB_DIRNAMES = n32 32 64 + MIPS_EL = $(if $(filter %el, $(firstword $(subst -, ,$(target)))),el) + MIPS_SOFT = $(if $(strip $(filter MASK_SOFT_FLOAT_ABI, $(target_cpu_default)) $(filter soft, $(with_float))),soft) + MULTILIB_OSDIRNAMES = \ +- ../lib32$(call if_multiarch,:mips64$(MIPS_EL)-linux-gnuabin32$(MIPS_SOFT)) \ +- ../lib$(call if_multiarch,:mips$(MIPS_EL)-linux-gnu$(MIPS_SOFT)) \ +- ../lib64$(call if_multiarch,:mips64$(MIPS_EL)-linux-gnuabi64$(MIPS_SOFT)) ++ ../lib \ ++ ../lib32 \ ++ ../lib diff --git a/cross/gcc-riscv64/0022-aarch64-disable-multilib-support.patch b/cross/gcc-riscv64/0022-aarch64-disable-multilib-support.patch new file mode 100644 index 000000000..6fb676cc9 --- /dev/null +++ b/cross/gcc-riscv64/0022-aarch64-disable-multilib-support.patch @@ -0,0 +1,23 @@ +From 8fc8d6c26a2a45945182e211bc3ac2eae4d6a11b Mon Sep 17 00:00:00 2001 +From: Ariadne Conill +Date: Thu, 6 Jan 2022 03:12:55 +0000 +Subject: [PATCH] aarch64: disable multilib support + +multilib is unsupported on Alpine GCC +--- + gcc/config/aarch64/t-aarch64-linux | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/gcc/config/aarch64/t-aarch64-linux b/gcc/config/aarch64/t-aarch64-linux +index d0cd546002a..b63a77f4969 100644 +--- a/gcc/config/aarch64/t-aarch64-linux ++++ b/gcc/config/aarch64/t-aarch64-linux +@@ -22,7 +22,7 @@ LIB1ASMSRC = aarch64/lib1funcs.asm + LIB1ASMFUNCS = _aarch64_sync_cache_range + + AARCH_BE = $(if $(findstring TARGET_BIG_ENDIAN_DEFAULT=1, $(tm_defines)),_be) +-MULTILIB_OSDIRNAMES = mabi.lp64=../lib64$(call if_multiarch,:aarch64$(AARCH_BE)-linux-gnu) ++MULTILIB_OSDIRNAMES = mabi.lp64=../lib + MULTIARCH_DIRNAME = $(call if_multiarch,aarch64$(AARCH_BE)-linux-gnu) + + MULTILIB_OSDIRNAMES += mabi.ilp32=../libilp32$(call if_multiarch,:aarch64$(AARCH_BE)-linux-gnu_ilp32) diff --git a/cross/gcc-riscv64/0023-s390x-disable-multilib-support.patch b/cross/gcc-riscv64/0023-s390x-disable-multilib-support.patch new file mode 100644 index 000000000..c24c4f820 --- /dev/null +++ b/cross/gcc-riscv64/0023-s390x-disable-multilib-support.patch @@ -0,0 +1,22 @@ +From 65ad898df141261a1ccd891a99133ad8f9847133 Mon Sep 17 00:00:00 2001 +From: Ariadne Conill +Date: Thu, 6 Jan 2022 03:13:59 +0000 +Subject: [PATCH] s390x: disable multilib support + +multilib is not supported on Alpine GCC at present +--- + gcc/config/s390/t-linux64 | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/gcc/config/s390/t-linux64 b/gcc/config/s390/t-linux64 +index cc6ab367072..7f498ee1cdc 100644 +--- a/gcc/config/s390/t-linux64 ++++ b/gcc/config/s390/t-linux64 +@@ -7,5 +7,5 @@ + + MULTILIB_OPTIONS = m64/m31 + MULTILIB_DIRNAMES = 64 32 +-MULTILIB_OSDIRNAMES = ../lib64$(call if_multiarch,:s390x-linux-gnu) +-MULTILIB_OSDIRNAMES += $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)$(call if_multiarch,:s390-linux-gnu) ++MULTILIB_OSDIRNAMES = m64=../lib ++MULTILIB_OSDIRNAMES+= m32=../lib32 diff --git a/cross/gcc-riscv64/0024-ppc64-le-disable-multilib-support.patch b/cross/gcc-riscv64/0024-ppc64-le-disable-multilib-support.patch new file mode 100644 index 000000000..755bfcfda --- /dev/null +++ b/cross/gcc-riscv64/0024-ppc64-le-disable-multilib-support.patch @@ -0,0 +1,78 @@ +From 3263d8634da6d7e1edb1bfd88e1b2627ce0aa1be Mon Sep 17 00:00:00 2001 +From: Ariadne Conill +Date: Thu, 6 Jan 2022 03:14:33 +0000 +Subject: [PATCH] ppc64[le]: disable multilib support + +multilib is not presently supported on Alpine GCC +--- + gcc/config/rs6000/t-linux | 6 ++++-- + gcc/config/rs6000/t-linux64 | 4 ++-- + gcc/config/rs6000/t-linux64bele | 4 ++-- + gcc/config/rs6000/t-linux64lebe | 4 ++-- + 4 files changed, 10 insertions(+), 8 deletions(-) + +diff --git a/gcc/config/rs6000/t-linux b/gcc/config/rs6000/t-linux +index 4e371255533..128c75c7d39 100644 +--- a/gcc/config/rs6000/t-linux ++++ b/gcc/config/rs6000/t-linux +@@ -2,7 +2,8 @@ + # or soft-float. + ifeq (,$(filter $(with_cpu),$(SOFT_FLOAT_CPUS))$(findstring soft,$(with_float))) + ifneq (,$(findstring powerpc64,$(target))) +-MULTILIB_OSDIRNAMES := .=../lib64$(call if_multiarch,:powerpc64-linux-gnu) ++MULTILIB_OSDIRNAMES := m64=../lib ++MULTILIB_OSDIRNAMES += m32=../lib32 + else + MULTIARCH_DIRNAME := $(call if_multiarch,powerpc-linux-gnu) + endif +@@ -10,7 +11,8 @@ ifneq (,$(findstring powerpcle,$(target))) + MULTIARCH_DIRNAME := $(subst -linux,le-linux,$(MULTIARCH_DIRNAME)) + endif + ifneq (,$(findstring powerpc64le,$(target))) +-MULTILIB_OSDIRNAMES := $(subst -linux,le-linux,$(MULTILIB_OSDIRNAMES)) ++MULTILIB_OSDIRNAMES := m64=../lib ++MULTILIB_OSDIRNAMES += m32=../lib32 + endif + endif + +diff --git a/gcc/config/rs6000/t-linux64 b/gcc/config/rs6000/t-linux64 +index 47e0efd5764..f89729af64f 100644 +--- a/gcc/config/rs6000/t-linux64 ++++ b/gcc/config/rs6000/t-linux64 +@@ -28,8 +28,8 @@ + MULTILIB_OPTIONS := m64/m32 + MULTILIB_DIRNAMES := 64 32 + MULTILIB_EXTRA_OPTS := +-MULTILIB_OSDIRNAMES := m64=../lib64$(call if_multiarch,:powerpc64-linux-gnu) +-MULTILIB_OSDIRNAMES += m32=$(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)$(call if_multiarch,:powerpc-linux-gnu) ++MULTILIB_OSDIRNAMES := m64=../lib ++MULTILIB_OSDIRNAMES += m32=../lib32 + + rs6000-linux.o: $(srcdir)/config/rs6000/rs6000-linux.cc + $(COMPILE) $< +diff --git a/gcc/config/rs6000/t-linux64bele b/gcc/config/rs6000/t-linux64bele +index 97c1ee6fb4d..08d72639cb6 100644 +--- a/gcc/config/rs6000/t-linux64bele ++++ b/gcc/config/rs6000/t-linux64bele +@@ -2,6 +2,6 @@ + + MULTILIB_OPTIONS += mlittle + MULTILIB_DIRNAMES += le +-MULTILIB_OSDIRNAMES += $(subst =,.mlittle=,$(subst lible32,lib32le,$(subst lible64,lib64le,$(subst lib,lible,$(subst -linux,le-linux,$(MULTILIB_OSDIRNAMES)))))) +-MULTILIB_OSDIRNAMES += $(subst $(if $(findstring 64,$(target)),m64,m32).,,$(filter $(if $(findstring 64,$(target)),m64,m32).mlittle%,$(MULTILIB_OSDIRNAMES))) ++MULTILIB_OSDIRNAMES = m64=../lib ++MULTILIB_OSDIRNAMES+= m32=../lib32 + MULTILIB_MATCHES := ${MULTILIB_MATCHES_ENDIAN} +diff --git a/gcc/config/rs6000/t-linux64lebe b/gcc/config/rs6000/t-linux64lebe +index 2e63bdb9fc9..c6e1c5db65d 100644 +--- a/gcc/config/rs6000/t-linux64lebe ++++ b/gcc/config/rs6000/t-linux64lebe +@@ -2,6 +2,6 @@ + + MULTILIB_OPTIONS += mbig + MULTILIB_DIRNAMES += be +-MULTILIB_OSDIRNAMES += $(subst =,.mbig=,$(subst libbe32,lib32be,$(subst libbe64,lib64be,$(subst lib,libbe,$(subst le-linux,-linux,$(MULTILIB_OSDIRNAMES)))))) +-MULTILIB_OSDIRNAMES += $(subst $(if $(findstring 64,$(target)),m64,m32).,,$(filter $(if $(findstring 64,$(target)),m64,m32).mbig%,$(MULTILIB_OSDIRNAMES))) ++MULTILIB_OSDIRNAMES := m64=../lib ++MULTILIB_OSDIRNAMES += m32=../lib32 + MULTILIB_MATCHES := ${MULTILIB_MATCHES_ENDIAN} diff --git a/cross/gcc-riscv64/0025-x86_64-disable-multilib-support.patch b/cross/gcc-riscv64/0025-x86_64-disable-multilib-support.patch new file mode 100644 index 000000000..f390ee08c --- /dev/null +++ b/cross/gcc-riscv64/0025-x86_64-disable-multilib-support.patch @@ -0,0 +1,23 @@ +From bf63353ea679e0bbf2c2f17bb64c75ebd590c6e7 Mon Sep 17 00:00:00 2001 +From: Ariadne Conill +Date: Thu, 6 Jan 2022 03:14:54 +0000 +Subject: [PATCH] x86_64: disable multilib support + +multilib is not presently supported on Alpine GCC +--- + gcc/config/i386/t-linux64 | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/gcc/config/i386/t-linux64 b/gcc/config/i386/t-linux64 +index 5526ad0e6cc..78866afab36 100644 +--- a/gcc/config/i386/t-linux64 ++++ b/gcc/config/i386/t-linux64 +@@ -33,6 +33,6 @@ + comma=, + MULTILIB_OPTIONS = $(subst $(comma),/,$(TM_MULTILIB_CONFIG)) + MULTILIB_DIRNAMES = $(patsubst m%, %, $(subst /, ,$(MULTILIB_OPTIONS))) +-MULTILIB_OSDIRNAMES = m64=../lib64$(call if_multiarch,:x86_64-linux-gnu) +-MULTILIB_OSDIRNAMES+= m32=$(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)$(call if_multiarch,:i386-linux-gnu) ++MULTILIB_OSDIRNAMES = m64=../lib ++MULTILIB_OSDIRNAMES+= m32=../lib32 + MULTILIB_OSDIRNAMES+= mx32=../libx32$(call if_multiarch,:x86_64-linux-gnux32) diff --git a/cross/gcc-riscv64/0026-riscv-disable-multilib-support.patch b/cross/gcc-riscv64/0026-riscv-disable-multilib-support.patch new file mode 100644 index 000000000..40989b255 --- /dev/null +++ b/cross/gcc-riscv64/0026-riscv-disable-multilib-support.patch @@ -0,0 +1,71 @@ +From 2eed19787020ce52cf07b76a5d167c420ec42b61 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?S=C3=B6ren=20Tempel?= +Date: Mon, 3 Jan 2022 07:14:48 +0100 +Subject: [PATCH] riscv: disable multilib support +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From the musl wiki [1]: + + musl does not support sharing an include directory between archs + […], and thus is not compatible with GCC-style multilib. It is + recommended that distributions build GCC with multilib disabled, + and use library directories named lib, not lib64 or lib32. + +For this reason, we patch existing GCC configuration files (gcc/config) +to pin MULTILIB_OSDIRNAMES to lib, there is also a corresponding GCC +upstream bug about this issue [2]. Avoiding the use of lib64 and lib32 +directories is a bit more difficult on the RISC-V architecture. This is +due to the fact that the default RISC-V configuration does not only use +the lib64 and lib32 directories but also subdirectories within these +directories for different RISC-V ABIs (e.g. lp64d, lp64, …) [3]. + +This patch aligns the RISC-V configuration with other architectures by +pinning MULTILIB_OSDIRNAMES to lib for rv64gc (our default RISC-V +-march). Furthermore, this patch removes the ABI-specific startfile +prefix spec. Since both of these impact the default LIBRARY_PATH [4] +this patch thereby aligns the default RISC-V LIBRARY_PATH with that from +other Alpine architectures and thereby fixes #13369 [5]. + +Incidentally, this also fixes gccgo on riscv64, as without this patch +gccgo is otherwise not able to find the *.gox files for the Go standard +library. + +[1]: https://wiki.musl-libc.org/guidelines-for-distributions.html#Multilib/multi_arch +[2]: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90077 +[3]: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103889#c14 +[4]: https://gcc.gnu.org/git/?p=gcc.git;a=blob;f=gcc/gcc.c;h=d4c8746b0aa322286decf92aa72a12f0a393b655;hb=HEAD#l9122 +[5]: https://gitlab.alpinelinux.org/alpine/aports/-/issues/13369 +--- + gcc/config/riscv/linux.h | 6 ------ + gcc/config/riscv/t-linux | 7 +++++-- + 2 files changed, 5 insertions(+), 8 deletions(-) + +diff --git a/gcc/config/riscv/linux.h b/gcc/config/riscv/linux.h +index 3067ed6eac8..4c8c85e3285 100644 +--- a/gcc/config/riscv/linux.h ++++ b/gcc/config/riscv/linux.h +@@ -71,9 +71,3 @@ along with GCC; see the file COPYING3. If not see + %{static:-static}}" + + #define TARGET_ASM_FILE_END file_end_indicate_exec_stack +- +-#define STARTFILE_PREFIX_SPEC \ +- "/lib" XLEN_SPEC "/" ABI_SPEC "/ " \ +- "/usr/lib" XLEN_SPEC "/" ABI_SPEC "/ " \ +- "/lib/ " \ +- "/usr/lib/ " +diff --git a/gcc/config/riscv/t-linux b/gcc/config/riscv/t-linux +index 216d2776a18..1a8a863853e 100644 +--- a/gcc/config/riscv/t-linux ++++ b/gcc/config/riscv/t-linux +@@ -1,3 +1,6 @@ +-# Only XLEN and ABI affect Linux multilib dir names, e.g. /lib32/ilp32d/ +-MULTILIB_DIRNAMES := $(patsubst rv32%,lib32,$(patsubst rv64%,lib64,$(MULTILIB_DIRNAMES))) ++MULTILIB_OPTIONS := march=rv64gc ++MULTILIB_DIRNAMES := rv64gc ++ ++MULTILIB_DIRNAMES := $(patsubst rv32%,lib32,$(patsubst rv64%,lib,$(MULTILIB_DIRNAMES))) + MULTILIB_OSDIRNAMES := $(patsubst lib%,../lib%,$(MULTILIB_DIRNAMES)) ++MULTILIB_MATCHES := march?rv64gc=march?rv64imafdc diff --git a/cross/gcc-riscv64/0027-always-build-libgcc_eh.a.patch b/cross/gcc-riscv64/0027-always-build-libgcc_eh.a.patch new file mode 100644 index 000000000..fc0fa7c53 --- /dev/null +++ b/cross/gcc-riscv64/0027-always-build-libgcc_eh.a.patch @@ -0,0 +1,48 @@ +From 51a35c0fa0e793c6a2c64ae1449c0cfd681d8f8a Mon Sep 17 00:00:00 2001 +From: Ariadne Conill +Date: Fri, 21 Aug 2020 07:05:41 +0000 +Subject: [PATCH] always build libgcc_eh.a + +highly inspired by: + http://landley.net/hg/aboriginal/file/7e0747a665ab/sources/patches/gcc-core-libgcceh.patch +--- + libgcc/Makefile.in | 11 ++++++----- + 1 file changed, 6 insertions(+), 5 deletions(-) + +diff --git a/libgcc/Makefile.in b/libgcc/Makefile.in +index 09b3ec8bc2e..c9ca58c64cc 100644 +--- a/libgcc/Makefile.in ++++ b/libgcc/Makefile.in +@@ -957,8 +957,9 @@ ifneq ($(LIBUNWIND),) + all: libunwind.a + endif + ++all: libgcc_eh.a + ifeq ($(enable_shared),yes) +-all: libgcc_eh.a libgcc_s$(SHLIB_EXT) ++all: libgcc_s$(SHLIB_EXT) + ifneq ($(LIBUNWIND),) + all: libunwind$(SHLIB_EXT) + libgcc_s$(SHLIB_EXT): libunwind$(SHLIB_EXT) +@@ -1160,10 +1161,6 @@ install-libunwind: + install-shared: + $(mkinstalldirs) $(DESTDIR)$(inst_libdir) + +- $(INSTALL_DATA) libgcc_eh.a $(DESTDIR)$(inst_libdir)/ +- chmod 644 $(DESTDIR)$(inst_libdir)/libgcc_eh.a +- $(RANLIB) $(DESTDIR)$(inst_libdir)/libgcc_eh.a +- + $(subst @multilib_dir@,$(MULTIDIR),$(subst \ + @shlib_base_name@,libgcc_s,$(subst \ + @shlib_slibdir_qual@,$(MULTIOSSUBDIR),$(SHLIB_INSTALL)))) +@@ -1180,6 +1177,10 @@ ifeq ($(enable_gcov),yes) + $(RANLIB) $(DESTDIR)$(inst_libdir)/libgcov.a + endif + ++ $(INSTALL_DATA) libgcc_eh.a $(DESTDIR)$(inst_libdir)/ ++ chmod 644 $(DESTDIR)$(inst_libdir)/libgcc_eh.a ++ $(RANLIB) $(DESTDIR)$(inst_libdir)/libgcc_eh.a ++ + parts="$(INSTALL_PARTS)"; \ + for file in $$parts; do \ + rm -f $(DESTDIR)$(inst_libdir)/$$file; \ diff --git a/cross/gcc-riscv64/0028-ada-libgnarl-compatibility-for-musl.patch b/cross/gcc-riscv64/0028-ada-libgnarl-compatibility-for-musl.patch new file mode 100644 index 000000000..c819871c9 --- /dev/null +++ b/cross/gcc-riscv64/0028-ada-libgnarl-compatibility-for-musl.patch @@ -0,0 +1,132 @@ +From 64a1c5f57e278869f41c43ee56cc5defb3dd55c5 Mon Sep 17 00:00:00 2001 +From: Ariadne Conill +Date: Fri, 21 Aug 2020 07:06:30 +0000 +Subject: [PATCH] ada: libgnarl compatibility for musl + +--- + gcc/ada/libgnarl/s-osinte__linux.ads | 11 ------ + gcc/ada/libgnarl/s-taprop__linux.adb | 53 ++-------------------------- + 2 files changed, 3 insertions(+), 61 deletions(-) + +diff --git a/gcc/ada/libgnarl/s-osinte__linux.ads b/gcc/ada/libgnarl/s-osinte__linux.ads +index 7c9e7ca4518..caafc4aa68f 100644 +--- a/gcc/ada/libgnarl/s-osinte__linux.ads ++++ b/gcc/ada/libgnarl/s-osinte__linux.ads +@@ -403,12 +403,6 @@ package System.OS_Interface is + PTHREAD_RWLOCK_PREFER_WRITER_NP : constant := 1; + PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP : constant := 2; + +- function pthread_rwlockattr_setkind_np +- (attr : access pthread_rwlockattr_t; +- pref : int) return int; +- pragma Import +- (C, pthread_rwlockattr_setkind_np, "pthread_rwlockattr_setkind_np"); +- + function pthread_rwlock_init + (mutex : access pthread_rwlock_t; + attr : access pthread_rwlockattr_t) return int; +@@ -470,11 +464,6 @@ package System.OS_Interface is + protocol : int) return int; + pragma Import (C, pthread_mutexattr_setprotocol); + +- function pthread_mutexattr_setprioceiling +- (attr : access pthread_mutexattr_t; +- prioceiling : int) return int; +- pragma Import (C, pthread_mutexattr_setprioceiling); +- + type struct_sched_param is record + sched_priority : int; -- scheduling priority + end record; +diff --git a/gcc/ada/libgnarl/s-taprop__linux.adb b/gcc/ada/libgnarl/s-taprop__linux.adb +index 4ff784f0ea7..b34a12802c6 100644 +--- a/gcc/ada/libgnarl/s-taprop__linux.adb ++++ b/gcc/ada/libgnarl/s-taprop__linux.adb +@@ -198,9 +198,6 @@ package body System.Task_Primitives.Operations is + pragma Import + (C, GNAT_pthread_condattr_setup, "__gnat_pthread_condattr_setup"); + +- function GNAT_has_cap_sys_nice return C.int; +- pragma Import +- (C, GNAT_has_cap_sys_nice, "__gnat_has_cap_sys_nice"); + -- We do not have pragma Linker_Options ("-lcap"); here, because this + -- library is not present on many Linux systems. 'libcap' is the Linux + -- "capabilities" library, called by __gnat_has_cap_sys_nice. +@@ -210,38 +207,6 @@ package body System.Task_Primitives.Operations is + -- Convert Ada priority to Linux priority. Priorities are 1 .. 99 on + -- GNU/Linux, so we map 0 .. 98 to 1 .. 99. + +- function Get_Ceiling_Support return Boolean; +- -- Get the value of the Ceiling_Support constant (see below). +- -- Note well: If this function or related code is modified, it should be +- -- tested by hand, because automated testing doesn't exercise it. +- +- ------------------------- +- -- Get_Ceiling_Support -- +- ------------------------- +- +- function Get_Ceiling_Support return Boolean is +- Ceiling_Support : Boolean := False; +- begin +- if Locking_Policy /= 'C' then +- return False; +- end if; +- +- declare +- function geteuid return Integer; +- pragma Import (C, geteuid, "geteuid"); +- Superuser : constant Boolean := geteuid = 0; +- Has_Cap : constant C.int := GNAT_has_cap_sys_nice; +- pragma Assert (Has_Cap in 0 | 1); +- begin +- Ceiling_Support := Superuser or else Has_Cap = 1; +- end; +- +- return Ceiling_Support; +- end Get_Ceiling_Support; +- +- pragma Warnings (Off, "non-preelaborable call not allowed*"); +- Ceiling_Support : constant Boolean := Get_Ceiling_Support; +- pragma Warnings (On, "non-preelaborable call not allowed*"); + -- True if the locking policy is Ceiling_Locking, and the current process + -- has permission to use this policy. The process has permission if it is + -- running as 'root', or if the capability was set by the setcap command, +@@ -344,7 +309,9 @@ package body System.Task_Primitives.Operations is + -- Init_Mutex -- + ---------------- + ++ pragma Warnings (Off, "formal parameter * is not referenced"); + function Init_Mutex (L : RTS_Lock_Ptr; Prio : Any_Priority) return C.int is ++ pragma Warnings (On, "formal parameter * is not referenced"); + Mutex_Attr : aliased pthread_mutexattr_t; + Result, Result_2 : C.int; + +@@ -356,16 +323,7 @@ package body System.Task_Primitives.Operations is + return Result; + end if; + +- if Ceiling_Support then +- Result := pthread_mutexattr_setprotocol +- (Mutex_Attr'Access, PTHREAD_PRIO_PROTECT); +- pragma Assert (Result = 0); +- +- Result := pthread_mutexattr_setprioceiling +- (Mutex_Attr'Access, Prio_To_Linux_Prio (Prio)); +- pragma Assert (Result = 0); +- +- elsif Locking_Policy = 'I' then ++ if Locking_Policy = 'I' then + Result := pthread_mutexattr_setprotocol + (Mutex_Attr'Access, PTHREAD_PRIO_INHERIT); + pragma Assert (Result = 0); +@@ -405,11 +363,6 @@ package body System.Task_Primitives.Operations is + Result := pthread_rwlockattr_init (RWlock_Attr'Access); + pragma Assert (Result = 0); + +- Result := pthread_rwlockattr_setkind_np +- (RWlock_Attr'Access, +- PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP); +- pragma Assert (Result = 0); +- + Result := pthread_rwlock_init (L.RW'Access, RWlock_Attr'Access); + + pragma Assert (Result in 0 | ENOMEM); diff --git a/cross/gcc-riscv64/0029-ada-musl-support-fixes.patch b/cross/gcc-riscv64/0029-ada-musl-support-fixes.patch new file mode 100644 index 000000000..4ceef740d --- /dev/null +++ b/cross/gcc-riscv64/0029-ada-musl-support-fixes.patch @@ -0,0 +1,220 @@ +From 82addb1312f4f58a412a664228944009aa5cb569 Mon Sep 17 00:00:00 2001 +From: Ariadne Conill +Date: Fri, 21 Aug 2020 07:07:48 +0000 +Subject: [PATCH] ada: musl support fixes + +--- + gcc/ada/Makefile.rtl | 10 +++++----- + gcc/ada/adaint.c | 34 +++++++++++++++++++--------------- + gcc/ada/adaint.h | 10 ++++------ + gcc/ada/terminals.c | 8 ++++---- + 4 files changed, 32 insertions(+), 30 deletions(-) + +diff --git a/gcc/ada/Makefile.rtl b/gcc/ada/Makefile.rtl +index aaf853e3a2a..e2dd3587ed5 100644 +--- a/gcc/ada/Makefile.rtl ++++ b/gcc/ada/Makefile.rtl +@@ -1633,7 +1633,7 @@ ifeq ($(strip $(filter-out %86 linux%,$(target_cpu) $(target_os))),) + s-intman.adb + #include + #endif ++ ++#if defined (linux) || defined(__linux__) ++#define _GNU_SOURCE 1 ++#include ++#endif + + #ifdef __PikeOS__ + #define __BSD_VISIBLE 1 +@@ -3446,7 +3451,6 @@ __gnat_lwp_self (void) + #endif + + #if defined (__linux__) +-#include + + /* glibc versions earlier than 2.7 do not define the routines to handle + dynamically allocated CPU sets. For these targets, we use the static +@@ -3456,7 +3460,7 @@ __gnat_lwp_self (void) + + /* Dynamic cpu sets */ + +-cpu_set_t * ++void * + __gnat_cpu_alloc (size_t count) + { + return CPU_ALLOC (count); +@@ -3469,33 +3473,33 @@ __gnat_cpu_alloc_size (size_t count) + } + + void +-__gnat_cpu_free (cpu_set_t *set) ++__gnat_cpu_free (void *set) + { +- CPU_FREE (set); ++ CPU_FREE ((cpu_set_t *) set); + } + + void +-__gnat_cpu_zero (size_t count, cpu_set_t *set) ++__gnat_cpu_zero (size_t count, void *set) + { +- CPU_ZERO_S (count, set); ++ CPU_ZERO_S (count, (cpu_set_t *) set); + } + + void +-__gnat_cpu_set (int cpu, size_t count, cpu_set_t *set) ++__gnat_cpu_set (int cpu, size_t count, void *set) + { + /* Ada handles CPU numbers starting from 1, while C identifies the first + CPU by a 0, so we need to adjust. */ +- CPU_SET_S (cpu - 1, count, set); ++ CPU_SET_S (cpu - 1, count, (cpu_set_t *) set); + } + + #else /* !CPU_ALLOC */ + + /* Static cpu sets */ + +-cpu_set_t * ++void * + __gnat_cpu_alloc (size_t count ATTRIBUTE_UNUSED) + { +- return (cpu_set_t *) xmalloc (sizeof (cpu_set_t)); ++ return xmalloc (sizeof (cpu_set_t)); + } + + size_t +@@ -3505,23 +3509,23 @@ __gnat_cpu_alloc_size (size_t count ATTRIBUTE_UNUSED) + } + + void +-__gnat_cpu_free (cpu_set_t *set) ++__gnat_cpu_free (void *set) + { + free (set); + } + + void +-__gnat_cpu_zero (size_t count ATTRIBUTE_UNUSED, cpu_set_t *set) ++__gnat_cpu_zero (size_t count ATTRIBUTE_UNUSED, void *set) + { +- CPU_ZERO (set); ++ CPU_ZERO ((cpu_set_t *) set); + } + + void +-__gnat_cpu_set (int cpu, size_t count ATTRIBUTE_UNUSED, cpu_set_t *set) ++__gnat_cpu_set (int cpu, size_t count ATTRIBUTE_UNUSED, void *set) + { + /* Ada handles CPU numbers starting from 1, while C identifies the first + CPU by a 0, so we need to adjust. */ +- CPU_SET (cpu - 1, set); ++ CPU_SET (cpu - 1, (cpu_set_t *) set); + } + #endif /* !CPU_ALLOC */ + #endif /* __linux__ */ +diff --git a/gcc/ada/adaint.h b/gcc/ada/adaint.h +index 2631be5ad3e..d442f4bd6cd 100644 +--- a/gcc/ada/adaint.h ++++ b/gcc/ada/adaint.h +@@ -321,13 +321,11 @@ extern void *__gnat_lwp_self (void); + + /* Routines for interface to required CPU set primitives */ + +-#include +- +-extern cpu_set_t *__gnat_cpu_alloc (size_t); ++extern void * __gnat_cpu_alloc (size_t); + extern size_t __gnat_cpu_alloc_size (size_t); +-extern void __gnat_cpu_free (cpu_set_t *); +-extern void __gnat_cpu_zero (size_t, cpu_set_t *); +-extern void __gnat_cpu_set (int, size_t, cpu_set_t *); ++extern void __gnat_cpu_free (void *); ++extern void __gnat_cpu_zero (size_t, void *); ++extern void __gnat_cpu_set (int, size_t, void *); + #endif + + #if defined (_WIN32) +diff --git a/gcc/ada/terminals.c b/gcc/ada/terminals.c +index 32d30a49c7e..d960e32e2d0 100644 +--- a/gcc/ada/terminals.c ++++ b/gcc/ada/terminals.c +@@ -1132,7 +1132,7 @@ __gnat_setup_winsize (void *desc ATTRIBUTE_UNUSED, + /* POSIX does not specify how to open the master side of a terminal.Several + methods are available (system specific): + 1- using a cloning device (USE_CLONE_DEVICE) +- 2- getpt (USE_GETPT) ++ 2- posix_openpt (USE_POSIX_OPENPT) + 3- openpty (USE_OPENPTY) + + When using the cloning device method, the macro USE_CLONE_DEVICE should +@@ -1146,7 +1146,7 @@ __gnat_setup_winsize (void *desc ATTRIBUTE_UNUSED, + #if defined (__APPLE__) || defined (BSD) + #define USE_OPENPTY + #elif defined (__linux__) +-#define USE_GETPT ++#define USE_POSIX_OPENPT + #elif defined (__sun__) + #define USE_CLONE_DEVICE "/dev/ptmx" + #elif defined (_AIX) +@@ -1195,8 +1195,8 @@ allocate_pty_desc (pty_desc **desc) { + int master_fd = -1; + char *slave_name = NULL; + +-#ifdef USE_GETPT +- master_fd = getpt (); ++#if defined(USE_POSIX_OPENPT) ++ master_fd = posix_openpt(O_RDWR | O_NOCTTY); + #elif defined (USE_OPENPTY) + status = openpty (&master_fd, &slave_fd, NULL, NULL, NULL); + #elif defined (USE_CLONE_DEVICE) diff --git a/cross/gcc-riscv64/0033-gcc-go-link-to-libucontext.patch b/cross/gcc-riscv64/0033-gcc-go-link-to-libucontext.patch new file mode 100644 index 000000000..802295d3a --- /dev/null +++ b/cross/gcc-riscv64/0033-gcc-go-link-to-libucontext.patch @@ -0,0 +1,42 @@ +From 0631e2b9453b33c42e12a14c11e8257d470016c5 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?S=C3=B6ren=20Tempel?= +Date: Sun, 30 Aug 2020 19:17:42 +0200 +Subject: [PATCH] gcc-go: support libucontext + +This patch allows using gcc-go with libucontext. For this purpose, +it unconditionally links gcc-go against -lucontext. Furthermore, +it undefines SETCONTEXT_CLOBBERS_TLS in proc.c to prevent usage +of makecontext/swapcontext feature that are not support by libucontext. +--- + Makefile.in | 2 +- + libgo/runtime/proc.c | 4 ++++ + 2 files changed, 5 insertions(+), 1 deletion(-) + +diff --git a/Makefile.in b/Makefile.in +index 593495e1650..c3e5d489bc0 100644 +--- a/Makefile.in ++++ b/Makefile.in +@@ -52801,7 +52801,7 @@ configure-target-libgo: + esac; \ + module_srcdir=libgo; \ + rm -f no-such-file || : ; \ +- CONFIG_SITE=no-such-file $(SHELL) \ ++ CONFIG_SITE=no-such-file LIBS="-lucontext $$LIBS" $(SHELL) \ + $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \ +diff --git a/libgo/runtime/proc.c b/libgo/runtime/proc.c +index 3a30748d329..a987678fa84 100644 +--- a/libgo/runtime/proc.c ++++ b/libgo/runtime/proc.c +@@ -66,6 +66,10 @@ static void gscanstack(G*); + + __thread G *g __asm__(GOSYM_PREFIX "runtime.g"); + ++/* libucontext does not seem to support tlsbase, undef the macro ++ * here to make sure we define initcontext and fixcontext as dummies. */ ++#undef SETCONTEXT_CLOBBERS_TLS ++ + #ifndef SETCONTEXT_CLOBBERS_TLS + + static inline void diff --git a/cross/gcc-riscv64/0034-Use-generic-errstr.go-implementation-on-musl.patch b/cross/gcc-riscv64/0034-Use-generic-errstr.go-implementation-on-musl.patch new file mode 100644 index 000000000..85d75df2c --- /dev/null +++ b/cross/gcc-riscv64/0034-Use-generic-errstr.go-implementation-on-musl.patch @@ -0,0 +1,45 @@ +From 5093aa99f9cdded2e1ddf67b7139da6fac36b0a6 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?S=C3=B6ren=20Tempel?= +Date: Mon, 19 Apr 2021 07:21:41 +0200 +Subject: [PATCH] Use generic errstr.go implementation on musl + +glibc provides two version of strerror_r() depending on a feature test +macro. The first is the XSI-compliant version which returns an int, the +second is GNU-specific and returns a char pointer. + +Similarity, gcc's libgo provides two implementations of Errstr() both of +which use strerror_r(). On Linux, it is assumed that the GNU-specific +strerror_r version is used. However, musl only provides the +XSI-compliant version of strerror_r. This patch enables the generic +Errstr() implementation which also uses the XSI-compliant version of +strerror_r. +--- + libgo/go/syscall/errstr.go | 1 - + libgo/go/syscall/errstr_glibc.go | 2 +- + 2 files changed, 1 insertion(+), 2 deletions(-) + +diff --git a/libgo/go/syscall/errstr.go b/libgo/go/syscall/errstr.go +index 6c2441d364d..8f7c5538163 100644 +--- a/libgo/go/syscall/errstr.go ++++ b/libgo/go/syscall/errstr.go +@@ -5,7 +5,6 @@ + // license that can be found in the LICENSE file. + + // +build !hurd +-// +build !linux + + package syscall + +diff --git a/libgo/go/syscall/errstr_glibc.go b/libgo/go/syscall/errstr_glibc.go +index 5b19e6f202d..8dc60172186 100644 +--- a/libgo/go/syscall/errstr_glibc.go ++++ b/libgo/go/syscall/errstr_glibc.go +@@ -7,7 +7,7 @@ + // We use this rather than errstr.go because on GNU/Linux sterror_r + // returns a pointer to the error message, and may not use buf at all. + +-// +build hurd linux ++// +build hurd !linux + + package syscall + diff --git a/cross/gcc-riscv64/0035-configure-Add-enable-autolink-libatomic-use-in-LINK_.patch b/cross/gcc-riscv64/0035-configure-Add-enable-autolink-libatomic-use-in-LINK_.patch new file mode 100644 index 000000000..4be49946a --- /dev/null +++ b/cross/gcc-riscv64/0035-configure-Add-enable-autolink-libatomic-use-in-LINK_.patch @@ -0,0 +1,263 @@ +From 573a66e4146c9a65d895af9081a4d3d49cfc9e7a Mon Sep 17 00:00:00 2001 +From: Drew DeVault +Date: Wed, 9 Dec 2020 16:07:26 +0000 +Subject: [PATCH] configure: Add --enable-autolink-libatomic, use in + LINK_GCC_C_SEQUENCE_SPEC [PR81358] + +This fixes issues with RISC-V. +--- + Makefile.in | 1 + + gcc/config.in | 6 ++++++ + gcc/config/gnu-user.h | 12 +++++++++++- + gcc/configure | 32 ++++++++++++++++++++++++++++++-- + gcc/configure.ac | 22 +++++++++++++++++++++- + gcc/doc/install.texi | 8 ++++++++ + gcc/doc/tm.texi | 8 +++++++- + gcc/doc/tm.texi.in | 8 +++++++- + gcc/gcc.cc | 12 +++++++++++- + 9 files changed, 102 insertions(+), 7 deletions(-) + +diff --git a/Makefile.in b/Makefile.in +index b564ddbf792..a95c7407d16 100644 +--- a/Makefile.in ++++ b/Makefile.in +@@ -232,6 +232,7 @@ HOST_EXPORTS = \ + RANLIB_FOR_TARGET="$(RANLIB_FOR_TARGET)"; export RANLIB_FOR_TARGET; \ + READELF_FOR_TARGET="$(READELF_FOR_TARGET)"; export READELF_FOR_TARGET; \ + TOPLEVEL_CONFIGURE_ARGUMENTS="$(TOPLEVEL_CONFIGURE_ARGUMENTS)"; export TOPLEVEL_CONFIGURE_ARGUMENTS; \ ++ TARGET_CONFIGDIRS="$(TARGET_CONFIGDIRS)"; export TARGET_CONFIGDIRS; \ + HOST_LIBS="$(STAGE1_LIBS)"; export HOST_LIBS; \ + GMPLIBS="$(HOST_GMPLIBS)"; export GMPLIBS; \ + GMPINC="$(HOST_GMPINC)"; export GMPINC; \ +diff --git a/gcc/config.in b/gcc/config.in +index f0fbf123aa8..af84efc4f9e 100644 +--- a/gcc/config.in ++++ b/gcc/config.in +@@ -118,6 +118,12 @@ + #endif + + ++/* Define if libatomic should always be linked. */ ++#ifndef USED_FOR_TARGET ++#undef ENABLE_AUTOLINK_LIBATOMIC ++#endif ++ ++ + /* Define to 1 to specify that we are using the BID decimal floating point + format instead of DPD */ + #ifndef USED_FOR_TARGET +diff --git a/gcc/config/gnu-user.h b/gcc/config/gnu-user.h +index 8433e56c3e1..0347f10da8b 100644 +--- a/gcc/config/gnu-user.h ++++ b/gcc/config/gnu-user.h +@@ -109,8 +109,18 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see + #define LINK_EH_SPEC "%{!static|static-pie:--eh-frame-hdr} " + #endif + ++#if !defined(LINK_LIBATOMIC_SPEC) && defined(ENABLE_AUTOLINK_LIBATOMIC) ++# ifdef LD_AS_NEEDED_OPTION ++# define LINK_LIBATOMIC_SPEC LD_AS_NEEDED_OPTION " -latomic " LD_NO_AS_NEEDED_OPTION ++# else ++# define LINK_LIBATOMIC_SPEC "-latomic" ++# endif ++#elif !defined(LINK_LIBATOMIC_SPEC) ++# define LINK_LIBATOMIC_SPEC "" ++#endif ++ + #define GNU_USER_TARGET_LINK_GCC_C_SEQUENCE_SPEC \ +- "%{static|static-pie:--start-group} %G %{!nolibc:%L} \ ++ "%{static|static-pie:--start-group} %G %{!nolibc:" LINK_LIBATOMIC_SPEC " %L} \ + %{static|static-pie:--end-group}%{!static:%{!static-pie:%G}}" + + #undef LINK_GCC_C_SEQUENCE_SPEC +diff --git a/gcc/configure b/gcc/configure +index 2f6b3265a6c..6dc65bf4ccb 100755 +--- a/gcc/configure ++++ b/gcc/configure +@@ -981,6 +981,7 @@ with_changes_root_url + enable_languages + with_multilib_list + with_multilib_generator ++enable_autolink_libatomic + with_zstd + with_zstd_include + with_zstd_lib +@@ -1710,6 +1711,9 @@ Optional Features: + --disable-shared don't provide a shared libgcc + --disable-gcov don't provide libgcov and related host tools + --enable-languages=LIST specify which front-ends to build ++ --enable-autolink-libatomic ++ enable automatic linking of libatomic (ignored if ++ not built) + --disable-rpath do not hardcode runtime library paths + --enable-sjlj-exceptions + arrange to use setjmp/longjmp exception handling +@@ -8324,7 +8328,6 @@ else + fi + + +- + # Check whether --with-multilib-generator was given. + if test "${with_multilib_generator+set}" = set; then : + withval=$with_multilib_generator; : +@@ -8332,6 +8335,32 @@ else + with_multilib_generator=default + fi + ++# If libatomic is available, whether it should be linked automatically ++# Check whether --enable-autolink-libatomic was given. ++if test "${enable_autolink_libatomic+set}" = set; then : ++ enableval=$enable_autolink_libatomic; ++ case $enable_autolink_libatomic in ++ yes | no) ;; ++ *) as_fn_error $? "'$enable_autolink_libatomic' is an invalid value for ++--enable-autolink-libatomic. Valid choices are 'yes' and 'no'." "$LINENO" 5 ;; ++ esac ++ ++else ++ enable_autolink_libatomic='' ++fi ++ ++ ++if test x$enable_autolink_libatomic = xyes; then ++ if echo " ${TARGET_CONFIGDIRS} " | grep " libatomic " > /dev/null 2>&1 ; then ++ ++$as_echo "#define ENABLE_AUTOLINK_LIBATOMIC 1" >>confdefs.h ++ ++ else ++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: libatomic is not build for this target, --enable-autolink-libatomic ignored" >&5 ++$as_echo "$as_me: WARNING: libatomic is not build for this target, --enable-autolink-libatomic ignored" >&2;} ++ fi ++fi ++ + + # ------------------------- + # Checks for other programs +@@ -34296,4 +34325,3 @@ if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} + fi + +- +diff --git a/gcc/configure.ac b/gcc/configure.ac +index e683d3a7a5f..07c81c78336 100644 +--- a/gcc/configure.ac ++++ b/gcc/configure.ac +@@ -1205,6 +1205,27 @@ AC_ARG_WITH(multilib-generator, + :, + with_multilib_generator=default) + ++# If libatomic is available, whether it should be linked automatically ++AC_ARG_ENABLE(autolink-libatomic, ++[AS_HELP_STRING([--enable-autolink-libatomic], ++ [enable automatic linking of libatomic (ignored if not built)])], ++[ ++ case $enable_autolink_libatomic in ++ yes | no) ;; ++ *) AC_MSG_ERROR(['$enable_autolink_libatomic' is an invalid value for ++--enable-autolink-libatomic. Valid choices are 'yes' and 'no'.]) ;; ++ esac ++], [enable_autolink_libatomic='']) ++ ++if test x$enable_autolink_libatomic = xyes; then ++ if echo " ${TARGET_CONFIGDIRS} " | grep " libatomic " > /dev/null 2>&1 ; then ++ AC_DEFINE(ENABLE_AUTOLINK_LIBATOMIC, 1, ++ [Define if libatomic should always be linked.]) ++ else ++ AC_MSG_WARN([libatomic is not build for this target, --enable-autolink-libatomic ignored]) ++ fi ++fi ++ + # ------------------------- + # Checks for other programs + # ------------------------- +@@ -7839,4 +7860,3 @@ done + ], + [subdirs='$subdirs']) + AC_OUTPUT +- +diff --git a/gcc/doc/install.texi b/gcc/doc/install.texi +index 48408d842db..c90be0ee750 100644 +--- a/gcc/doc/install.texi ++++ b/gcc/doc/install.texi +@@ -2295,6 +2295,14 @@ files, but these changed header paths may conflict with some compilation + environments. Enabled by default, and may be disabled using + @option{--disable-canonical-system-headers}. + ++@item --enable-autolink-libatomic ++@itemx --disable-autolink-libatomic ++Tell GCC that it should automatically link libatomic; if supported by ++the linker, the file is only linked as needed. This flag is ignored ++when libatomic is not built. Note that this conigure flag is in particular ++useful when building an offloading-target compiler; as for those, a ++user had to specify @code{-foffload=target=-latomic} otherwise. ++ + @item --with-glibc-version=@var{major}.@var{minor} + Tell GCC that when the GNU C Library (glibc) is used on the target it + will be version @var{major}.@var{minor} or later. Normally this can +diff --git a/gcc/doc/tm.texi b/gcc/doc/tm.texi +index c5006afc00d..56b62c69ae8 100644 +--- a/gcc/doc/tm.texi ++++ b/gcc/doc/tm.texi +@@ -381,7 +381,13 @@ the argument @option{-lgcc} to tell the linker to do the search. + + @defmac LINK_GCC_C_SEQUENCE_SPEC + The sequence in which libgcc and libc are specified to the linker. +-By default this is @code{%G %L %G}. ++By default this is @code{%G LINK_LIBATOMIC_SPEC %L %G}. ++@end defmac ++ ++@defmac LINK_LIBATOMIC_SPEC ++This macro is used in the default @code{LINK_GCC_C_SEQUENCE_SPEC} to link ++libatomic. By default, it is unset unless @code{ENABLE_AUTOLINK_LIBATOMIC} ++is set. + @end defmac + + @defmac POST_LINK_SPEC +diff --git a/gcc/doc/tm.texi.in b/gcc/doc/tm.texi.in +index f869ddd5e5b..57c93f24ac3 100644 +--- a/gcc/doc/tm.texi.in ++++ b/gcc/doc/tm.texi.in +@@ -381,7 +381,13 @@ the argument @option{-lgcc} to tell the linker to do the search. + + @defmac LINK_GCC_C_SEQUENCE_SPEC + The sequence in which libgcc and libc are specified to the linker. +-By default this is @code{%G %L %G}. ++By default this is @code{%G LINK_LIBATOMIC_SPEC %L %G}. ++@end defmac ++ ++@defmac LINK_LIBATOMIC_SPEC ++This macro is used in the default @code{LINK_GCC_C_SEQUENCE_SPEC} to link ++libatomic. By default, it is unset unless @code{ENABLE_AUTOLINK_LIBATOMIC} ++is set. + @end defmac + + @defmac POST_LINK_SPEC +diff --git a/gcc/gcc.cc b/gcc/gcc.cc +index 735b2b1bba1..f10f3c91aa7 100644 +--- a/gcc/gcc.cc ++++ b/gcc/gcc.cc +@@ -987,13 +987,23 @@ proper position among the other output files. */ + # define ASM_DEBUG_OPTION_SPEC "" + #endif + ++#if !defined(LINK_LIBATOMIC_SPEC) && defined(ENABLE_AUTOLINK_LIBATOMIC) ++# ifdef LD_AS_NEEDED_OPTION ++# define LINK_LIBATOMIC_SPEC LD_AS_NEEDED_OPTION " -latomic " LD_NO_AS_NEEDED_OPTION ++# else ++# define LINK_LIBATOMIC_SPEC "-latomic" ++# endif ++#elif !defined(LINK_LIBATOMIC_SPEC) ++# define LINK_LIBATOMIC_SPEC "" ++#endif ++ + /* Here is the spec for running the linker, after compiling all files. */ + + /* This is overridable by the target in case they need to specify the + -lgcc and -lc order specially, yet not require them to override all + of LINK_COMMAND_SPEC. */ + #ifndef LINK_GCC_C_SEQUENCE_SPEC +-#define LINK_GCC_C_SEQUENCE_SPEC "%G %{!nolibc:%L %G}" ++#define LINK_GCC_C_SEQUENCE_SPEC "%G %{!nolibc:" LINK_LIBATOMIC_SPEC " %L %G}" + #endif + + #ifdef ENABLE_DEFAULT_SSP diff --git a/cross/gcc-riscv64/0036-configure-fix-detection-of-atomic-builtins-in-libato.patch b/cross/gcc-riscv64/0036-configure-fix-detection-of-atomic-builtins-in-libato.patch new file mode 100644 index 000000000..f77fb63a9 --- /dev/null +++ b/cross/gcc-riscv64/0036-configure-fix-detection-of-atomic-builtins-in-libato.patch @@ -0,0 +1,54 @@ +From 4baaeb9661fa4015d9701e3616ce1ad4e8a07fd8 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?S=C3=B6ren=20Tempel?= +Date: Sun, 29 Aug 2021 09:45:27 +0200 +Subject: [PATCH] configure: fix detection of atomic builtins in libatomic + configure script + +Alpine's --enable-autolink-libatomic (which is enabled for riscv64 by +default) causes the libatomic configure script to incorrectly detect +which builtins are available on riscv64. This then causes incorrect code +generation for libatomic since it assumes compiler builtins to be +available which are not actually available on riscv64. + +This commit fixes this issue by disabling linking of libatomic configure +test code entirely, thereby preventing linking against libatomic. + +See: + +* https://gitlab.alpinelinux.org/alpine/aports/-/issues/12948 +* https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101996#c6 +--- + libatomic/configure.tgt | 20 ++++++++++++++++++++ + 1 file changed, 20 insertions(+) + +diff --git a/libatomic/configure.tgt b/libatomic/configure.tgt +index 33f8c91ce77..3999db2cf8a 100644 +--- a/libatomic/configure.tgt ++++ b/libatomic/configure.tgt +@@ -30,6 +30,26 @@ + # on ${target_cpu}. For example to allow proper use of multilibs. + configure_tgt_pre_target_cpu_XCFLAGS="${XCFLAGS}" + ++# The libatomic configure script performs several checks to determine ++# whether builtins for atomic operations are available. When compiling ++# with --enable-autolink-libatomic the test code compiled by the ++# configure script is also linked against libatomic. This causes it ++# to think that builtins are available, even if there are not, since ++# the tested symbols are provided by libatomic. ++# ++# This is a hack to ensure that we don't link against libatomic by not ++# linking any configure test code at all when --enable-autolink-libatomic ++# is given. ++# ++# See: ++# ++# * https://gitlab.alpinelinux.org/alpine/aports/-/issues/12817 ++# * https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101996#c4 ++# ++if test x$enable_autolink_libatomic = xyes; then ++ gcc_no_link=yes ++fi ++ + case "${target_cpu}" in + alpha*) + # fenv.c needs this option to generate inexact exceptions. diff --git a/cross/gcc-riscv64/0037-libgo-Recognize-off64_t-and-loff_t-definitions-of-mu.patch b/cross/gcc-riscv64/0037-libgo-Recognize-off64_t-and-loff_t-definitions-of-mu.patch new file mode 100644 index 000000000..e0423d47b --- /dev/null +++ b/cross/gcc-riscv64/0037-libgo-Recognize-off64_t-and-loff_t-definitions-of-mu.patch @@ -0,0 +1,199 @@ +From 3b9243b891cc06373639a23ed5717b0d1c2d8ea6 Mon Sep 17 00:00:00 2001 +From: Ian Lance Taylor +Date: Tue, 14 Jun 2022 06:13:43 -0700 +Subject: [PATCH] libgo: permit loff_t and off_t to be macros +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +They are macros in musl libc, rather than typedefs, and -fgo-dump-spec +doesn't handle that case. + +Based on patch by Sören Tempel. + +Change-Id: Ic9a608fd964a6f78e754aa8e3100aff06ab3dade +Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/412075 +Reviewed-by: Ian Lance Taylor +Reviewed-by: Cherry Mui + +libgo: #include when checking for loff_t + +Fixes https://gcc.gnu.org/PR106033 +Fixes golang/go#53469 + +Change-Id: I060021b7bb9334949b567442448abb6822fd6d35 +Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/413214 +Reviewed-by: Cherry Mui +Reviewed-by: Than McIntosh +--- + libgo/config.h.in | 3 +++ + libgo/configure | 12 ++++++++++-- + libgo/configure.ac | 11 +++++++++-- + libgo/go/syscall/libcall_linux.go | 17 +++++++++-------- + libgo/mksysinfo.sh | 6 +----- + libgo/sysinfo.c | 15 ++++++++++++++- + 6 files changed, 46 insertions(+), 18 deletions(-) + +diff --git a/libgo/config.h.in b/libgo/config.h.in +index 25b8ab8f9ee..2c3c7469675 100644 +--- a/libgo/config.h.in ++++ b/libgo/config.h.in +@@ -70,6 +70,9 @@ + /* Define to 1 if you have the `fchownat' function. */ + #undef HAVE_FCHOWNAT + ++/* Define to 1 if you have the header file. */ ++#undef HAVE_FCNTL_H ++ + /* Define to 1 if you have the `futimesat' function. */ + #undef HAVE_FUTIMESAT + +diff --git a/libgo/configure b/libgo/configure +index ffe17c9be55..61a49947eb9 100755 +--- a/libgo/configure ++++ b/libgo/configure +@@ -15249,7 +15249,7 @@ $as_echo "#define HAVE_GETIPINFO 1" >>confdefs.h + fi + + +-for ac_header in port.h sched.h semaphore.h sys/file.h sys/mman.h syscall.h sys/epoll.h sys/event.h sys/inotify.h sys/ptrace.h sys/syscall.h sys/sysctl.h sys/user.h sys/utsname.h sys/select.h sys/socket.h net/bpf.h net/if.h net/if_arp.h net/route.h netpacket/packet.h sys/prctl.h sys/mount.h sys/vfs.h sys/statfs.h sys/timex.h sys/sysinfo.h utime.h linux/ether.h linux/fs.h linux/ptrace.h linux/reboot.h netinet/in_syst.h netinet/ip.h netinet/ip_mroute.h netinet/if_ether.h lwp.h ++for ac_header in fcntl.h port.h sched.h semaphore.h sys/file.h sys/mman.h syscall.h sys/epoll.h sys/event.h sys/inotify.h sys/ptrace.h sys/syscall.h sys/sysctl.h sys/user.h sys/utsname.h sys/select.h sys/socket.h net/bpf.h net/if.h net/if_arp.h net/route.h netpacket/packet.h sys/prctl.h sys/mount.h sys/vfs.h sys/statfs.h sys/timex.h sys/sysinfo.h utime.h linux/ether.h linux/fs.h linux/ptrace.h linux/reboot.h netinet/in_syst.h netinet/ip.h netinet/ip_mroute.h netinet/if_ether.h lwp.h + do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` + ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +@@ -15546,7 +15546,14 @@ _ACEOF + + fi + +-ac_fn_c_check_type "$LINENO" "loff_t" "ac_cv_type_loff_t" "$ac_includes_default" ++ ++CFLAGS_hold="$CFLAGS" ++CFLAGS="$OSCFLAGS $CFLAGS" ++ac_fn_c_check_type "$LINENO" "loff_t" "ac_cv_type_loff_t" " ++#include ++#include ++ ++" + if test "x$ac_cv_type_loff_t" = xyes; then : + + cat >>confdefs.h <<_ACEOF +@@ -15556,6 +15563,7 @@ _ACEOF + + fi + ++CFLAGS="$CFLAGS_hold" + + LIBS_hold="$LIBS" + LIBS="$LIBS -lm" +diff --git a/libgo/configure.ac b/libgo/configure.ac +index 7e2b98ba67c..274fcfc35c7 100644 +--- a/libgo/configure.ac ++++ b/libgo/configure.ac +@@ -579,7 +579,7 @@ AC_C_BIGENDIAN + + GCC_CHECK_UNWIND_GETIPINFO + +-AC_CHECK_HEADERS(port.h sched.h semaphore.h sys/file.h sys/mman.h syscall.h sys/epoll.h sys/event.h sys/inotify.h sys/ptrace.h sys/syscall.h sys/sysctl.h sys/user.h sys/utsname.h sys/select.h sys/socket.h net/bpf.h net/if.h net/if_arp.h net/route.h netpacket/packet.h sys/prctl.h sys/mount.h sys/vfs.h sys/statfs.h sys/timex.h sys/sysinfo.h utime.h linux/ether.h linux/fs.h linux/ptrace.h linux/reboot.h netinet/in_syst.h netinet/ip.h netinet/ip_mroute.h netinet/if_ether.h lwp.h) ++AC_CHECK_HEADERS(fcntl.h port.h sched.h semaphore.h sys/file.h sys/mman.h syscall.h sys/epoll.h sys/event.h sys/inotify.h sys/ptrace.h sys/syscall.h sys/sysctl.h sys/user.h sys/utsname.h sys/select.h sys/socket.h net/bpf.h net/if.h net/if_arp.h net/route.h netpacket/packet.h sys/prctl.h sys/mount.h sys/vfs.h sys/statfs.h sys/timex.h sys/sysinfo.h utime.h linux/ether.h linux/fs.h linux/ptrace.h linux/reboot.h netinet/in_syst.h netinet/ip.h netinet/ip_mroute.h netinet/if_ether.h lwp.h) + + AC_CHECK_HEADERS([netinet/icmp6.h], [], [], + [#include +@@ -601,7 +601,14 @@ AC_STRUCT_DIRENT_D_TYPE + + AC_CHECK_FUNCS(accept4 dup3 epoll_create1 faccessat fallocate fchmodat fchownat futimesat getxattr inotify_add_watch inotify_init inotify_init1 inotify_rm_watch listxattr mkdirat mknodat open64 openat pipe2 removexattr renameat setxattr sync_file_range splice syscall tee unlinkat unshare utimensat) + AC_TYPE_OFF_T +-AC_CHECK_TYPES([loff_t]) ++ ++CFLAGS_hold="$CFLAGS" ++CFLAGS="$OSCFLAGS $CFLAGS" ++AC_CHECK_TYPES([loff_t], [], [], [[ ++#include ++#include ++]]) ++CFLAGS="$CFLAGS_hold" + + LIBS_hold="$LIBS" + LIBS="$LIBS -lm" +diff --git a/libgo/go/syscall/libcall_linux.go b/libgo/go/syscall/libcall_linux.go +index 96974bd3269..65eb1a745f7 100644 +--- a/libgo/go/syscall/libcall_linux.go ++++ b/libgo/go/syscall/libcall_linux.go +@@ -209,19 +209,20 @@ func Gettid() (tid int) { + //sys Setxattr(path string, attr string, data []byte, flags int) (err error) + //setxattr(path *byte, name *byte, value *byte, size Size_t, flags _C_int) _C_int + +-//sys splice(rfd int, roff *_loff_t, wfd int, woff *_loff_t, len int, flags int) (n int64, err error) +-//splice(rfd _C_int, roff *_loff_t, wfd _C_int, woff *_loff_t, len Size_t, flags _C_uint) Ssize_t ++//sys splice(rfd int, roff *_libgo_loff_t_type, wfd int, woff *_libgo_loff_t_type, len int, flags int) (n int64, err error) ++//splice(rfd _C_int, roff *_libgo_loff_t_type, wfd _C_int, woff *_libgo_loff_t_type, len Size_t, flags _C_uint) Ssize_t ++ + func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) { +- var lroff _loff_t +- var plroff *_loff_t ++ var lroff _libgo_loff_t_type ++ var plroff *_libgo_loff_t_type + if roff != nil { +- lroff = _loff_t(*roff) ++ lroff = _libgo_loff_t_type(*roff) + plroff = &lroff + } +- var lwoff _loff_t +- var plwoff *_loff_t ++ var lwoff _libgo_loff_t_type ++ var plwoff *_libgo_loff_t_type + if woff != nil { +- lwoff = _loff_t(*woff) ++ lwoff = _libgo_loff_t_type(*woff) + plwoff = &lwoff + } + n, err = splice(rfd, plroff, wfd, plwoff, len, flags) +diff --git a/libgo/mksysinfo.sh b/libgo/mksysinfo.sh +index 0c52ea5d71a..5aa309155c3 100755 +--- a/libgo/mksysinfo.sh ++++ b/libgo/mksysinfo.sh +@@ -403,11 +403,7 @@ fi + # Some basic types. + echo 'type Size_t _size_t' >> ${OUT} + echo "type Ssize_t _ssize_t" >> ${OUT} +-if grep '^const _HAVE_OFF64_T = ' gen-sysinfo.go > /dev/null 2>&1; then +- echo "type Offset_t _off64_t" >> ${OUT} +-else +- echo "type Offset_t _off_t" >> ${OUT} +-fi ++echo "type Offset_t _libgo_off_t_type" >> ${OUT} + echo "type Mode_t _mode_t" >> ${OUT} + echo "type Pid_t _pid_t" >> ${OUT} + echo "type Uid_t _uid_t" >> ${OUT} +diff --git a/libgo/sysinfo.c b/libgo/sysinfo.c +index 336a5983750..fc0210992fa 100644 +--- a/libgo/sysinfo.c ++++ b/libgo/sysinfo.c +@@ -354,6 +354,18 @@ enum { + }; + #endif + ++#if defined(HAVE_LOFF_T) ++// loff_t can be defined as a macro; for -fgo-dump-spec make sure we ++// see a typedef. ++typedef loff_t libgo_loff_t_type; ++#endif ++ ++#if defined(HAVE_OFF64_T) ++typedef off64_t libgo_off_t_type; ++#else ++typedef off_t libgo_off_t_type; ++#endif ++ + // The following section introduces explicit references to types and + // constants of interest to support bootstrapping libgo using a + // compiler that doesn't support -fdump-go-spec (e.g., clang), via +@@ -534,7 +546,8 @@ SREF(timex); + // From sys/types.h + TREF(pid_t); + TREF(off_t); +-TREF(loff_t); ++TREF(libgo_loff_t_type); ++TREF(libgo_off_t_type); + TREF(size_t); + TREF(ssize_t); + TREF(mode_t); diff --git a/cross/gcc-riscv64/0039-gcc-go-Use-int64-type-as-offset-argument-for-mmap.patch b/cross/gcc-riscv64/0039-gcc-go-Use-int64-type-as-offset-argument-for-mmap.patch new file mode 100644 index 000000000..4867ab090 --- /dev/null +++ b/cross/gcc-riscv64/0039-gcc-go-Use-int64-type-as-offset-argument-for-mmap.patch @@ -0,0 +1,39 @@ +From 4b6240d5301ce04b8bbc3e2152915cbc7da80584 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?S=C3=B6ren=20Tempel?= +Date: Wed, 28 Sep 2022 17:30:14 +0200 +Subject: [PATCH] libgo: use _off_t for mmap offset argument + +On glibc-based systems, off_t is a 32-bit type on 32-bit systems and a +64-bit type on 64-bit systems by default. However, on systems using musl +libc off_t is unconditionally a 64-bit type. As such, it is insufficient +to use a uintptr type for the mmap offset parameter. + +Presently, the (incorrect) mmap declaration causes a libgo run-time +failure on 32-bit musl systems (fatal error: runtime: cannot allocate +memory). This commit fixes this run-time error. +--- + libgo/go/runtime/mem_gccgo.go | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/libgo/go/runtime/mem_gccgo.go b/libgo/go/runtime/mem_gccgo.go +index fa3389d8..07bf325a 100644 +--- a/libgo/go/runtime/mem_gccgo.go ++++ b/libgo/go/runtime/mem_gccgo.go +@@ -15,7 +15,7 @@ import ( + //go:linkname sysFree + + //extern mmap +-func sysMmap(addr unsafe.Pointer, n uintptr, prot, flags, fd int32, off uintptr) unsafe.Pointer ++func sysMmap(addr unsafe.Pointer, n uintptr, prot, flags, fd int32, off _off_t) unsafe.Pointer + + //extern munmap + func munmap(addr unsafe.Pointer, length uintptr) int32 +@@ -38,7 +38,7 @@ func init() { + } + + func mmap(addr unsafe.Pointer, n uintptr, prot, flags, fd int32, off uintptr) (unsafe.Pointer, int) { +- p := sysMmap(addr, n, prot, flags, fd, off) ++ p := sysMmap(addr, n, prot, flags, fd, _off_t(off)) + if uintptr(p) == _MAP_FAILED { + return nil, errno() + } diff --git a/cross/gcc-riscv64/0041-go-gospec-forcibly-disable-fsplit-stack-support.patch b/cross/gcc-riscv64/0041-go-gospec-forcibly-disable-fsplit-stack-support.patch new file mode 100644 index 000000000..5cebe745b --- /dev/null +++ b/cross/gcc-riscv64/0041-go-gospec-forcibly-disable-fsplit-stack-support.patch @@ -0,0 +1,71 @@ +From c86b726c048eddc1be320c0bf64a897658bee13d Mon Sep 17 00:00:00 2001 +From: Uros Bizjak +Date: Wed, 18 May 2022 20:03:26 +0200 +Subject: [PATCH] x86: Fix -fsplit-stack feature detection via + TARGET_CAN_SPLIT_STACK +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Since commit c163647ffbc9a20c8feb6e079dbecccfe016c82e -fsplit-stack +is only supported on glibc targets. However, this original commit +required some fixups. As part of the fixup, the changes to the +gnu-user-common.h and gnu.h were partially reverted in commit +60953a23d57b13a672f751bec0c6eefc059eb1ab thus causing TARGET_CAN_SPLIT_STACK +to be defined for non-glibc targets even though -fsplit-stack is +actually not supported and attempting to use it causes a runtime error. + +This causes gcc internal code, such as ./gcc/go/gospec.c to not +correctly detect that -fsplit-stack is not supported and thus causes +gccgo to fail compilation on non-glibc targets. + +This commit ensures that TARGET_CAN_SPLIT_STACK is only set if the +default libc is glibc. It is presently unclear to me if there is a +better way to detect glibc at pre-processor time. + +The proposed changes have been tested on x86 and x86_64 Alpine Linux +(which uses musl libc) and fix compilation of gccgo for this target. + +Signed-off-by: Sören Tempel + +gcc/ChangeLog: + + * config/i386/gnu-user-common.h (defined): Only define + TARGET_CAN_SPLIT_STACK for glibc targets. + * config/i386/gnu.h (defined): Ditto. +--- + gcc/config/i386/gnu-user-common.h | 5 +++-- + gcc/config/i386/gnu.h | 5 +++-- + 2 files changed, 6 insertions(+), 4 deletions(-) + +diff --git a/gcc/config/i386/gnu-user-common.h b/gcc/config/i386/gnu-user-common.h +index 23b54c5be52..cab9be2bfb7 100644 +--- a/gcc/config/i386/gnu-user-common.h ++++ b/gcc/config/i386/gnu-user-common.h +@@ -66,7 +66,8 @@ along with GCC; see the file COPYING3. If not see + #define STACK_CHECK_STATIC_BUILTIN 1 + + /* We only build the -fsplit-stack support in libgcc if the +- assembler has full support for the CFI directives. */ +-#if HAVE_GAS_CFI_PERSONALITY_DIRECTIVE ++ assembler has full support for the CFI directives. Also ++ we only support -fsplit-stack on glibc targets. */ ++#if (DEFAULT_LIBC == LIBC_GLIBC) && HAVE_GAS_CFI_PERSONALITY_DIRECTIVE + #define TARGET_CAN_SPLIT_STACK + #endif +diff --git a/gcc/config/i386/gnu.h b/gcc/config/i386/gnu.h +index 401e60c9a02..fb8d69a97d8 100644 +--- a/gcc/config/i386/gnu.h ++++ b/gcc/config/i386/gnu.h +@@ -41,8 +41,9 @@ along with GCC. If not, see . + #define TARGET_THREAD_SSP_OFFSET 0x14 + + /* We only build the -fsplit-stack support in libgcc if the +- assembler has full support for the CFI directives. */ +-#if HAVE_GAS_CFI_PERSONALITY_DIRECTIVE ++ assembler has full support for the CFI directives. Also ++ we only support -fsplit-stack on glibc targets. */ ++#if (DEFAULT_LIBC == LIBC_GLIBC) && HAVE_GAS_CFI_PERSONALITY_DIRECTIVE + #define TARGET_CAN_SPLIT_STACK + #endif + /* We steal the last transactional memory word. */ diff --git a/cross/gcc-riscv64/0042-gcc-go-fix-build-error-with-SYS_SECCOMP.patch b/cross/gcc-riscv64/0042-gcc-go-fix-build-error-with-SYS_SECCOMP.patch new file mode 100644 index 000000000..db38df3b0 --- /dev/null +++ b/cross/gcc-riscv64/0042-gcc-go-fix-build-error-with-SYS_SECCOMP.patch @@ -0,0 +1,41 @@ +From 548720bca6bff21ebc9aba22249d9ce45bbd90c7 Mon Sep 17 00:00:00 2001 +From: Ian Lance Taylor +Date: Wed, 29 Jun 2022 15:32:04 -0700 +Subject: [PATCH] libgo: handle stat st_atim32 field and SYS_SECCOMP +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Patches for musl support, from Sören Tempel. + +Fixes https://gcc.gnu.org/PR105225 + +Change-Id: If396877d4a4c7d27962226d7a6e3bb91b1344413 +Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/415294 +Reviewed-by: Than McIntosh +Reviewed-by: Ian Lance Taylor +--- + libgo/mksysinfo.sh | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/libgo/mksysinfo.sh b/libgo/mksysinfo.sh +index 5aa30915..ea1fa17d 100755 +--- a/libgo/mksysinfo.sh ++++ b/libgo/mksysinfo.sh +@@ -127,6 +127,7 @@ fi + + # The syscall numbers. We force the names to upper case. + grep '^const _SYS_' gen-sysinfo.go | \ ++ grep -v '^const _SYS_SECCOMP = ' | \ + sed -e 's/const _\(SYS_[^= ]*\).*$/\1/' | \ + while read sys; do + sup=`echo $sys | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ` +@@ -506,7 +507,7 @@ fi + + # For historical reasons Go uses the suffix "timespec" instead of "tim" for + # stat_t's time fields on NetBSD. +-st_times='-e s/st_atim/Atim/ -e s/st_mtim/Mtim/ -e s/st_ctim/Ctim/' ++st_times='-e s/st_atim/Atim/g -e s/st_mtim/Mtim/g -e s/st_ctim/Ctim/g' + if test "${GOOS}" = "netbsd"; then + st_times='-e s/st_atim/Atimespec/ -e s/st_mtim/Mtimespec/ -e s/st_ctim/Ctimespec/' + fi diff --git a/cross/gcc-riscv64/0043-libstdc-do-not-throw-exceptions-for-non-C-locales-on.patch b/cross/gcc-riscv64/0043-libstdc-do-not-throw-exceptions-for-non-C-locales-on.patch new file mode 100644 index 000000000..2b0c3ef0b --- /dev/null +++ b/cross/gcc-riscv64/0043-libstdc-do-not-throw-exceptions-for-non-C-locales-on.patch @@ -0,0 +1,24 @@ +From 20c84de53efcb86993f1a1909e65a97240d6123e Mon Sep 17 00:00:00 2001 +From: Samuel Holland +Date: Thu, 30 Jun 2022 17:08:36 +0000 +Subject: [PATCH] libstdc++: do not throw exceptions for non-C locales on musl + targets + +--- + libstdc++-v3/config/locale/generic/c_locale.cc | 3 --- + 1 file changed, 3 deletions(-) + +diff --git a/libstdc++-v3/config/locale/generic/c_locale.cc b/libstdc++-v3/config/locale/generic/c_locale.cc +index 1e4db8d4415..9b79bc3c5dd 100644 +--- a/libstdc++-v3/config/locale/generic/c_locale.cc ++++ b/libstdc++-v3/config/locale/generic/c_locale.cc +@@ -242,9 +242,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION + // Currently, the generic model only supports the "C" locale. + // See http://gcc.gnu.org/ml/libstdc++/2003-02/msg00345.html + __cloc = 0; +- if (strcmp(__s, "C")) +- __throw_runtime_error(__N("locale::facet::_S_create_c_locale " +- "name not valid")); + } + + void diff --git a/cross/gcc-riscv64/0044-gdc-unconditionally-link-libgphobos-against-libucont.patch b/cross/gcc-riscv64/0044-gdc-unconditionally-link-libgphobos-against-libucont.patch new file mode 100644 index 000000000..09a4b1a1a --- /dev/null +++ b/cross/gcc-riscv64/0044-gdc-unconditionally-link-libgphobos-against-libucont.patch @@ -0,0 +1,23 @@ +From b6554d1207d0f5771c2f5d11316b61787e4dd705 Mon Sep 17 00:00:00 2001 +From: Mathias LANG +Date: Mon, 17 Jan 2022 16:31:09 +0000 +Subject: [PATCH] gdc: unconditionally link libgphobos against libucontext + +ref: alpine/aports#13422 +--- + Makefile.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Makefile.in b/Makefile.in +index a95c7407d16..ea942d60387 100644 +--- a/Makefile.in ++++ b/Makefile.in +@@ -53287,7 +53287,7 @@ configure-target-libphobos: + esac; \ + module_srcdir=libphobos; \ + rm -f no-such-file || : ; \ +- CONFIG_SITE=no-such-file $(SHELL) \ ++ CONFIG_SITE=no-such-file LIBS="-lucontext $$LIBS" $(SHELL) \ + $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \ diff --git a/cross/gcc-riscv64/0045-druntime-link-against-libucontext-on-all-platforms.patch b/cross/gcc-riscv64/0045-druntime-link-against-libucontext-on-all-platforms.patch new file mode 100644 index 000000000..9adcb0466 --- /dev/null +++ b/cross/gcc-riscv64/0045-druntime-link-against-libucontext-on-all-platforms.patch @@ -0,0 +1,51 @@ +From 39f5c9a850917a3c19630c0115ef0d5b0f151c72 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?S=C3=B6ren=20Tempel?= +Date: Sat, 16 Jul 2022 13:26:49 +0200 +Subject: [PATCH] druntime: link against libucontext on all platforms + +On musl-based Linux distributions, swapcontext etc. are not provided by +musl but instead by libucontext. Hence, we _always_ need to link against +an external library for these functions. +--- + libphobos/configure | 8 -------- + libphobos/m4/druntime/libraries.m4 | 8 -------- + 2 files changed, 16 deletions(-) + +diff --git a/libphobos/configure b/libphobos/configure +index 9da06f087d0..0db0acfb9c2 100755 +--- a/libphobos/configure ++++ b/libphobos/configure +@@ -15192,14 +15192,6 @@ fi + # Keep this in sync with core/thread.d, set druntime_fiber_asm_external to + # "yes" for targets that have 'version = AsmExternal'. + druntime_fiber_asm_external=no +- case "$target_cpu" in +- aarch64* | \ +- arm* | \ +- i[34567]86|x86_64 | \ +- powerpc) +- druntime_fiber_asm_external=yes +- ;; +- esac + if test "$druntime_fiber_asm_external" = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing swapcontext" >&5 + $as_echo_n "checking for library containing swapcontext... " >&6; } +diff --git a/libphobos/m4/druntime/libraries.m4 b/libphobos/m4/druntime/libraries.m4 +index 45a56f6f76a..fef6e890b1e 100644 +--- a/libphobos/m4/druntime/libraries.m4 ++++ b/libphobos/m4/druntime/libraries.m4 +@@ -220,14 +220,6 @@ AC_DEFUN([DRUNTIME_LIBRARIES_UCONTEXT], + # Keep this in sync with core/thread.d, set druntime_fiber_asm_external to + # "yes" for targets that have 'version = AsmExternal'. + druntime_fiber_asm_external=no +- case "$target_cpu" in +- aarch64* | \ +- arm* | \ +- i[[34567]]86|x86_64 | \ +- powerpc) +- druntime_fiber_asm_external=yes +- ;; +- esac + if test "$druntime_fiber_asm_external" = no; then + AC_SEARCH_LIBS([swapcontext], [c ucontext], [], + AC_MSG_ERROR([swapcontext required but not found])) diff --git a/cross/gcc-riscv64/0049-libgo-adjust-name-of-union-in-sigevent-struct.patch b/cross/gcc-riscv64/0049-libgo-adjust-name-of-union-in-sigevent-struct.patch new file mode 100644 index 000000000..0f949be3a --- /dev/null +++ b/cross/gcc-riscv64/0049-libgo-adjust-name-of-union-in-sigevent-struct.patch @@ -0,0 +1,108 @@ +From 8f1a91aeff400d572857895b7f5e863ec5a4d93e Mon Sep 17 00:00:00 2001 +From: Ian Lance Taylor +Date: Mon, 26 Sep 2022 15:03:53 -0400 +Subject: [PATCH] runtime: portable access to sigev_notify_thread_id +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Previously, libgo relied on the _sigev_un implementation-specific +field in struct sigevent, which is only available on glibc. +This patch uses the sigev_notify_thread_id macro instead which is +mandated by timer_create(2). In theory, this should work with any libc +implementation for Linux. Unfortunately, there is an open glibc bug +as glibc does not define this macro. For this reason, a glibc-specific +workaround is required. Other libcs (such as musl) define the macro +and don't require the workaround. + +See https://sourceware.org/bugzilla/show_bug.cgi?id=27417 + +This makes libgo compatible with musl libc. + +Based on patch by Sören Tempel. + +Change-Id: I0924a53d5212730ebc395ecf9199f85967be8cc6 +Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/434755 +Reviewed-by: Cherry Mui +Reviewed-by: Than McIntosh +--- + libgo/go/runtime/os_linux.go | 12 +++++++++++- + libgo/runtime/go-signal.c | 18 ++++++++++++++++++ + 2 files changed, 29 insertions(+), 1 deletion(-) + +diff --git a/libgo/go/runtime/os_linux.go b/libgo/go/runtime/os_linux.go +index 96fb1788..2b2d827c 100644 +--- a/libgo/go/runtime/os_linux.go ++++ b/libgo/go/runtime/os_linux.go +@@ -22,6 +22,12 @@ type mOS struct { + profileTimerValid uint32 + } + ++// setSigeventTID is written in C to set the sigev_notify_thread_id ++// field of a sigevent struct. ++// ++//go:noescape ++func setSigeventTID(*_sigevent, int32) ++ + func getProcID() uint64 { + return uint64(gettid()) + } +@@ -52,9 +58,12 @@ const ( + ) + + // Atomically, ++// + // if(*addr == val) sleep ++// + // Might be woken up spuriously; that's allowed. + // Don't sleep longer than ns; ns < 0 means forever. ++// + //go:nosplit + func futexsleep(addr *uint32, val uint32, ns int64) { + // Some Linux kernels have a bug where futex of +@@ -73,6 +82,7 @@ func futexsleep(addr *uint32, val uint32, ns int64) { + } + + // If any procs are sleeping on addr, wake up at most cnt. ++// + //go:nosplit + func futexwakeup(addr *uint32, cnt uint32) { + ret := futex(unsafe.Pointer(addr), _FUTEX_WAKE_PRIVATE, cnt, nil, nil, 0) +@@ -365,7 +375,7 @@ func setThreadCPUProfiler(hz int32) { + var sevp _sigevent + sevp.sigev_notify = _SIGEV_THREAD_ID + sevp.sigev_signo = _SIGPROF +- *((*int32)(unsafe.Pointer(&sevp._sigev_un))) = int32(mp.procid) ++ setSigeventTID(&sevp, int32(mp.procid)) + ret := timer_create(_CLOCK_THREAD_CPUTIME_ID, &sevp, &timerid) + if ret != 0 { + // If we cannot create a timer for this M, leave profileTimerValid false +diff --git a/libgo/runtime/go-signal.c b/libgo/runtime/go-signal.c +index 528d9b6d..aa1b6305 100644 +--- a/libgo/runtime/go-signal.c ++++ b/libgo/runtime/go-signal.c +@@ -183,6 +183,24 @@ setSigactionHandler(struct sigaction* sa, uintptr handler) + sa->sa_sigaction = (void*)(handler); + } + ++#ifdef __linux__ ++ ++// Workaround for https://sourceware.org/bugzilla/show_bug.cgi?id=27417 ++#ifndef sigev_notify_thread_id ++ #define sigev_notify_thread_id _sigev_un._tid ++#endif ++ ++void setSigeventTID(struct sigevent*, int32_t) ++ __asm__ (GOSYM_PREFIX "runtime.setSigeventTID"); ++ ++void ++setSigeventTID(struct sigevent *sev, int32_t v) ++{ ++ sev->sigev_notify_thread_id = v; ++} ++ ++#endif // defined(__linux__) ++ + // C code to fetch values from the siginfo_t and ucontext_t pointers + // passed to a signal handler. + diff --git a/cross/gcc-riscv64/0050-libphobos-don-t-define-__mode_t-twice-on-musl-target.patch b/cross/gcc-riscv64/0050-libphobos-don-t-define-__mode_t-twice-on-musl-target.patch new file mode 100644 index 000000000..6cea8b877 --- /dev/null +++ b/cross/gcc-riscv64/0050-libphobos-don-t-define-__mode_t-twice-on-musl-target.patch @@ -0,0 +1,75 @@ +From 01be086df55016ad676685c6b0dca6aa11330bfc Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?S=C3=B6ren=20Tempel?= +Date: Sun, 17 Jul 2022 13:38:39 +0200 +Subject: [PATCH] libphobos: don't define __mode_t twice on musl targets + +For musl targets, __mode_t is already aliased to uint, thus if it +aliased in an architecture-specific if-case then it is defined twice +which causes a build error. + +To-Do: Report this upstream or revise this patch in a way that is also +works with glibc and submit that upstream. +--- + libphobos/libdruntime/core/sys/posix/sys/stat.d | 7 ------- + 1 file changed, 7 deletions(-) + +diff --git a/libphobos/libdruntime/core/sys/posix/sys/stat.d b/libphobos/libdruntime/core/sys/posix/sys/stat.d +index 1fb4e44cbbf..ca31bbb7ccf 100644 +--- a/libphobos/libdruntime/core/sys/posix/sys/stat.d ++++ b/libphobos/libdruntime/core/sys/posix/sys/stat.d +@@ -167,7 +167,6 @@ version (linux) + alias __dev_t = ulong; + alias __ino_t = c_ulong; + alias __ino64_t = ulong; +- alias __mode_t = uint; + alias __nlink_t = size_t; + alias __uid_t = uint; + alias __gid_t = uint; +@@ -483,7 +482,6 @@ version (linux) + alias __dev_t = ulong; + alias __ino_t = c_ulong; + alias __ino64_t = ulong; +- alias __mode_t = uint; + alias __nlink_t = uint; + alias __uid_t = uint; + alias __gid_t = uint; +@@ -565,7 +563,6 @@ version (linux) + alias __dev_t = ulong; + alias __ino_t = c_ulong; + alias __ino64_t = ulong; +- alias __mode_t = uint; + alias __nlink_t = size_t; + alias __uid_t = uint; + alias __gid_t = uint; +@@ -660,7 +657,6 @@ version (linux) + alias __dev_t = ulong; + alias __ino_t = c_ulong; + alias __ino64_t = ulong; +- alias __mode_t = uint; + alias __nlink_t = uint; + alias __uid_t = uint; + alias __gid_t = uint; +@@ -746,7 +742,6 @@ version (linux) + alias __dev_t = ulong; + alias __ino_t = c_ulong; + alias __ino64_t = ulong; +- alias __mode_t = uint; + alias __nlink_t = uint; + alias __uid_t = uint; + alias __gid_t = uint; +@@ -838,7 +833,6 @@ version (linux) + alias __dev_t = ulong; + alias __ino_t = c_ulong; + alias __ino64_t = ulong; +- alias __mode_t = uint; + alias __nlink_t = uint; + alias __uid_t = uint; + alias __gid_t = uint; +@@ -914,7 +908,6 @@ version (linux) + alias __dev_t = ulong; + alias __ino_t = c_ulong; + alias __ino64_t = ulong; +- alias __mode_t = uint; + alias __nlink_t = ulong; + alias __uid_t = uint; + alias __gid_t = uint; diff --git a/cross/gcc-riscv64/0051-libgo-Explicitly-define-SYS_timer_settime-for-32-bit.patch b/cross/gcc-riscv64/0051-libgo-Explicitly-define-SYS_timer_settime-for-32-bit.patch new file mode 100644 index 000000000..f2f019119 --- /dev/null +++ b/cross/gcc-riscv64/0051-libgo-Explicitly-define-SYS_timer_settime-for-32-bit.patch @@ -0,0 +1,36 @@ +From d53e8a0e94e34dc609e34dd5e404debda2640cfb Mon Sep 17 00:00:00 2001 +From: Ian Lance Taylor +Date: Sat, 30 Jul 2022 07:29:28 -0700 +Subject: [PATCH] libgo: use SYS_timer_settime32 +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Musl defines SYS_timer_settime32, not SYS_timer_settime, on 32-bit systems. + +Based on patch by Sören Tempel. + +Change-Id: I1f3485028d132ceca1aba595325af24b4d72b894 +Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/420222 +Reviewed-by: Ian Lance Taylor +Reviewed-by: Cherry Mui +--- + libgo/sysinfo.c | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/libgo/sysinfo.c b/libgo/sysinfo.c +index fc021099..180f5c31 100644 +--- a/libgo/sysinfo.c ++++ b/libgo/sysinfo.c +@@ -354,6 +354,11 @@ enum { + }; + #endif + ++#if !defined(SYS_timer_settime) && defined(SYS_timer_settime32) ++// musl defines SYS_timer_settim32 on 32-bit systems. ++#define SYS_timer_settime SYS_timer_settime32 ++#endif ++ + #if defined(HAVE_LOFF_T) + // loff_t can be defined as a macro; for -fgo-dump-spec make sure we + // see a typedef. diff --git a/cross/gcc-riscv64/0052-libgnat-time_t-is-always-64-bit-on-musl-libc.patch b/cross/gcc-riscv64/0052-libgnat-time_t-is-always-64-bit-on-musl-libc.patch new file mode 100644 index 000000000..b31031491 --- /dev/null +++ b/cross/gcc-riscv64/0052-libgnat-time_t-is-always-64-bit-on-musl-libc.patch @@ -0,0 +1,22 @@ +From 4b28b8356c7ecf9375a2c07ac6be226a5693f8d2 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?S=C3=B6ren=20Tempel?= +Date: Tue, 19 Jul 2022 01:05:11 +0200 +Subject: [PATCH] libgnat: time_t is always 64-bit on musl libc + +--- + gcc/ada/libgnat/s-parame.ads | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/gcc/ada/libgnat/s-parame.ads b/gcc/ada/libgnat/s-parame.ads +index 4b8111402ba..b670e78c53b 100644 +--- a/gcc/ada/libgnat/s-parame.ads ++++ b/gcc/ada/libgnat/s-parame.ads +@@ -102,7 +102,7 @@ package System.Parameters is + -- Characteristics of time_t type -- + ------------------------------------ + +- time_t_bits : constant := Long_Integer'Size; ++ time_t_bits : constant := Long_Long_Integer'Size; + -- Number of bits in type time_t + + ---------------------------------------------- diff --git a/cross/gcc-riscv64/0053-libgo-make-match.sh-POSIX-shell-compatible.patch b/cross/gcc-riscv64/0053-libgo-make-match.sh-POSIX-shell-compatible.patch new file mode 100644 index 000000000..8758cb837 --- /dev/null +++ b/cross/gcc-riscv64/0053-libgo-make-match.sh-POSIX-shell-compatible.patch @@ -0,0 +1,50 @@ +From a62f20ae78ddd41be682dde8cab075ca4f5dbb2a Mon Sep 17 00:00:00 2001 +From: Ian Lance Taylor +Date: Fri, 22 Jul 2022 11:38:20 -0700 +Subject: [PATCH] libgo: use POSIX shell arithmetic expansion +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Avoid bash-specific ((expression)) syntax. As the bash syntax +converts a non-zero value to a zero status (and a zero value to a 1 +status), and POSIX arithmetic expansion does not, we have to negate +the result. + +Based on patch by Sören Tempel. + +Change-Id: I4c64fa15de3994a1a5c7c5ec0de6a82ddd858917 +Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/419154 +Reviewed-by: Than McIntosh +Reviewed-by: Ian Lance Taylor +--- + libgo/match.sh | 2 +- + libgo/testsuite/gotest | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/libgo/match.sh b/libgo/match.sh +index 7ed587ff..e5ed98de 100755 +--- a/libgo/match.sh ++++ b/libgo/match.sh +@@ -111,7 +111,7 @@ gobuild() { + if test "$goarch" != "386"; then + line=$(echo "$line" | sed -e "s/\\(${wrap}\\)386\\(${wrap}\\)/\10\2/g") + fi +- (($line)) ++ return $((!($line))) + } + + matched= +diff --git a/libgo/testsuite/gotest b/libgo/testsuite/gotest +index 04e4267f..0a0a7e14 100755 +--- a/libgo/testsuite/gotest ++++ b/libgo/testsuite/gotest +@@ -302,7 +302,7 @@ gobuild() { + if test "$goarch" != "386"; then + line=$(echo "$line" | sed -e "s/\\(${wrap}\\)386\\(${wrap}\\)/\10\2/g") + fi +- (($line)) ++ return $((!($line))) + } + + case "x$gofiles" in diff --git a/cross/gcc-riscv64/APKBUILD b/cross/gcc-riscv64/APKBUILD new file mode 100644 index 000000000..72ca4c9bc --- /dev/null +++ b/cross/gcc-riscv64/APKBUILD @@ -0,0 +1,812 @@ +# Automatically generated aport, do not edit! +# Generator: pmbootstrap aportgen gcc-riscv64 +# Based on: main/gcc (from Alpine) + +CTARGET_ARCH=riscv64 +CTARGET="$(arch_to_hostspec ${CTARGET_ARCH})" +LANG_D=false +LANG_OBJC=false +LANG_JAVA=false +LANG_GO=false +LANG_FORTRAN=false +LANG_ADA=false +options="!strip" + +# abuild doesn't try to tries to install "build-base-$CTARGET_ARCH" +# when this variable matches "no*" +BOOTSTRAP="nobuildbase" + +# abuild will only cross compile when this variable is set, but it +# needs to find a valid package database in there for dependency +# resolving, so we set it to /. +CBUILDROOT="/" + +_cross_configure="--disable-bootstrap --with-sysroot=/usr/$CTARGET" + +pkgname=gcc-riscv64 +_pkgbase=12.2.1 # must match gcc/BASE-VER +_pkgsnap=20220924 +pkgver=${_pkgbase}_git${_pkgsnap} +[ "$BOOTSTRAP" = "nolibc" ] && pkgname="gcc-pass2" +[ "$CBUILD" != "$CHOST" ] && _cross="-$CARCH" || _cross="" +[ "$CHOST" != "$CTARGET" ] && _target="-$CTARGET_ARCH" || _target="" + +pkgname=gcc-riscv64 +pkgrel=3 +pkgdesc="Stage2 cross-compiler for riscv64" +url="https://gcc.gnu.org" +arch="x86_64" +license="GPL-2.0-or-later LGPL-2.1-or-later" +_gccrel=$pkgver-r$pkgrel +depends="binutils-riscv64 mpc1" +makedepends_build="gcc g++ bison flex texinfo gawk zip gmp-dev mpfr-dev mpc1-dev zlib-dev" +makedepends_host="linux-headers gmp-dev mpfr-dev mpc1-dev isl-dev zlib-dev musl-dev-riscv64 binutils-riscv64" +subpackages="g++-riscv64:gpp libstdc++-dev-riscv64:libcxx_dev" +[ "$CHOST" = "$CTARGET" ] && subpackages="gcc-doc$_target" +replaces="libstdc++ binutils" + +: "${LANG_CXX:=true}" +: "${LANG_D:=true}" +: "${LANG_OBJC:=true}" +: "${LANG_GO:=true}" +: "${LANG_FORTRAN:=true}" +: "${LANG_ADA:=true}" +: "${LANG_JIT:=true}" + +_libgomp=true +_libgcc=false +_libatomic=true +_libitm=true + +if [ "$CHOST" != "$CTARGET" ]; then + if [ "$BOOTSTRAP" = nolibc ]; then + LANG_CXX=false + LANG_ADA=false + _libgcc=false + _builddir="$srcdir/build-cross-pass2" + else + _builddir="$srcdir/build-cross-final" + fi + LANG_OBJC=false + LANG_GO=false + LANG_FORTRAN=false + LANG_D=false + LANG_JIT=false + _libgomp=false + _libatomic=false + _libitm=false + + # reset target flags (should be set in crosscreate abuild) + # fixup flags. seems gcc treats CPPFLAGS as global without + # _FOR_xxx variants. wrap it in CFLAGS and CXXFLAGS. + export CFLAGS="$CPPFLAGS $CFLAGS" + export CXXFLAGS="$CPPFLAGS $CXXFLAGS" + unset CPPFLAGS + export CFLAGS_FOR_TARGET=" " + export CXXFLAGS_FOR_TARGET=" " + export LDFLAGS_FOR_TARGET=" " + + STRIP_FOR_TARGET="$CTARGET-strip" +elif [ "$CBUILD" != "$CHOST" ]; then + # fixup flags. seems gcc treats CPPFLAGS as global without + # _FOR_xxx variants. wrap it in CFLAGS and CXXFLAGS. + export CFLAGS="$CPPFLAGS $CFLAGS" + export CXXFLAGS="$CPPFLAGS $CXXFLAGS" + unset CPPFLAGS + + # reset flags and cc for build + export CC_FOR_BUILD="gcc" + export CXX_FOR_BUILD="g++" + export CFLAGS_FOR_BUILD=" " + export CXXFLAGS_FOR_BUILD=" " + export LDFLAGS_FOR_BUILD=" " + export CFLAGS_FOR_TARGET=" " + export CXXFLAGS_FOR_TARGET=" " + export LDFLAGS_FOR_TARGET=" " + + # Languages that do not need bootstrapping + LANG_OBJC=false + LANG_GO=false + LANG_FORTRAN=false + LANG_D=false + LANG_JIT=false + + STRIP_FOR_TARGET=${CROSS_COMPILE}strip + _builddir="$srcdir/build-cross-native" +else + STRIP_FOR_TARGET=${CROSS_COMPILE}strip + _builddir="$srcdir/build" +fi + +case "$CARCH" in +# GDC hasn't been ported to PowerPC +# See libphobos/configure.tgt in GCC sources for supported targets +# riscv fails with: error: static assert "unimplemented" +ppc64le|riscv64) LANG_D=false ;; +# GDC does currently not work on 32-bit musl architectures. +# This is a known upstream issue. +# See: https://github.com/dlang/druntime/pull/3383 +armhf|armv7|x86) LANG_D=false ;; +esac + +# libitm has TEXTRELs in ARM build, so disable for now +case "$CTARGET_ARCH" in +arm*) _libitm=false ;; +mips*) _libitm=false ;; +riscv64) _libitm=false ;; +esac + +# Internal libffi fails to build on MIPS at the moment, need to +# investigate further. We disable LANG_GO on mips64 as it requires +# the internal libffi. +case "$CTARGET_ARCH" in +mips*) LANG_GO=false ;; +esac + +# Fortran uses libquadmath if toolchain has __float128 +# currently on x86, x86_64 and ia64 +_libquadmath=$LANG_FORTRAN +case "$CTARGET_ARCH" in +x86 | x86_64) _libquadmath=$LANG_FORTRAN ;; +*) _libquadmath=false ;; +esac + +# libatomic is a dependency for openvswitch +$_libatomic && subpackages="$subpackages libatomic::$CTARGET_ARCH" +$_libgcc && subpackages="$subpackages libgcc::$CTARGET_ARCH" +$_libquadmath && subpackages="$subpackages libquadmath::$CTARGET_ARCH" +if $_libgomp; then + depends="$depends libgomp=$_gccrel" + subpackages="$subpackages libgomp::$CTARGET_ARCH" +fi + +case "$CARCH" in +riscv64) +LANG_ADA=false;; +esac + +_languages=c +if $LANG_CXX; then + _languages="$_languages,c++" +fi +if $LANG_D; then + subpackages="$subpackages libgphobos::$CTARGET_ARCH gcc-gdc$_target:gdc" + _languages="$_languages,d" + makedepends_build="$makedepends_build libucontext-dev gcc-gdc-bootstrap" +fi +if $LANG_OBJC; then + subpackages="$subpackages libobjc::$CTARGET_ARCH gcc-objc$_target:objc" + _languages="$_languages,objc" +fi +if $LANG_GO; then + subpackages="$subpackages libgo::$CTARGET_ARCH gcc-go$_target:go" + _languages="$_languages,go" +fi +if $LANG_FORTRAN; then + subpackages="$subpackages libgfortran::$CTARGET_ARCH gfortran$_target:gfortran" + _languages="$_languages,fortran" +fi +if $LANG_ADA; then + subpackages="$subpackages gcc-gnat$_target:gnat" + _languages="$_languages,ada" + if [ "$CBUILD" = "$CTARGET" ]; then + makedepends_build="$makedepends_build gcc-gnat-bootstrap" + subpackages="$subpackages libgnat-static:libgnatstatic:$CTARGET_ARCH libgnat::$CTARGET_ARCH" + else + subpackages="$subpackages libgnat::$CTARGET_ARCH" + makedepends_build="$makedepends_build gcc-gnat gcc-gnat$_cross" + fi +fi +if $LANG_JIT; then + subpackages="$subpackages libgccjit:jit libgccjit-dev:jitdev" +fi +makedepends="$makedepends_build $makedepends_host" + +# when using upstream releases, use this URI template +# https://gcc.gnu.org/pub/gcc/releases/gcc-${_pkgbase:-$pkgver}/gcc-${_pkgbase:-$pkgver}.tar.xz +# +# right now, we are using a git snapshot. snapshots are taken from gcc.gnu.org/pub/gcc/snapshots. +# However, since they are periodically deleted from the GCC mirrors the utilized snapshots are +# mirrored on dev.alpinelinux.org. Please ensure that the snapshot Git commit (as stated in the +# README) matches the base commit on the version-specific branch in the Git repository below. +# +# PLEASE submit all patches to gcc to https://gitlab.alpinelinux.org/kaniini/alpine-gcc-patches, +# so that they can be properly tracked and easily rebased if needed. +source="https://dev.alpinelinux.org/archive/gcc/${_pkgbase%%.*}-${_pkgsnap}/gcc-${_pkgbase%%.*}-${_pkgsnap}.tar.xz + 0001-posix_memalign.patch + 0002-gcc-poison-system-directories.patch + 0003-specs-turn-on-Wl-z-now-by-default.patch + 0004-Turn-on-D_FORTIFY_SOURCE-2-by-default-for-C-C-ObjC-O.patch + 0005-On-linux-targets-pass-as-needed-by-default-to-the-li.patch + 0006-Enable-Wformat-and-Wformat-security-by-default.patch + 0007-Enable-Wtrampolines-by-default.patch + 0008-Disable-ssp-on-nostdlib-nodefaultlibs-and-ffreestand.patch + 0009-Ensure-that-msgfmt-doesn-t-encounter-problems-during.patch + 0010-Don-t-declare-asprintf-if-defined-as-a-macro.patch + 0011-libiberty-copy-PIC-objects-during-build-process.patch + 0012-libitm-disable-FORTIFY.patch + 0013-libgcc_s.patch + 0014-nopie.patch + 0015-dlang-use-libucontext-on-mips64.patch + 0016-ada-fix-shared-linking.patch + 0017-build-fix-CXXFLAGS_FOR_BUILD-passing.patch + 0018-add-fortify-headers-paths.patch + 0019-Alpine-musl-package-provides-libssp_nonshared.a.-We-.patch + 0020-DP-Use-push-state-pop-state-for-gold-as-well-when-li.patch + 0021-mips64-disable-multilib-support.patch + 0022-aarch64-disable-multilib-support.patch + 0023-s390x-disable-multilib-support.patch + 0024-ppc64-le-disable-multilib-support.patch + 0025-x86_64-disable-multilib-support.patch + 0026-riscv-disable-multilib-support.patch + 0027-always-build-libgcc_eh.a.patch + 0028-ada-libgnarl-compatibility-for-musl.patch + 0029-ada-musl-support-fixes.patch + 0033-gcc-go-link-to-libucontext.patch + 0034-Use-generic-errstr.go-implementation-on-musl.patch + 0035-configure-Add-enable-autolink-libatomic-use-in-LINK_.patch + 0036-configure-fix-detection-of-atomic-builtins-in-libato.patch + 0037-libgo-Recognize-off64_t-and-loff_t-definitions-of-mu.patch + 0039-gcc-go-Use-int64-type-as-offset-argument-for-mmap.patch + 0041-go-gospec-forcibly-disable-fsplit-stack-support.patch + 0042-gcc-go-fix-build-error-with-SYS_SECCOMP.patch + 0043-libstdc-do-not-throw-exceptions-for-non-C-locales-on.patch + 0044-gdc-unconditionally-link-libgphobos-against-libucont.patch + 0045-druntime-link-against-libucontext-on-all-platforms.patch + 0049-libgo-adjust-name-of-union-in-sigevent-struct.patch + 0050-libphobos-don-t-define-__mode_t-twice-on-musl-target.patch + 0051-libgo-Explicitly-define-SYS_timer_settime-for-32-bit.patch + 0052-libgnat-time_t-is-always-64-bit-on-musl-libc.patch + 0053-libgo-make-match.sh-POSIX-shell-compatible.patch + " + +# we build out-of-tree +_gccdir="$srcdir"/gcc-${_pkgbase%%.*}-${_pkgsnap} +_gcclibdir="/usr/lib/gcc/$CTARGET/${_pkgbase:-$pkgver}" +_gcclibexec="/usr/libexec/gcc/$CTARGET/${_pkgbase:-$pkgver}" + +prepare() { + cd "$_gccdir" + + _err= + for i in $source; do + case "$i" in + *.patch) + msg "Applying $i" + patch -p1 -i "$srcdir"/$i || _err="$_err $i" + ;; + esac + done + + if [ -n "$_err" ]; then + error "The following patches failed:" + for i in $_err; do + echo " $i" + done + return 1 + fi + + echo ${_pkgbase:-$pkgver} > gcc/BASE-VER +} + +build() { + local _arch_configure= + local _libc_configure= + local _bootstrap_configure= + local _symvers= + local _jit_configure= + + cd "$_gccdir" + + case "$CTARGET" in + aarch64-*-*-*) _arch_configure="--with-arch=armv8-a --with-abi=lp64";; + armv5-*-*-*eabi) _arch_configure="--with-arch=armv5te --with-tune=arm926ej-s --with-float=soft --with-abi=aapcs-linux";; + armv6-*-*-*eabihf) _arch_configure="--with-arch=armv6zk --with-tune=arm1176jzf-s --with-fpu=vfp --with-float=hard --with-abi=aapcs-linux";; + armv7-*-*-*eabihf) _arch_configure="--with-arch=armv7-a --with-tune=generic-armv7-a --with-fpu=vfpv3-d16 --with-float=hard --with-abi=aapcs-linux --with-mode=thumb";; + mips-*-*-*) _arch_configure="--with-arch=mips32 --with-mips-plt --with-float=soft --with-abi=32";; + mips64-*-*-*) _arch_configure="--with-arch=mips3 --with-tune=mips64 --with-mips-plt --with-float=soft --with-abi=64";; + mips64el-*-*-*) _arch_configure="--with-arch=mips3 --with-tune=mips64 --with-mips-plt --with-float=soft --with-abi=64";; + mipsel-*-*-*) _arch_configure="--with-arch=mips32 --with-mips-plt --with-float=soft --with-abi=32";; + powerpc-*-*-*) _arch_configure="--enable-secureplt --enable-decimal-float=no";; + powerpc64*-*-*-*) _arch_configure="--with-abi=elfv2 --enable-secureplt --enable-decimal-float=no --enable-targets=powerpcle-linux";; + i486-*-*-*) _arch_configure="--with-arch=i486 --with-tune=generic --enable-cld";; + i586-*-*-*) _arch_configure="--with-arch=i586 --with-tune=generic --enable-cld";; + s390x-*-*-*) _arch_configure="--with-arch=z196 --with-tune=zEC12 --with-zarch --with-long-double-128 --enable-decimal-float";; + riscv64-*-*-*) _arch_configure="--with-arch=rv64gc --with-abi=lp64d --enable-autolink-libatomic";; + esac + + case "$CTARGET_ARCH" in + mips*) _hash_style_configure="--with-linker-hash-style=sysv" ;; + *) _hash_style_configure="--with-linker-hash-style=gnu" ;; + esac + + case "$CTARGET_LIBC" in + musl) + # musl does not support libsanitizer + # alpine musl provides libssp_nonshared.a, so we don't need libssp either + _libc_configure="--disable-libssp --disable-libsanitizer" + _symvers="--disable-symvers" + export libat_cv_have_ifunc=no + ;; + esac + + + case "$BOOTSTRAP" in + nolibc) _bootstrap_configure="--with-newlib --disable-shared --enable-threads=no" ;; + *) _bootstrap_configure="--enable-shared --enable-threads --enable-tls" ;; + esac + + $_libgomp || _bootstrap_configure="$_bootstrap_configure --disable-libgomp" + $_libatomic || _bootstrap_configure="$_bootstrap_configure --disable-libatomic" + $_libitm || _bootstrap_configure="$_bootstrap_configure --disable-libitm" + $_libquadmath || _arch_configure="$_arch_configure --disable-libquadmath" + + msg "Building the following:" + echo "" + echo " CBUILD=$CBUILD" + echo " CHOST=$CHOST" + echo " CTARGET=$CTARGET" + echo " CTARGET_ARCH=$CTARGET_ARCH" + echo " CTARGET_LIBC=$CTARGET_LIBC" + echo " languages=$_languages" + echo " arch_configure=$_arch_configure" + echo " libc_configure=$_libc_configure" + echo " cross_configure=$_cross_configure" + echo " bootstrap_configure=$_bootstrap_configure" + echo " hash_style_configure=$_hash_style_configure" + echo "" + + export CFLAGS="$CFLAGS -O2" + export CXXFLAGS="$CXXFLAGS -O2" + export CPPFLAGS="$CPPFLAGS -O2" + + local version="Alpine $pkgver-r$pkgrel" + local gccconfiguration=" + --prefix=/usr + --mandir=/usr/share/man + --infodir=/usr/share/info + --build=${CBUILD} + --host=${CHOST} + --target=${CTARGET} + --enable-checking=release + --disable-fixed-point + --disable-libstdcxx-pch + --disable-multilib + --disable-nls + --disable-werror + $_symvers + --enable-__cxa_atexit + --enable-default-pie + --enable-default-ssp + --enable-languages=$_languages + $_arch_configure + $_libc_configure + $_cross_configure + $_bootstrap_configure + --with-bugurl=https://gitlab.alpinelinux.org/alpine/aports/-/issues + --with-system-zlib + $_hash_style_configure + " + + mkdir -p "$_builddir" + cd "$_builddir" + "$_gccdir"/configure $gccconfiguration \ + --with-pkgversion="$version" + + msg "building gcc" + make + + # we build gccjit separate to not build all of gcc with --enable-host-shared + # as doing so slows it down a few %, so for some quick if's here we gain + # free performance + if $LANG_JIT; then + mkdir -p "$_builddir"/libgccjit-build + cd "$_builddir"/libgccjit-build + "$_gccdir"/configure $gccconfiguration \ + --disable-bootstrap \ + --enable-host-shared \ + --enable-languages=jit \ + --with-pkgversion="$version" + + msg "building libgccjit" + make all-gcc + fi +} + +package() { + cd "$_builddir" + make DESTDIR="$pkgdir" install + + ln -s gcc "$pkgdir"/usr/bin/cc + + if $LANG_JIT; then + make -C "$_builddir"/libgccjit-build/gcc DESTDIR="$pkgdir" jit.install-common + fi + + # we dont support gcj -static + # and saving 35MB is not bad. + find "$pkgdir" \( -name libgtkpeer.a \ + -o -name libgjsmalsa.a \ + -o -name libgij.a \) \ + -delete + + # strip debug info from some static libs + find "$pkgdir" \( -name libgfortran.a -o -name libobjc.a -o -name libgomp.a \ + -o -name libgphobos.a -o -name libgdruntime.a \ + -o -name libgcc.a -o -name libgcov.a -o -name libquadmath.a \ + -o -name libitm.a -o -name libgo.a -o -name libcaf\*.a \ + -o -name libatomic.a -o -name libasan.a -o -name libtsan.a \) \ + -a -type f \ + -exec ${STRIP_FOR_TARGET} -g {} + + + if $_libgomp; then + mv "$pkgdir"/usr/lib/libgomp.spec "$pkgdir"/$_gcclibdir + fi + if $_libitm; then + mv "$pkgdir"/usr/lib/libitm.spec "$pkgdir"/$_gcclibdir + fi + + # remove ffi + rm -f "$pkgdir"/usr/lib/libffi* "$pkgdir"/usr/share/man/man3/ffi* + find "$pkgdir" -name 'ffi*.h' -delete + + local gdblib=${_target:+$CTARGET/}lib + if [ -d "$pkgdir"/usr/$gdblib/ ]; then + for i in $(find "$pkgdir"/usr/$gdblib/ -type f -maxdepth 1 -name "*-gdb.py"); do + mkdir -p "$pkgdir"/usr/share/gdb/python/auto-load/usr/$gdblib + mv "$i" "$pkgdir"/usr/share/gdb/python/auto-load/usr/$gdblib/ + done + fi + + # move ada runtime libs + if $LANG_ADA; then + for i in $(find "$pkgdir"/$_gcclibdir/adalib/ -type f -maxdepth 1 -name "libgna*.so"); do + mv "$i" "$pkgdir"/usr/lib/ + ln -s ../../../../${i##*/} $i + done + if [ "$CHOST" = "$CTARGET" ]; then + for i in $(find "$pkgdir"/$_gcclibdir/adalib/ -type f -maxdepth 1 -name "libgna*.a"); do + mv "$i" "$pkgdir"/usr/lib/ + ln -s ../../../../${i##*/} $i + done + fi + fi + + if [ "$CHOST" != "$CTARGET" ]; then + # cross-gcc: remove any files that would conflict with the + # native gcc package + rm -rf "$pkgdir"/usr/bin/cc "$pkgdir"/usr/include "${pkgdir:?}"/usr/share + # libcc1 does not depend on target, don't ship it + rm -rf "$pkgdir"/usr/lib/libcc1.so* + + # fixup gcc library symlinks to be linker scripts so + # linker finds the libs from relocated sysroot + for so in "$pkgdir"/usr/"$CTARGET"/lib/*.so; do + if [ -h "$so" ]; then + local _real=$(basename "$(readlink "$so")") + rm -f "$so" + echo "GROUP ($_real)" > "$so" + fi + done + else + # add c89/c99 wrapper scripts + cat >"$pkgdir"/usr/bin/c89 <<'EOF' +#!/bin/sh +_flavor="-std=c89" +for opt; do + case "$opt" in + -ansi|-std=c89|-std=iso9899:1990) _flavor="";; + -std=*) echo "$(basename $0) called with non ANSI/ISO C option $opt" >&2 + exit 1;; + esac +done +exec gcc $_flavor ${1+"$@"} +EOF + cat >"$pkgdir"/usr/bin/c99 <<'EOF' +#!/bin/sh +_flavor="-std=c99" +for opt; do + case "$opt" in + -std=c99|-std=iso9899:1999) _flavor="";; + -std=*) echo "$(basename $0) called with non ISO C99 option $opt" >&2 + exit 1;; + esac +done +exec gcc $_flavor ${1+"$@"} +EOF + chmod 755 "$pkgdir"/usr/bin/c?9 + + # install lto plugin so regular binutils may use it + mkdir -p "$pkgdir"/usr/lib/bfd-plugins + ln -s /$_gcclibexec/liblto_plugin.so "$pkgdir/usr/lib/bfd-plugins/" + fi +} + +libatomic() { + pkgdesc="GCC Atomic library" + depends= + replaces="gcc" + + mkdir -p "$subpkgdir"/usr/lib + mv "$pkgdir"/usr/${_target:+$CTARGET/}lib/libatomic.so.* "$subpkgdir"/usr/lib/ +} + +libcxx() { + pkgdesc="GNU C++ standard runtime library" + depends= + + if [ "$CHOST" = "$CTARGET" ]; then + # verify that we are using clock_gettime rather than doing direct syscalls + # so we dont break 32 bit arches due to time64. + nm -D "$pkgdir"/usr/lib/libstdc++.so.* | grep clock_gettime + fi + + mkdir -p "$subpkgdir"/usr/lib + mv "$pkgdir"/usr/${_target:+$CTARGET/}lib/libstdc++.so.* "$subpkgdir"/usr/lib/ +} + +libcxx_dev() { + pkgdesc="GNU C++ standard runtime library (development files)" + depends= + replaces="g++" + + amove usr/${_target:+$CTARGET/}lib/libstdc++.a \ + usr/${_target:+$CTARGET/}lib/libstdc++.so \ + usr/${_target:+$CTARGET/}lib/libstdc++fs.a \ + usr/${_target:+$CTARGET/}lib/libsupc++.a \ + usr/${_target:+$CTARGET/}include/c++ +} + +gpp() { + pkgdesc="GNU C++ standard library and compiler" + depends="libstdc++=$_gccrel libstdc++-dev$_target=$_gccrel gcc$_target=$_gccrel libc-dev" + mkdir -p "$subpkgdir/$_gcclibexec" \ + "$subpkgdir"/usr/bin \ + "$subpkgdir"/usr/${_target:+$CTARGET/}include \ + "$subpkgdir"/usr/${_target:+$CTARGET/}lib \ + + mv "$pkgdir/$_gcclibexec/cc1plus" "$subpkgdir/$_gcclibexec/" + + mv "$pkgdir"/usr/bin/*++ "$subpkgdir"/usr/bin/ +} + +jit() { + pkgdesc="GCC JIT Library" + depends= + amove usr/lib/libgccjit.so* +} + +jitdev() { + pkgdesc="GCC JIT Library (development files)" + depends="libgccjit" + amove usr/include/libgccjit*.h +} + +libobjc() { + pkgdesc="GNU Objective-C runtime" + replaces="objc" + depends= + mkdir -p "$subpkgdir"/usr/lib + mv "$pkgdir"/usr/${_target:+$CTARGET/}lib/libobjc.so.* "$subpkgdir"/usr/lib/ +} + +objc() { + pkgdesc="GNU Objective-C" + replaces="gcc" + depends="libc-dev gcc=$_gccrel libobjc=$_gccrel" + + mkdir -p "$subpkgdir/$_gcclibexec" \ + "$subpkgdir"/$_gcclibdir/include \ + "$subpkgdir"/usr/lib + mv "$pkgdir/$_gcclibexec/cc1obj" "$subpkgdir/$_gcclibexec/" + mv "$pkgdir"/$_gcclibdir/include/objc "$subpkgdir"/$_gcclibdir/include/ + mv "$pkgdir"/usr/lib/libobjc.so "$pkgdir"/usr/lib/libobjc.a \ + "$subpkgdir"/usr/lib/ +} + +libgcc() { + pkgdesc="GNU C compiler runtime libraries" + depends= + + mkdir -p "$subpkgdir"/usr/lib + mv "$pkgdir"/usr/${_target:+$CTARGET/}lib/libgcc_s.so.* "$subpkgdir"/usr/lib/ +} + +libgomp() { + pkgdesc="GCC shared-memory parallel programming API library" + depends= + replaces="gcc" + + mkdir -p "$subpkgdir"/usr/lib + mv "$pkgdir"/usr/${_target:+$CTARGET/}lib/libgomp.so.* "$subpkgdir"/usr/lib/ +} + +libgphobos() { + pkgdesc="D programming language standard library for GCC" + depends= + + mkdir -p "$subpkgdir"/usr/lib + mv "$pkgdir"/usr/lib/libgdruntime.so.* "$subpkgdir"/usr/lib/ + mv "$pkgdir"/usr/lib/libgphobos.so.* "$subpkgdir"/usr/lib/ +} + +gdc() { + pkgdesc="GCC-based D language compiler" + depends="gcc=$_gccrel libgphobos=$_gccrel musl-dev" + depends="$depends libucontext-dev" + provides="gcc-gdc-bootstrap=$_gccrel" + + mkdir -p "$subpkgdir/$_gcclibexec" \ + "$subpkgdir"/$_gcclibdir/include/d/ \ + "$subpkgdir"/usr/lib \ + "$subpkgdir"/usr/bin + # Copy: The installed '.d' files, the static lib, the binary itself + # The shared libs are part of 'libgphobos' so one can run program + # without installing the compiler + mv "$pkgdir/$_gcclibexec/d21" "$subpkgdir/$_gcclibexec/" + mv "$pkgdir"/$_gcclibdir/include/d/* "$subpkgdir"/$_gcclibdir/include/d/ + mv "$pkgdir"/usr/lib/libgdruntime.a "$subpkgdir"/usr/lib/ + mv "$pkgdir"/usr/lib/libgdruntime.so "$subpkgdir"/usr/lib/ + mv "$pkgdir"/usr/lib/libgphobos.a "$subpkgdir"/usr/lib/ + mv "$pkgdir"/usr/lib/libgphobos.so "$subpkgdir"/usr/lib/ + mv "$pkgdir"/usr/lib/libgphobos.spec "$subpkgdir"/usr/lib/ + mv "$pkgdir"/usr/bin/$CTARGET-gdc "$subpkgdir"/usr/bin/ + mv "$pkgdir"/usr/bin/gdc "$subpkgdir"/usr/bin/ +} + + +libgo() { + pkgdesc="Go runtime library for GCC" + depends= + + mkdir -p "$subpkgdir"/usr/lib + mv "$pkgdir"/usr/lib/libgo.so.* "$subpkgdir"/usr/lib/ +} + +go() { + pkgdesc="GCC Go frontend (intended for bootstrapping community/go)" + depends="gcc=$_gccrel libgo=$_gccrel !go" + install="$pkgname-go.post-install" + + # See https://lists.alpinelinux.org/~alpine/devel/%3C33KG0XO61I4IL.2Z7RTAZ5J3SY6%408pit.net%3E + provides="go-bootstrap" + provider_priority=1 # lowest, see community/go + + mkdir -p "$subpkgdir"/$_gcclibexec \ + "$subpkgdir"/usr/lib \ + "$subpkgdir"/usr/bin + mv "$pkgdir"/usr/lib/go "$subpkgdir"/usr/lib/ + mv "$pkgdir"/usr/bin/*gccgo "$subpkgdir"/usr/bin/ + mv "$pkgdir"/usr/bin/*go "$subpkgdir"/usr/bin + mv "$pkgdir"/usr/bin/*gofmt "$subpkgdir"/usr/bin + mv "$pkgdir"/$_gcclibexec/go1 "$subpkgdir"/$_gcclibexec/ + mv "$pkgdir"/$_gcclibexec/cgo "$subpkgdir"/$_gcclibexec/ + mv "$pkgdir"/$_gcclibexec/buildid "$subpkgdir"/$_gcclibexec/ + mv "$pkgdir"/$_gcclibexec/test2json "$subpkgdir"/$_gcclibexec/ + mv "$pkgdir"/$_gcclibexec/vet "$subpkgdir"/$_gcclibexec/ + mv "$pkgdir"/usr/lib/libgo.a \ + "$pkgdir"/usr/lib/libgo.so \ + "$pkgdir"/usr/lib/libgobegin.a \ + "$pkgdir"/usr/lib/libgolibbegin.a \ + "$subpkgdir"/usr/lib/ +} + +libgfortran() { + pkgdesc="Fortran runtime library for GCC" + depends= + + mkdir -p "$subpkgdir"/usr/lib + mv "$pkgdir"/usr/lib/libgfortran.so.* "$subpkgdir"/usr/lib/ +} + +libquadmath() { + replaces="gcc" + pkgdesc="128-bit math library for GCC" + depends= + + mkdir -p "$subpkgdir"/usr/lib + mv "$pkgdir"/usr/lib/libquadmath.so.* "$subpkgdir"/usr/lib/ +} + +gfortran() { + pkgdesc="GNU Fortran Compiler" + depends="gcc=$_gccrel libgfortran=$_gccrel" + $_libquadmath && depends="$depends libquadmath=$_gccrel" + replaces="gcc" + + mkdir -p "$subpkgdir"/$_gcclibexec \ + "$subpkgdir"/$_gcclibdir \ + "$subpkgdir"/usr/lib \ + "$subpkgdir"/usr/bin + mv "$pkgdir"/usr/bin/*gfortran "$subpkgdir"/usr/bin/ + mv "$pkgdir"/usr/lib/libgfortran.a \ + "$pkgdir"/usr/lib/libgfortran.so \ + "$subpkgdir"/usr/lib/ + if $_libquadmath; then + mv "$pkgdir"/usr/lib/libquadmath.a \ + "$pkgdir"/usr/lib/libquadmath.so \ + "$subpkgdir"/usr/lib/ + fi + mv "$pkgdir"/$_gcclibdir/finclude "$subpkgdir"/$_gcclibdir/ + mv "$pkgdir"/$_gcclibexec/f951 "$subpkgdir"/$_gcclibexec + mv "$pkgdir"/usr/lib/libgfortran.spec "$subpkgdir"/$_gcclibdir +} + +libgnat() { + pkgdesc="GNU Ada runtime shared libraries" + depends= + + mkdir -p "$subpkgdir"/usr/lib + mv "$pkgdir"/usr/lib/libgna*.so "$subpkgdir"/usr/lib/ +} + +libgnatstatic() { + pkgdesc="GNU Ada static libraries" + depends= + + mkdir -p "$subpkgdir"/usr/lib + mv "$pkgdir"/usr/lib/libgna*.a "$subpkgdir"/usr/lib/ +} + +gnat() { + pkgdesc="Ada support for GCC" + depends="gcc=$_gccrel" + provides="$pkgname-gnat-bootstrap=$_gccrel" + [ "$CHOST" = "$CTARGET" ] && depends="$depends libgnat=$_gccrel" + + mkdir -p "$subpkgdir"/$_gcclibexec \ + "$subpkgdir"/$_gcclibdir \ + "$subpkgdir"/usr/bin + mv "$pkgdir"/$_gcclibexec/*gnat* "$subpkgdir"/$_gcclibexec/ + mv "$pkgdir"/$_gcclibdir/*ada* "$subpkgdir"/$_gcclibdir/ + mv "$pkgdir"/usr/bin/*gnat* "$subpkgdir"/usr/bin/ +} + +sha512sums=" +ba4d9e73d108088da26fbefe18d9b245b76771ffe752c2b4b31bdf38a2d0b638fbc115c377526c27311d4d7ffd4e0d236a5af5016bd364ccaa11a4989d1401e8 gcc-12-20220924.tar.xz +41cbb4d69218006cf9e0cdb6c86212ef451f8decd52a50a7dbb4d34726009da7a4e0261c852b46cb584db253a4bae2f31dc485c506cb545e64a7d26e0ba6c2b6 0001-posix_memalign.patch +531155055cda7f119bcac6479bcae73af9201cd596af9cf1616850bbcf4393b91c5de9f2fbbc1cde6e158fb4df7237b033146f662dff5fa0ea12151cc514adb8 0002-gcc-poison-system-directories.patch +c1275d77b5269386a2ec683933570810f5a2ba1208c161ed887797eb9aee3cb82ef08a8964635902614e6a6e83f3065ba0801c9355d85dd8d60cb1fa20bdf687 0003-specs-turn-on-Wl-z-now-by-default.patch +a54e45bff4484a35d3826435a414d909281453f5605f4081cf3be1f15336cceed93a1d8a54e92e2fa97188623e3030ca1323d7749141e228a7db73795230d86a 0004-Turn-on-D_FORTIFY_SOURCE-2-by-default-for-C-C-ObjC-O.patch +ad132ddbd0c33a3983e3de4f74d8fdb8cb1ddf53ef54de0a5c12efb49e42014ed117165d43f396bcf3455ecfe2c8620e0326e73b4160a370a4cc92d213329c34 0005-On-linux-targets-pass-as-needed-by-default-to-the-li.patch +0b9ce0f130a7b797770f3d58a5200575f20e5663c86c0c5710718b7bffd3416cc2f05861613d9c258428e9541c6e0b9837d01f0c99d383e2c3de0503a988e861 0006-Enable-Wformat-and-Wformat-security-by-default.patch +e7813acc7ead61373c212cefbe53eb020b4c5bd8f0f35ee972e0524060713f911624f5a1a871feada642e1f3f5e48c8508125ca2da09de351d544bedf1d44ada 0007-Enable-Wtrampolines-by-default.patch +d0d0566a11e4828bdd6f53346a9a6b9841f3066d3f4a05ee2b6fe97aeb4552654170e7662318ea18fc777c3e75c88a067097478fc4e880a3f9c134b8a3af2277 0008-Disable-ssp-on-nostdlib-nodefaultlibs-and-ffreestand.patch +f75e63d9d933874f18fb7f55b135c60dfa0377abafa8e0edb91b85d5f00f4f072d0a338ba5d9baec18494211dbbda8068782830dbafbb37068936f76aede270f 0009-Ensure-that-msgfmt-doesn-t-encounter-problems-during.patch +afa4daba222a19569588736a8276dc7c12223a7c222f3dd3795dc3f1cd90f40b90518971ae27b358020354f89562c9680ec8b8e24e85e6d4f8e54e79d185359b 0010-Don-t-declare-asprintf-if-defined-as-a-macro.patch +79dac82249fb573ec477e1451a33883302eb63a5110853faed117f5021221f2153e2ec845dd5a0043b1bf9f0e5736ef0c89743ff2d771774a281c8b24542803a 0011-libiberty-copy-PIC-objects-during-build-process.patch +b035f85c1703b45d15c1d1ffe7d23400e01625e5d403504911cc92f740b02586447de2a9d66a9f80f12b9c227bc193e2a43942c8af2bdb42cdeff8272bbe6068 0012-libitm-disable-FORTIFY.patch +9fb4d396a9493d2d68fe829ce075ba4c5df148b1d6aaab315a6f8ccbdd70d0e052a5dc50369adc2dab005b4a3becd1504b182faed6e82c86accb95f5bc2b9f50 0013-libgcc_s.patch +f82ac22961d842c9f8e731a601bb255918cc160969888363ad2d83e2ccf08b19114a200d46bcf99d097bf530f470c2b1e71e46828bc1b9fff5469ff945f541d8 0014-nopie.patch +6527dc9d250db48d56cf01e9299461bf22a838ffda96c40d448e18f457b206cec2322275d2d5abbbaf3c6573c5e7eba12724c9691b601f118ff7520e19726373 0015-dlang-use-libucontext-on-mips64.patch +6c3ce0ccd68b19e2c76172d8f24b0747ee0af2b8de7af692f2f699848267d7fc42fec8e5c303102fe05be7e934b56f21eea17ce47c8aca20570590830d88e9b0 0016-ada-fix-shared-linking.patch +7089a96aaec8e0b222cb3fa7301d71bb2e328a24dec33e15ea9e3e7695bcae919308249b9a3be5ea2f3b1f069f9fd1739066f31d12317fcdab0596dba9ca54a4 0017-build-fix-CXXFLAGS_FOR_BUILD-passing.patch +b7ebdeee0b143052fdd6e3efa070ea8621d4fb729312cbc787d618e666b593990a20cd9044a786265970d8e09ec13da03b797009543d0b657b0fe924f2dcaa68 0018-add-fortify-headers-paths.patch +8e682893d6367732ab8c490b915112a68d98855deec3bd8db91dc0d9bf486b8c044b13ee2b95c4806da7ac17c41034e081b7a66861018274cb33fdb2fd6df04a 0019-Alpine-musl-package-provides-libssp_nonshared.a.-We-.patch +a14c5f98ade5af8cd6e3a0244752674d9c4f6dadb4260f98f1949bff51ac1211a3f8319e0f933f776e98998d2c7221004f92413f97ccc2e966f8462ed6d33597 0020-DP-Use-push-state-pop-state-for-gold-as-well-when-li.patch +28c1d477da79aa212ac79e4b02cf865d8b9c31cec6c42f41b4268e3f3c49bf67fb51e54180abe543a54e550788bb472bfcf1b4bc38d072a792d7403dbbee178a 0021-mips64-disable-multilib-support.patch +0920e31c46bf937b47a0602766f042d45adb71abf332ee84399c665c12298ef115cff945fe26d646b0276bfdfdd04913970e6f1f8784a11c26e15111c854643d 0022-aarch64-disable-multilib-support.patch +e4c6bf7ec40f2798c8e5b40a543aecffd5591a2805546b3b97aaa4fbe4df6ce4330a60973a9ddfbca9890590606d5204e7f653ab2b6e4b2c13feeb595b68e63a 0023-s390x-disable-multilib-support.patch +0e956d793c94283ce5af7fe84bfcbb655585a9573608e9bf497fa7b726e12daa391e44977d0a8c97fb460aba89b1773b91e036b0ee1ef4d6263a3943cb63d9cd 0024-ppc64-le-disable-multilib-support.patch +95917fcb60dbc0a8134db9beb583f3c9ea61128499c214f594c434ec8246641ec41e245ce2d1d9b85ffd40ea0e5764f7a33c5522b2547145814245ac0fa25025 0025-x86_64-disable-multilib-support.patch +b40d7e4712c035674c993bbb55475290ec14523b3f0fd05493514bac4e9adaa6641faf815fc40ffc00119d9fd64be28218ee874c289ec7430eeef05ab2fcae5e 0026-riscv-disable-multilib-support.patch +674360ce2ee9f704d0632cc98756f9fe8dd8ca30064fb9d3423b437f7e679c1c51e765b15e535dcb278cd2769583690acb3395b91e4fd5f6f4e3b97879fcc313 0027-always-build-libgcc_eh.a.patch +f060687adcd5297124e4000f1ba1e3fd5d7d124da04d948cbd0d4a6c69a90a2b29a4a0dbbe13a83ab6950724f434de012b681bdbcdf53c0100b40fe3d00f2f2f 0028-ada-libgnarl-compatibility-for-musl.patch +5160bae68e20a1966c1f6d655ee98af759e9b9ee842718ae6007d467b418e1cf3b307528a0841477b5259671ce868521b06c0f2e947b7b8f3a398c53dd978252 0029-ada-musl-support-fixes.patch +3c04b26554a78096296ca9542c77a91219bd26044dd2cb2006db4c1944889a97c215900b3828ba7e8c675162406db543605a815bdfbd915bf810663b1b253bdd 0033-gcc-go-link-to-libucontext.patch +699dc3641099da6136dd3689f06c6553c03b3a85acf83a3fce1beb5425065b3e378535ca9e9100a120fdbafc34871d61c063fd5328a49cd87a15a989ed51706d 0034-Use-generic-errstr.go-implementation-on-musl.patch +d9ba710f770e053c8f212e821817c188091a829658050b9ab5906388553ec60fec37943ea43c270e92a9014902949f3c98fc4639032d92b8145b375bb29e193e 0035-configure-Add-enable-autolink-libatomic-use-in-LINK_.patch +ab90d8fdd977d6cd3da096a1c76d77be3e89a020b2127247771711a32eb608cceed21834ef488ab4b69bb0f408b098fdfb61630819e3d1a1e57d5af67800ee74 0036-configure-fix-detection-of-atomic-builtins-in-libato.patch +8bc6823f0b3c66f7b73d7ddb64ffa6930463285c2e9a14a2bc1882bcc4271144eaa1107d713294699caf9481648163cbf43921a2b8e4ac0d55c78a804bae8a3d 0037-libgo-Recognize-off64_t-and-loff_t-definitions-of-mu.patch +e9699f4721778869eb3a8fef2c679208ef5b98584892f30b0e1cb5dc1669f8158198d7792659b1b56c381baf62247d21990dcced9178547affd5d6bfb2d12548 0039-gcc-go-Use-int64-type-as-offset-argument-for-mmap.patch +d6dc1bfb881a313d167aaa5658790b0f55eea4336c408cfc6613dd5783440dafd0d37c43031a5f3e69be40f632e38371cd4fb6e5f0494ac4ea4d7d5025d2ae02 0041-go-gospec-forcibly-disable-fsplit-stack-support.patch +684c6a6d52512b973429b6e709966439ac1e174f9e79a33d4a638b452245b457b34752b4b4034ba983f6a712f86522e7adf715bab00a6603f64a12139c5b1e39 0042-gcc-go-fix-build-error-with-SYS_SECCOMP.patch +25014dfa99d96ee70ce0ad22e9f7974f0a51cc50b3b9c2db49df50774c8cd29e497ceed120486bee50be83bfb07f2009ed310eb9b0543f2795bd7359b87eadd2 0043-libstdc-do-not-throw-exceptions-for-non-C-locales-on.patch +75fd83ac05ab0a08d5f48547b08810f9934209bc78b5db59d65f33887b382af7ec24d8a29d40f86325c05af40c1ae1ec6466c839f646af90afc895a13073d07b 0044-gdc-unconditionally-link-libgphobos-against-libucont.patch +13e047153076d6e1fc40c9f5b6bfe5699c0e5460248f3d2b35ae36677cb960525af7b0b025997e5000a8492cec5e77a86828d66b4058c0d7f89fde0ab3890142 0045-druntime-link-against-libucontext-on-all-platforms.patch +c33ca2553642c2dbd1c65cd97046548f08775785a3db06d761e3bbe61398c37bc382fe132c0c3fa2101dfd4eea2a6d48bf4fae899a0ddb811c81abd7be35c122 0049-libgo-adjust-name-of-union-in-sigevent-struct.patch +179cd15d629884a66e954fd76066675efa594686b970facbb12ad50769e5d70b5530d7f61e77120e26d1c3dfc701cfc5295f341f635db998df73c41bc8e62172 0050-libphobos-don-t-define-__mode_t-twice-on-musl-target.patch +c82d7c8d340a76df3d796565a79b0ccc04ddffef39927620e1f3719bf2dc1db101ba13aef24b46c5bc95b7bf1e31c8bda4ab0936ba4c9c5e5047ba08826c982c 0051-libgo-Explicitly-define-SYS_timer_settime-for-32-bit.patch +eb403d8ea665fd5dc2c11faf43b055e6a3bf480a397ceee3e0ca1e38ec7d2392315f2694ed9a34ffbc99e464f2873fbbf91be8646ea4dea5d3636e3ea22fefa0 0052-libgnat-time_t-is-always-64-bit-on-musl-libc.patch +22fb6edf1ed0387e2b93839ffe6e82a7fee420950af90e91199c3488d966702fdeb1a3396d22be0c73a4051525da9349c93d070a0d83b724c83f2b268da6483f 0053-libgo-make-match.sh-POSIX-shell-compatible.patch +" diff --git a/cross/gcc-riscv64/gcc-go.post-install b/cross/gcc-riscv64/gcc-go.post-install new file mode 100644 index 000000000..6805fa7cf --- /dev/null +++ b/cross/gcc-riscv64/gcc-go.post-install @@ -0,0 +1,8 @@ +#!/bin/sh + +cat 1>&2 <