SHA256
3
0
forked from pool/gcc14

- Re-enable cross compiler builds on i586.

OBS-URL: https://build.opensuse.org/package/show/devel:gcc/gcc14?expand=0&rev=44
This commit is contained in:
Richard Biener 2024-08-22 10:40:19 +00:00 committed by Git OBS Bridge
commit 41c637e485
62 changed files with 42032 additions and 0 deletions

23
.gitattributes vendored Normal file
View File

@ -0,0 +1,23 @@
## Default LFS
*.7z filter=lfs diff=lfs merge=lfs -text
*.bsp filter=lfs diff=lfs merge=lfs -text
*.bz2 filter=lfs diff=lfs merge=lfs -text
*.gem filter=lfs diff=lfs merge=lfs -text
*.gz filter=lfs diff=lfs merge=lfs -text
*.jar filter=lfs diff=lfs merge=lfs -text
*.lz filter=lfs diff=lfs merge=lfs -text
*.lzma filter=lfs diff=lfs merge=lfs -text
*.obscpio filter=lfs diff=lfs merge=lfs -text
*.oxt filter=lfs diff=lfs merge=lfs -text
*.pdf filter=lfs diff=lfs merge=lfs -text
*.png filter=lfs diff=lfs merge=lfs -text
*.rpm filter=lfs diff=lfs merge=lfs -text
*.tbz filter=lfs diff=lfs merge=lfs -text
*.tbz2 filter=lfs diff=lfs merge=lfs -text
*.tgz filter=lfs diff=lfs merge=lfs -text
*.ttf filter=lfs diff=lfs merge=lfs -text
*.txz filter=lfs diff=lfs merge=lfs -text
*.whl filter=lfs diff=lfs merge=lfs -text
*.xz filter=lfs diff=lfs merge=lfs -text
*.zip filter=lfs diff=lfs merge=lfs -text
*.zst filter=lfs diff=lfs merge=lfs -text

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
.osc

View File

@ -0,0 +1,31 @@
IMPORTANT: Please change gcc.spec.in and then run ./pre_checkin.sh!
Do not change gcc.spec directly!
Since GCC comes with a testsuite that runs for quite a long time and
that test suite also contains some known failures, we should run the
testsuite of GCC whenever the compiler is changed to ensure a high
quality compiler.
The package is now split into multiple parts, gcc$VER,
gcc$VER-testresults and libffi$VER (plus various spec files for
cross and icecream cross compilers). The testsuite is run from
gcc$VER-testresults, a dummy package with the testresults, gcc$VER-testresults,
is generated from it which contains testing logfiles and summary.
Before checking in a new compiler, please do the following steps as QA
measure to check that the new compiler does not introduce any new
failures:
- Run mbuild for all archs for at least the gcc$VER and the gcc$VER-testresults
subpackages
- When mbuild is finished, call
/suse/rguenther/bin/compare-testresults.sh mbuild-directory
(for the gcc$VER-testresults build).
The output of that script should not show any failures. If it does,
please fix them or discuss this with the gcc package maintainers.
- Do not remove this file.
Thanks,
Your GCC packagers.

26
_constraints Normal file
View File

@ -0,0 +1,26 @@
<constraints>
<hardware>
<disk>
<size unit="G">26</size>
</disk>
<physicalmemory>
<size unit="G">4</size>
</physicalmemory>
<processors>4</processors>
<jobs>4</jobs>
</hardware>
<overwrite>
<conditions>
<arch>x86_64</arch>
<arch>ppc64le</arch>
<arch>aarch64</arch>
</conditions>
<hardware>
<memory>
<size unit="G">8</size>
</memory>
<processors>8</processors>
<jobs>8</jobs>
</hardware>
</overwrite>
</constraints>

33
_multibuild Normal file
View File

@ -0,0 +1,33 @@
<multibuild>
<flavor>gcc14-testresults</flavor>
<flavor>cross-aarch64-gcc14-bootstrap</flavor>
<flavor>cross-aarch64-gcc14</flavor>
<flavor>cross-riscv64-gcc14-bootstrap</flavor>
<flavor>cross-riscv64-gcc14</flavor>
<flavor>cross-s390x-gcc14-bootstrap</flavor>
<flavor>cross-s390x-gcc14</flavor>
<flavor>cross-ppc64le-gcc14-bootstrap</flavor>
<flavor>cross-ppc64le-gcc14</flavor>
<flavor>cross-arm-gcc14</flavor>
<flavor>cross-avr-gcc14-bootstrap</flavor>
<flavor>cross-avr-gcc14</flavor>
<flavor>cross-pru-gcc14-bootstrap</flavor>
<flavor>cross-pru-gcc14</flavor>
<flavor>cross-x86_64-gcc14</flavor>
<flavor>cross-sparc-gcc14</flavor>
<flavor>cross-sparc64-gcc14</flavor>
<flavor>cross-ppc64-gcc14</flavor>
<flavor>cross-m68k-gcc14</flavor>
<flavor>cross-mips-gcc14</flavor>
<flavor>cross-hppa-gcc14-bootstrap</flavor>
<flavor>cross-hppa-gcc14</flavor>
<flavor>cross-arm-none-gcc14-bootstrap</flavor>
<flavor>cross-arm-none-gcc14</flavor>
<flavor>cross-riscv64-elf-gcc14-bootstrap</flavor>
<flavor>cross-riscv64-elf-gcc14</flavor>
<flavor>cross-rx-gcc14-bootstrap</flavor>
<flavor>cross-rx-gcc14</flavor>
<flavor>cross-nvptx-gcc14</flavor>
<flavor>cross-amdgcn-gcc14</flavor>
<flavor>cross-bpf-gcc14</flavor>
</multibuild>

135
change_spec Normal file
View File

@ -0,0 +1,135 @@
#!/bin/bash
do_crosses=1
do_optional_compiler_languages=0
rm -f gcc*-testresults.spec gcc*-testresults.changes gcc*.spec cross*.spec cross*.changes
# Default is to generate the normal gcc package
# unless a parameter is given. In case that it is '-*',
# that parameter will be used as suffix for the package name
# and as suffix for the install path (/opt/gccSUFFIX)
# In case that it is '[0-9]*', that parameter will be used
# as a suffix for a versioned package name.
if [ $# -lt 1 ]; then
echo No package suffix given
outfile=gcc.spec
else
case $1 in
[0-9]*)
base_ver=$1
outfile=gcc$1.spec
;;
*)
echo Invalid package suffix
exit 1
;;
esac
fi
: > $outfile
if test "$do_optional_compiler_languages" = "1"; then
echo '%define build_optional_compiler_languages 1' >> $outfile
fi
sed -e 's%@base_ver@%'$base_ver'%g' \
gcc.spec.in \
| sed -n -e '{
/^# PACKAGE-BEGIN/h
/^# PACKAGE-BEGIN/,/^# PACKAGE-END/H
/^# PACKAGE-BEGIN/,/^# PACKAGE-END/!p
/^# PACKAGE-END/{g
s/@variant@//g
p
g
s/@variant@/-32bit/g
p
g
s/@variant@/-64bit/g
p
}
}' >> $outfile
echo '%define building_testsuite 1' > gcc$base_ver-testresults.spec
echo '%define run_tests 1' >> gcc$base_ver-testresults.spec
sed -e '/^# GCC-TESTSUITE-DELETE-BEGIN/,/^# GCC-TESTSUITE-DELETE-END/d;s/-n gcc@base_ver@-testresults$//g;s/^Name:[[:space:]]*gcc@base_ver@/Name: gcc@base_ver@-testresults/g' \
gcc.spec.in \
| sed -e 's%@base_ver@%'$base_ver'%g' \
>> gcc$base_ver-testresults.spec
echo '<multibuild>' > _multibuild
echo '<flavor>'gcc$base_ver-testresults'</flavor>' >> _multibuild
add_cross() {
local pkgname="$1"; shift
local rpmtarget="$1"; shift
local triplet="$1"; shift
echo "%define pkgname $pkgname" > $pkgname.spec
echo "%define cross_arch $rpmtarget" >> $pkgname.spec
echo "%define gcc_target_arch $triplet" >> $pkgname.spec
echo "$@" >> $pkgname.spec
{ sed -n -e '1,/SRC-COMMON-BEGIN/p' cross.spec.in
sed -n -e '/SRC-COMMON-BEGIN/,/SRC-COMMON-END/p' $outfile
sed -n -e '/SRC-COMMON-END/,/BUILD-COMMON-BEGIN/p' cross.spec.in
sed -n -e '/BUILD-COMMON-BEGIN/,/BUILD-COMMON-END/p' $outfile
sed -n -e '/BUILD-COMMON-END/,$p' cross.spec.in; } |
sed -e "s#@base_ver@#$base_ver#" \
-e "s/^\(ExclusiveArch.*\) $rpmtarget[^ \r]*/\1 /" \
>> $pkgname.spec
echo '<flavor>'$pkgname'</flavor>' >> _multibuild
}
add_newlib_cross() {
add_cross $1-bootstrap $2 $3 "%define gcc_target_newlib 1
%define gcc_libc_bootstrap 1"
add_cross $1 $2 $3 "%define gcc_target_newlib 1"
}
add_glibc_cross() {
add_cross $1-bootstrap $2 $3 "%define gcc_libc_bootstrap 1"
add_cross $1 $2 $3 "%define gcc_target_glibc 1"
}
# We now support "proper" cross-compilers to suse targets via a
# cross-glibc package, enable that via for example
#
# add_cross cross-aarch64-gcc$base_ver aarch64 aarch64-suse-linux
#
# For now keep the old way of doing things
if test "$do_crosses" = 1 ; then
add_glibc_cross cross-aarch64-gcc$base_ver aarch64 aarch64-suse-linux
add_glibc_cross cross-riscv64-gcc$base_ver riscv64 riscv64-suse-linux
add_glibc_cross cross-s390x-gcc$base_ver s390x s390x-suse-linux
add_glibc_cross cross-ppc64le-gcc$base_ver ppc64le powerpc64le-suse-linux
add_cross cross-arm-gcc$base_ver arm arm-suse-linux-gnueabi %define gcc_icecream 1
add_cross cross-avr-gcc$base_ver-bootstrap avr avr "%define gcc_libc_bootstrap 1"
add_cross cross-avr-gcc$base_ver avr avr
add_newlib_cross cross-pru-gcc$base_ver pru pru
add_cross cross-x86_64-gcc$base_ver x86_64 x86_64-suse-linux %define gcc_icecream 1
add_cross cross-sparc-gcc$base_ver sparcv9 sparc-suse-linux %define gcc_icecream 1
add_cross cross-sparc64-gcc$base_ver sparc64 sparc64-suse-linux %define gcc_icecream 1
add_cross cross-ppc64-gcc$base_ver ppc64 powerpc64-suse-linux %define gcc_icecream 1
add_cross cross-m68k-gcc$base_ver m68k m68k-suse-linux %define gcc_icecream 1
add_cross cross-mips-gcc$base_ver mips mips-suse-linux %define gcc_icecream 1
add_cross cross-hppa-gcc$base_ver-bootstrap hppa hppa-suse-linux %define gcc_libc_bootstrap 1
add_cross cross-hppa-gcc$base_ver hppa hppa-suse-linux %define gcc_icecream 1
add_newlib_cross cross-arm-none-gcc$base_ver arm-none arm-none-eabi
#add_newlib_cross cross-epiphany-gcc$base_ver epiphany epiphany-elf
#add_newlib_cross cross-nds32le-gcc$base_ver nds32le nds32le-elf
add_newlib_cross cross-riscv64-elf-gcc$base_ver riscv64 riscv64-elf
#add_newlib_cross cross-rl78-gcc$base_ver rl78 rl78-elf
add_newlib_cross cross-rx-gcc$base_ver rx rx-elf
fi
# the nvptx and amdgcn crosses are used for offloading
add_cross cross-nvptx-gcc$base_ver nvptx nvptx-none %define gcc_accel 1
add_cross cross-amdgcn-gcc$base_ver amdgcn amdgcn-amdhsa %define gcc_accel 1
add_cross cross-bpf-gcc$base_ver bpf bpf-none
for f in *.spec; do
sed -i -e '/^# .*-\(BEGIN\|END\)$/d' $f
done
echo '</multibuild>' >> _multibuild
osc service localrun format_spec_file

38
check-build.sh Normal file
View File

@ -0,0 +1,38 @@
#!/bin/bash
# Copyright (c) 2003,2005 SUSE Linux Products GmbH, Germany. All rights reserved.
#
# Authors: Thorsten Kukuk <kukuk@suse.de>
#
# this script use the following variable(s):
#
# - $BUILD_BASENAME
#
case $BUILD_BASENAME in
*ppc*)
# Our biarch 32-bit compiler needs to be build on a 64-bit machine,
# otherwise some configure checks fail.
# Note that we cannot use uname here since powerpc32 was invoked
# already.
grep 'series64\|ppc64' /proc/version > /dev/null
if [ $? -ne 0 ] ; then
echo "build does not work on `hostname` for gcc"
exit 1
fi
;;
*x86_64*)
#if [ `ulimit -v` -le 740000 ] ; then
# echo "build does not work on ("`hostname`" for gcc)"
# exit 1
#fi
if [ `getconf _NPROCESSORS_CONF` -lt 2 ] ; then
echo "build does not work on `hostname` for gcc"
exit 1
fi
;;
*)
;;
esac
exit 0

File diff suppressed because it is too large Load Diff

1033
cross-aarch64-gcc14.spec Normal file

File diff suppressed because it is too large Load Diff

1033
cross-amdgcn-gcc14.spec Normal file

File diff suppressed because it is too large Load Diff

1033
cross-arm-gcc14.spec Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

1033
cross-arm-none-gcc14.spec Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

1033
cross-avr-gcc14.spec Normal file

File diff suppressed because it is too large Load Diff

1033
cross-bpf-gcc14.spec Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

1033
cross-hppa-gcc14.spec Normal file

File diff suppressed because it is too large Load Diff

1033
cross-m68k-gcc14.spec Normal file

File diff suppressed because it is too large Load Diff

1033
cross-mips-gcc14.spec Normal file

File diff suppressed because it is too large Load Diff

1033
cross-nvptx-gcc14.spec Normal file

File diff suppressed because it is too large Load Diff

1033
cross-ppc64-gcc14.spec Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

1033
cross-ppc64le-gcc14.spec Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

1033
cross-pru-gcc14.spec Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

1033
cross-riscv64-elf-gcc14.spec Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

1033
cross-riscv64-gcc14.spec Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

1033
cross-rx-gcc14.spec Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

1033
cross-s390x-gcc14.spec Normal file

File diff suppressed because it is too large Load Diff

1033
cross-sparc-gcc14.spec Normal file

File diff suppressed because it is too large Load Diff

1033
cross-sparc64-gcc14.spec Normal file

File diff suppressed because it is too large Load Diff

1033
cross-x86_64-gcc14.spec Normal file

File diff suppressed because it is too large Load Diff

509
cross.spec.in Normal file
View File

@ -0,0 +1,509 @@
# nospeccleaner
%define build_cp 0%{!?gcc_accel:1}
%if 0%{?gcc_libc_bootstrap:1} || "%{cross_arch}" == "bpf"
%define build_cp 0
%endif
%define build_ada 0
%define build_libjava 0
%define build_java 0
%define build_fortran 0%{?gcc_accel:1}
%define build_objc 0
%define build_objcp 0
%define build_go 0
%define build_nvptx 0
%define build_gcn 0
%define build_d 0
%define build_rust 0
%define build_m2 0
%define enable_plugins 0
%define build_jit 0
%define use_lto_bootstrap 0
%define binutils_target %{cross_arch}
%if "%{cross_arch}" == "armv7l" || "%{cross_arch}" == "armv7hl"
%define binutils_target arm
%endif
%if "%{cross_arch}" == "armv6l" || "%{cross_arch}" == "armv6hl"
%define binutils_target arm
%endif
%if "%{cross_arch}" == "armv5tel"
%define binutils_target arm
%endif
%if "%{cross_arch}" == "arm-none"
%define binutils_target arm
%endif
%if "%{cross_arch}" == "riscv64-elf"
%define binutils_target riscv64
%endif
%if "%{cross_arch}" == "sparcv9"
%define binutils_target sparc
%endif
%define canonical_target %(echo %{binutils_target} | sed -e "s/i.86/i586/;s/ppc/powerpc/;s/sparc64.*/sparc64/;s/sparcv.*/sparc/;")
%if "%{binutils_target}" == "avr" || "%{binutils_target}" == "spu" || "%{binutils_target}" == "pru"
%define binutils_os %{canonical_target}
%else
%if "%{binutils_target}" == "epiphany" || "%{binutils_target}" == "nds32le" || "%{binutils_target}" == "rl78" || "%{binutils_target}" == "rx"
%define binutils_os %{canonical_target}-elf
%else
%if "%{binutils_target}" == "arm"
%define binutils_os %{canonical_target}-suse-linux-gnueabi
%else
%if "%{binutils_target}" == "bpf"
%define binutils_os %{canonical_target}-none
%else
%if 0%{?gcc_accel:1}
%define binutils_os %{gcc_target_arch}
%else
%define binutils_os %{canonical_target}-suse-linux
%endif
%endif
%endif
%endif
%endif
%if 0%{?gcc_icecream:1}
%define sysroot %{_prefix}/%{gcc_target_arch}
%else
# offloading builds newlib in-tree and can install in
# the GCC private path without extra sysroot
%if 0%{!?gcc_accel:1}
# use same sysroot as in binutils.spec
%define sysroot %{_prefix}/%{binutils_os}/sys-root
%endif
%endif
Name: %{pkgname}
# SRC-COMMON-BEGIN
# SRC-COMMON-END
%if "%{cross_arch}" != "nvptx"
%if "%{cross_arch}" != "amdgcn"
BuildRequires: cross-%{binutils_target}-binutils
Requires: cross-%{binutils_target}-binutils
%endif
%endif
%define hostsuffix %{nil}
BuildRequires: gcc-c++
%if %{suse_version} > 1500
BuildRequires: libzstd-devel
%endif
BuildRequires: bison
BuildRequires: flex
BuildRequires: gettext-devel
BuildRequires: glibc-devel-32bit
%if %{with limitbuild}
BuildRequires: memory-constraints
%endif
BuildRequires: mpc-devel
BuildRequires: mpfr-devel
BuildRequires: perl
BuildRequires: makeinfo
BuildRequires: zlib-devel
BuildRequires: isl-devel
%ifarch ia64
BuildRequires: libunwind-devel
%endif
%if 0%{!?gcc_icecream:1}
%if 0%{!?gcc_libc_bootstrap:1}
%if 0%{?gcc_target_newlib:1}
%if !0%{?is_opensuse}
ExclusiveArch: do-not-build
%endif
BuildRequires: cross-%cross_arch-newlib-devel
Requires: cross-%cross_arch-newlib-devel
%endif
%if "%{cross_arch}" == "avr"
%if !0%{?is_opensuse}
ExclusiveArch: do-not-build
%endif
BuildRequires: avr-libc
%endif
%if 0%{?gcc_target_glibc:1}
%if %{suse_version} < 1600
ExclusiveArch: do-not-build
%endif
BuildRequires: cross-%cross_arch-glibc-devel
Requires: cross-%cross_arch-glibc-devel
%endif
%endif
%if "%{cross_arch}" == "nvptx"
BuildRequires: nvptx-tools
Requires: nvptx-tools
Requires: cross-nvptx-newlib-devel >= %{version}-%{release}
ExclusiveArch: x86_64
%define nvptx_newlib 1
%endif
%if "%{cross_arch}" == "amdgcn"
# amdgcn uses the llvm assembler and linker, needs at least llvm 15
%if 0%{?product_libs_llvm_ver} < 15
%define product_libs_llvm_ver 15
%endif
BuildRequires: llvm%{product_libs_llvm_ver}
Requires: llvm%{product_libs_llvm_ver}
BuildRequires: lld%{product_libs_llvm_ver}
Requires: lld%{product_libs_llvm_ver}
Requires: cross-amdgcn-newlib-devel >= %{version}-%{release}
# SLE12 does not fulfil build requirements for GCN, SLE15 SP1 does
# technically also SLE12 SP5 but do not bother there
%if %{suse_version} >= 1550 || 0%{?sle_version:%sle_version} >= 150100
ExclusiveArch: x86_64
%else
ExclusiveArch: do-not-build
%endif
%define amdgcn_newlib 1
%endif
%endif
%if "%{cross_arch}" == "pru"
ExclusiveArch: %arm
%endif
%if 0%{?gcc_target_glibc:1}
%ifarch %{cross_arch}
ExcludeArch: %{cross_arch}
%endif
%endif
%if 0%{?gcc_icecream:1}%{?gcc_libc_bootstrap:1}
ExclusiveArch: i586 ppc64le x86_64 s390x aarch64 riscv64
%endif
%define _binary_payload w.ufdio
# Obsolete cross-ppc-gcc49 from cross-ppc64-gcc49 which has
# file conflicts with it and is no longer packaged
%if "%pkgname" == "cross-ppc64-gcc49"
Obsoletes: cross-ppc-gcc49 <= 4.9.0+r209354
%endif
%if 0%{?gcc_target_newlib:1}%{?gcc_target_glibc:1}
# Generally only one cross for the same target triplet can be installed
# at the same time as we are populating a non-version-specific sysroot
Provides: %{gcc_target_arch}-gcc
Conflicts: %{gcc_target_arch}-gcc
%endif
%if 0%{?gcc_libc_bootstrap:1}
# The -bootstrap packages file-conflict with the non-bootstrap variants.
# Even if we don't actually (want to) distribute the bootstrap variants
# the following avoids repo-checker spamming us endlessly.
Conflicts: cross-%{cross_arch}-gcc@base_ver@
%endif
#!BuildIgnore: gcc-PIE
%if 0%{build_cp:1}
# The cross compiler only packages the arch specific c++ headers, so
# we need to depend on the host libstdc++ devel headers (we wouldn't need
# the libs, though)
Requires: libstdc++6-devel-gcc@base_ver@
%endif
%if 0%{!?gcc_accel:1}
BuildRequires: update-alternatives
Requires(post): update-alternatives
Requires(preun): update-alternatives
%endif
Summary: The GNU Compiler Collection targeting %{cross_arch}
License: GPL-3.0-or-later
%description
The GNU Compiler Collection as a cross-compiler targeting %{cross_arch}.
%if 0%{?gcc_icecream:1}
Note this is only useful for building freestanding things like the
kernel since it fails to include target libraries and headers.
%endif
%if 0%{?gcc_libc_bootstrap:1}
This is a package that is necessary for bootstrapping another package
only, it is not intended for any other use.
%endif
# BUILD-COMMON-BEGIN
# BUILD-COMMON-END
%if 0%{!?gcc_icecream:1}
make %{?make_output_sync} %{?_smp_mflags}
%else
make %{?make_output_sync} %{?_smp_mflags} all-host
%endif
%if 0%{?gcc_icecream:%gcc_icecream}
%package -n cross-%cross_arch-gcc@base_ver@-icecream-backend
Summary: Icecream backend for the GNU C Compiler
Group: Development/Languages/C and C++
%description -n cross-%cross_arch-gcc@base_ver@-icecream-backend
This package contains the icecream environment for the GNU C Compiler
%endif
%if 0%{?nvptx_newlib:1}
%package -n cross-nvptx-newlib@base_ver@-devel
Summary: Newlib for the nvptx offload target
Group: Development/Languages/C and C++
Provides: cross-nvptx-newlib-devel = %{version}-%{release}
Conflicts: cross-nvptx-newlib-devel
%description -n cross-nvptx-newlib@base_ver@-devel
Newlib development files for the nvptx offload target compiler.
%endif
%if 0%{?amdgcn_newlib:1}
%package -n cross-amdgcn-newlib@base_ver@-devel
Summary: Newlib for the amdgcn offload target
Group: Development/Languages/C and C++
Provides: cross-amdgcn-newlib-devel = %{version}-%{release}
Conflicts: cross-amdgcn-newlib-devel
%description -n cross-amdgcn-newlib@base_ver@-devel
Newlib development files for the amdgcn offload target compiler.
%endif
%define targetlibsubdir %{_libdir}/gcc/%{gcc_target_arch}/%{gcc_dir_version}
%define __provides_exclude_from ^(%{targetlibsubdir}|%{libsubdir}|%{_prefix}/%{gcc_target_arch})/.*$
%define __requires_exclude_from ^(%{targetlibsubdir}|%{libsubdir}|%{_prefix}/%{gcc_target_arch})/.*$
%install
cd obj-%{GCCDIST}
%if "%{TARGET_ARCH}" == "amdgcn"
# libtool needs to be able to call ranlib
export PATH="`pwd`/target-tools/bin:$PATH"
%endif
# install and fixup host parts
make DESTDIR=$RPM_BUILD_ROOT install-host
rm -rf $RPM_BUILD_ROOT/%{targetlibsubdir}/install-tools
rm -f $RPM_BUILD_ROOT/%{targetlibsubdir}/liblto_plugin.la
# common fixup
rm -f $RPM_BUILD_ROOT%{_libdir}/libiberty.a
# install and fixup target parts
%if 0%{?gcc_icecream:1}
# so expect the sysroot to be populated from natively built binaries
%else
# We want shared libraries to reside in the sysroot but the .so symlinks
# on the host. Once we have a cross target that has shared libs we need
# to manually fix up things here like we do for non-cross compilers
mkdir -p $RPM_BUILD_ROOT/%{?sysroot:%sysroot}
make DESTDIR=$RPM_BUILD_ROOT install-target
%if %{build_cp}
# So we installed libstdc++ headers into %prefix where they conflict
# with other host compilers. Rip out the non-target specific parts
# again. Note not all cross targets support libstdc++, so create the
# directory to make things easier.
mkdir -p $RPM_BUILD_ROOT/%_prefix/include/c++/%{gcc_dir_version}
find $RPM_BUILD_ROOT/%_prefix/include/c++/%{gcc_dir_version} -mindepth 1 -maxdepth 1 -type d -a -not -name %{gcc_target_arch} | xargs -r rm -r
find $RPM_BUILD_ROOT/%_prefix/include/c++/%{gcc_dir_version} -maxdepth 1 -type f | xargs -r rm
# And also remove installed pretty printers which conflict in similar ways
rm -rf $RPM_BUILD_ROOT/%{_datadir}/gcc%{binsuffix}
%endif
%endif
%if 0%{?binutils_os:1}
for prog in as ld; do
ln -s /usr/%{binutils_os}/bin/$prog $RPM_BUILD_ROOT%{targetlibsubdir}/
done
%endif
# remove docs
rm -rf $RPM_BUILD_ROOT%{_mandir}
rm -rf $RPM_BUILD_ROOT%{_infodir}
# for accelerators remove all frontends but lto1 and also install-tools
%if 0%{?gcc_accel:1}
rm -f $RPM_BUILD_ROOT%{libsubdir}/accel/%{gcc_target_arch}/cc1
rm -f $RPM_BUILD_ROOT%{libsubdir}/accel/%{gcc_target_arch}/cc1plus
rm -rf $RPM_BUILD_ROOT%{libsubdir}/accel/%{gcc_target_arch}/install-tools
rm -rf $RPM_BUILD_ROOT%{targetlibsubdir}/install-tools
# also move things from target directories into the accel path since
# that is the place where we later search for (only)
( cd $RPM_BUILD_ROOT%{targetlibsubdir} && tar cf - . ) | ( cd $RPM_BUILD_ROOT%{libsubdir}/accel/%{gcc_target_arch} && tar xf - )
rm -rf $RPM_BUILD_ROOT%{targetlibsubdir}
%endif
# for amdgcn install the symlinks to the llvm tools
# follow alternatives symlinks to the hardcoded version requirement
%if "%{TARGET_ARCH}" == "amdgcn"
mkdir -p $RPM_BUILD_ROOT%{_prefix}/amdgcn-amdhsa/bin
ln -s /usr/bin/llvm-ar-%{product_libs_llvm_ver}* $RPM_BUILD_ROOT%{_prefix}/amdgcn-amdhsa/bin/ar
ln -s /usr/bin/llvm-mc-%{product_libs_llvm_ver}* $RPM_BUILD_ROOT%{_prefix}/amdgcn-amdhsa/bin/as
ln -s /usr/bin/lld-%{product_libs_llvm_ver}* $RPM_BUILD_ROOT%{_prefix}/amdgcn-amdhsa/bin/ld
ln -s /usr/bin/llvm-nm-%{product_libs_llvm_ver}* $RPM_BUILD_ROOT%{_prefix}/amdgcn-amdhsa/bin/nm
ln -s /usr/bin/llvm-ranlib-%{product_libs_llvm_ver}* $RPM_BUILD_ROOT%{_prefix}/amdgcn-amdhsa/bin/ranlib
ln -s %{_prefix}/amdgcn-amdhsa/bin/ar $RPM_BUILD_ROOT%{_prefix}/bin/amdgcn-amdhsa-ar
ln -s %{_prefix}/amdgcn-amdhsa/bin/as $RPM_BUILD_ROOT%{_prefix}/bin/amdgcn-amdhsa-as
ln -s %{_prefix}/amdgcn-amdhsa/bin/ld $RPM_BUILD_ROOT%{_prefix}/bin/amdgcn-amdhsa-ld
ln -s %{_prefix}/amdgcn-amdhsa/bin/nm $RPM_BUILD_ROOT%{_prefix}/bin/amdgcn-amdhsa-nm
ln -s %{_prefix}/amdgcn-amdhsa/bin/ranlib $RPM_BUILD_ROOT%{_prefix}/bin/amdgcn-amdhsa-ranlib
%endif
%if 0%{?gcc_icecream:%gcc_icecream}
# Build an icecream environment
# The assembler comes from the cross-binutils, and hence is _not_
# named funnily, not even on ppc, so there we need the original target
install -s -D %{_prefix}/bin/%{binutils_os}-as \
$RPM_BUILD_ROOT/env/usr/bin/as
install -s $RPM_BUILD_ROOT/%{_prefix}/bin/%{gcc_target_arch}-g++%{binsuffix} \
$RPM_BUILD_ROOT/env/usr/bin/g++
install -s $RPM_BUILD_ROOT/%{_prefix}/bin/%{gcc_target_arch}-gcc%{binsuffix} \
$RPM_BUILD_ROOT/env/usr/bin/gcc
for back in cc1 cc1plus; do
install -s -D $RPM_BUILD_ROOT/%{targetlibsubdir}/$back \
$RPM_BUILD_ROOT/env%{targetlibsubdir}/$back
done
if test -f $RPM_BUILD_ROOT/%{targetlibsubdir}/liblto_plugin.so; then
install -s -D $RPM_BUILD_ROOT/%{targetlibsubdir}/liblto_plugin.so \
$RPM_BUILD_ROOT/env%{targetlibsubdir}/liblto_plugin.so
fi
# Make sure to also pull in all shared library requirements for the
# binaries we put into the environment which is operated by chrooting
# into it and execing the compiler
libs=`for bin in $RPM_BUILD_ROOT/env/usr/bin/* $RPM_BUILD_ROOT/env%{targetlibsubdir}/*; do \
ldd $bin | sed -n '\,^[^/]*\(/[^ ]*\).*,{ s//\1/; p; }' ;\
done | sort -u `
for lib in $libs; do
# Check wether the same library also exists in the parent directory,
# and prefer that on the assumption that it is a more generic one.
baselib=`echo "$lib" | sed 's,/[^/]*\(/[^/]*\)$,\1,'`
test -f "$baselib" && lib=$baselib
install -s -D $lib $RPM_BUILD_ROOT/env$lib
done
cd $RPM_BUILD_ROOT/env
tar --no-recursion --mtime @${SOURCE_DATE_EPOCH:-$(date +%s)} --format=gnu -cv `find *|LC_ALL=C sort` |\
gzip -n9 > ../%{name}_%{_arch}.tar.gz
cd ..
mkdir -p usr/share/icecream-envs
mv %{name}_%{_arch}.tar.gz usr/share/icecream-envs
rpm -q --changelog glibc > usr/share/icecream-envs/%{name}_%{_arch}.glibc
rpm -q --changelog binutils > usr/share/icecream-envs/%{name}_%{_arch}.binutils
rm -r env
%endif
# we provide update-alternatives for selecting a compiler version for
# crosses
%if 0%{!?gcc_accel:1}
mkdir -p %{buildroot}%{_sysconfdir}/alternatives
for ex in gcc cpp \
%if %{build_cp}
c++ g++ \
%endif
gcc-ar gcc-nm gcc-ranlib lto-dump \
%if 0%{!?gcc_libc_bootstrap:1} && "%{cross_arch}" != "bpf"
gcov gcov-dump gcov-tool \
%endif
; do
ln -s %{_sysconfdir}/alternatives/%{gcc_target_arch}-$ex \
%{buildroot}%{_bindir}/%{gcc_target_arch}-$ex
done
%post
%{_sbindir}/update-alternatives \
--install %{_bindir}/%{gcc_target_arch}-gcc %{gcc_target_arch}-gcc %{_bindir}/%{gcc_target_arch}-gcc%{binsuffix} @base_ver@ \
--slave %{_bindir}/%{gcc_target_arch}-cpp %{gcc_target_arch}-cpp %{_bindir}/%{gcc_target_arch}-cpp%{binsuffix} \
%if %{build_cp}
--slave %{_bindir}/%{gcc_target_arch}-c++ %{gcc_target_arch}-c++ %{_bindir}/%{gcc_target_arch}-c++%{binsuffix} \
--slave %{_bindir}/%{gcc_target_arch}-g++ %{gcc_target_arch}-g++ %{_bindir}/%{gcc_target_arch}-g++%{binsuffix} \
%endif
%if 0%{!?gcc_libc_bootstrap:1} && "%{cross_arch}" != "bpf"
--slave %{_bindir}/%{gcc_target_arch}-gcov %{gcc_target_arch}-gcov %{_bindir}/%{gcc_target_arch}-gcov%{binsuffix} \
--slave %{_bindir}/%{gcc_target_arch}-gcov-dump %{gcc_target_arch}-gcov-dump %{_bindir}/%{gcc_target_arch}-gcov-dump%{binsuffix} \
--slave %{_bindir}/%{gcc_target_arch}-gcov-tool %{gcc_target_arch}-gcov-tool %{_bindir}/%{gcc_target_arch}-gcov-tool%{binsuffix} \
%endif
--slave %{_bindir}/%{gcc_target_arch}-gcc-ar %{gcc_target_arch}-gcc-ar %{_bindir}/%{gcc_target_arch}-gcc-ar%{binsuffix} \
--slave %{_bindir}/%{gcc_target_arch}-gcc-nm %{gcc_target_arch}-gcc-nm %{_bindir}/%{gcc_target_arch}-gcc-nm%{binsuffix} \
--slave %{_bindir}/%{gcc_target_arch}-lto-dump %{gcc_target_arch}-lto-dump %{_bindir}/%{gcc_target_arch}-lto-dump%{binsuffix} \
--slave %{_bindir}/%{gcc_target_arch}-gcc-ranlib %{gcc_target_arch}-gcc-ranlib %{_bindir}/%{gcc_target_arch}-gcc-ranlib%{binsuffix}
%postun
if [ ! -f %{_bindir}/%{gcc_target_arch}-gcc ] ; then
%{_sbindir}/update-alternatives --remove %{gcc_target_arch}-gcc %{_bindir}/%{gcc_target_arch}-gcc%{binsuffix}
fi
%endif
%files
%defattr(-,root,root)
%if 0%{?gcc_accel:1}
%{_prefix}/bin/%{GCCDIST}-accel-%{gcc_target_arch}-*
%dir %{libsubdir}
%dir %{libsubdir}/accel
%{libsubdir}/accel/%{gcc_target_arch}
%if "%{cross_arch}" == "amdgcn"
%{_prefix}/%{gcc_target_arch}/bin
%{_prefix}/bin/amdgcn-amdhsa-ar
%{_prefix}/bin/amdgcn-amdhsa-as
%{_prefix}/bin/amdgcn-amdhsa-ld
%{_prefix}/bin/amdgcn-amdhsa-nm
%{_prefix}/bin/amdgcn-amdhsa-ranlib
%endif
%else
%{_prefix}/bin/%{gcc_target_arch}-gcc%{binsuffix}
%{_prefix}/bin/%{gcc_target_arch}-cpp%{binsuffix}
%{_prefix}/bin/%{gcc_target_arch}-gcc-ar%{binsuffix}
%{_prefix}/bin/%{gcc_target_arch}-gcc-nm%{binsuffix}
%{_prefix}/bin/%{gcc_target_arch}-gcc-ranlib%{binsuffix}
%{_prefix}/bin/%{gcc_target_arch}-lto-dump%{binsuffix}
%if 0%{!?gcc_libc_bootstrap:1} && "%{cross_arch}" != "bpf"
%{_prefix}/bin/%{gcc_target_arch}-gcov%{binsuffix}
%{_prefix}/bin/%{gcc_target_arch}-gcov-dump%{binsuffix}
%{_prefix}/bin/%{gcc_target_arch}-gcov-tool%{binsuffix}
%{_prefix}/bin/%{gcc_target_arch}-gcov
%{_prefix}/bin/%{gcc_target_arch}-gcov-dump
%{_prefix}/bin/%{gcc_target_arch}-gcov-tool
%endif
%{_prefix}/bin/%{gcc_target_arch}-gcc
%{_prefix}/bin/%{gcc_target_arch}-cpp
%{_prefix}/bin/%{gcc_target_arch}-gcc-ar
%{_prefix}/bin/%{gcc_target_arch}-gcc-nm
%{_prefix}/bin/%{gcc_target_arch}-gcc-ranlib
%{_prefix}/bin/%{gcc_target_arch}-lto-dump
%ghost %{_sysconfdir}/alternatives/%{gcc_target_arch}-gcc
%ghost %{_sysconfdir}/alternatives/%{gcc_target_arch}-cpp
%ghost %{_sysconfdir}/alternatives/%{gcc_target_arch}-gcc-ar
%ghost %{_sysconfdir}/alternatives/%{gcc_target_arch}-gcc-nm
%ghost %{_sysconfdir}/alternatives/%{gcc_target_arch}-gcc-ranlib
%ghost %{_sysconfdir}/alternatives/%{gcc_target_arch}-lto-dump
%if 0%{!?gcc_libc_bootstrap:1} && "%{cross_arch}" != "bpf"
%ghost %{_sysconfdir}/alternatives/%{gcc_target_arch}-gcov
%ghost %{_sysconfdir}/alternatives/%{gcc_target_arch}-gcov-dump
%ghost %{_sysconfdir}/alternatives/%{gcc_target_arch}-gcov-tool
%endif
%if %{build_cp}
%{_prefix}/bin/%{gcc_target_arch}-c++%{binsuffix}
%{_prefix}/bin/%{gcc_target_arch}-g++%{binsuffix}
%{_prefix}/bin/%{gcc_target_arch}-c++
%{_prefix}/bin/%{gcc_target_arch}-g++
%ghost %{_sysconfdir}/alternatives/%{gcc_target_arch}-c++
%ghost %{_sysconfdir}/alternatives/%{gcc_target_arch}-g++
%if 0%{!?gcc_libc_bootstrap:1}
%if "%{cross_arch}" == "avr" || 0%{?gcc_target_newlib:1} || 0%{?gcc_target_glibc:1}
%{_prefix}/include/c++
%endif
%endif
%endif
%dir %{targetlibsubdir}
%dir %{_libdir}/gcc/%{gcc_target_arch}
%{targetlibsubdir}
%endif
%if 0%{!?gcc_icecream:1} && 0%{!?gcc_libc_bootstrap:1} && 0%{?sysroot:1}
%{sysroot}
%endif
%if 0%{?gcc_icecream:%gcc_icecream}
%files -n cross-%cross_arch-gcc@base_ver@-icecream-backend
%defattr(-,root,root)
/usr/share/icecream-envs
%endif
%if 0%{?nvptx_newlib:1}
%files -n cross-nvptx-newlib@base_ver@-devel
%defattr(-,root,root)
%{_prefix}/%{gcc_target_arch}
%endif
%if 0%{?amdgcn_newlib:1}
%files -n cross-amdgcn-newlib@base_ver@-devel
%defattr(-,root,root)
%{_prefix}/%{gcc_target_arch}
%exclude %{_prefix}/%{gcc_target_arch}/bin
%endif
%changelog -n cross-%{pkgname}-gcc@base_ver@

BIN
gcc-14.1.1+git10335.tar.xz (Stored with Git LFS) Normal file

Binary file not shown.

BIN
gcc-14.2.0+git10526.tar.xz (Stored with Git LFS) Normal file

Binary file not shown.

51
gcc-add-defaultsspec.diff Normal file
View File

@ -0,0 +1,51 @@
Index: gcc/gcc.cc
===================================================================
--- gcc/gcc.cc.orig 2013-11-26 15:41:59.000000000 +0100
+++ gcc/gcc.cc 2013-11-26 16:40:35.780548125 +0100
@@ -258,6 +258,7 @@ static const char *replace_outfile_spec_
static const char *remove_outfile_spec_function (int, const char **);
static const char *version_compare_spec_function (int, const char **);
static const char *include_spec_function (int, const char **);
+static const char *include_noerr_spec_function (int, const char **);
static const char *find_file_spec_function (int, const char **);
static const char *find_plugindir_spec_function (int, const char **);
static const char *print_asm_header_spec_function (int, const char **);
@@ -1357,6 +1358,7 @@ static const struct spec_function static
{ "remove-outfile", remove_outfile_spec_function },
{ "version-compare", version_compare_spec_function },
{ "include", include_spec_function },
+ { "include_noerr", include_noerr_spec_function },
{ "find-file", find_file_spec_function },
{ "find-plugindir", find_plugindir_spec_function },
{ "print-asm-header", print_asm_header_spec_function },
@@ -6480,6 +6482,8 @@ main (int argc, char **argv)
if (access (specs_file, R_OK) == 0)
read_specs (specs_file, true, false);
+ do_self_spec ("%:include_noerr(defaults.spec)%(default_spec)");
+
/* Process any configure-time defaults specified for the command line
options, via OPTION_DEFAULT_SPECS. */
for (i = 0; i < ARRAY_SIZE (option_default_specs); i++)
@@ -8401,6 +8405,21 @@ get_random_number (void)
return ret ^ getpid ();
}
+static const char *
+include_noerr_spec_function (int argc, const char **argv)
+{
+ char *file;
+
+ if (argc != 1)
+ abort ();
+
+ file = find_a_file (&startfile_prefixes, argv[0], R_OK, 0);
+ if (file)
+ read_specs (file, FALSE, TRUE);
+
+ return NULL;
+}
+
/* %:compare-debug-dump-opt spec function. Save the last argument,
expected to be the last -fdump-final-insns option, or generate a
temporary. */

3167
gcc.spec.in Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,29 @@
diff --git a/gcc/defaults.h b/gcc/defaults.h
index 376687d91b1..613003eb14f 100644
--- a/gcc/defaults.h
+++ b/gcc/defaults.h
@@ -1444,7 +1444,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
/* When generating dwarf info, the default standard version we'll honor
and advertise in absence of -gdwarf-<N> on the command line. */
#ifndef DWARF_VERSION_DEFAULT
-#define DWARF_VERSION_DEFAULT 5
+#define DWARF_VERSION_DEFAULT 4
#endif
#ifndef USED_FOR_TARGET
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index 04ca9d9b02b..944019edbc1 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -11255,9 +11255,8 @@ possible.
@itemx -gdwarf-@var{version}
Produce debugging information in DWARF format (if that is supported).
The value of @var{version} may be either 2, 3, 4 or 5; the default
-version for most targets is 5 (with the exception of VxWorks, TPF and
-Darwin / macOS, which default to version 2, and AIX, which defaults
-to version 4).
+version for most targets is 4 (with the exception of VxWorks, TPF and
+Darwin / macOS, which default to version 2).
Note that with DWARF Version 2, some ports require and always
use some non-conflicting DWARF 3 extensions in the unwind tables.

46
gcc13-pr101523.patch Normal file
View File

@ -0,0 +1,46 @@
From 5729ffad4db78b26f0d1f658a9fd695be5970550 Mon Sep 17 00:00:00 2001
From: Richard Biener <rguenther@suse.de>
Date: Wed, 3 Apr 2024 12:58:26 +0200
Subject: [PATCH] rtl-optimization/101523 - avoid re-combine after noop 2->2
combination
To: gcc-patches@gcc.gnu.org
The following avoids re-walking and re-combining the instructions
between i2 and i3 when the pattern of i2 doesn't change.
PR rtl-optimization/101523
* combine.cc (try_combine): When the pattern of i2 doesn't
change do not re-start combining at i2 or an earlier insn which
had links or notes added.
---
gcc/combine.cc | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/gcc/combine.cc b/gcc/combine.cc
index a4479f8d836..ff25752cac4 100644
--- a/gcc/combine.cc
+++ b/gcc/combine.cc
@@ -4186,6 +4186,10 @@ try_combine (rtx_insn *i3, rtx_insn *i2, rtx_insn *i1, rtx_insn *i0,
adjust_for_new_dest (i3);
}
+ bool i2_unchanged = false;
+ if (rtx_equal_p (newi2pat, PATTERN (i2)))
+ i2_unchanged = true;
+
/* We now know that we can do this combination. Merge the insns and
update the status of registers and LOG_LINKS. */
@@ -4752,6 +4756,9 @@ try_combine (rtx_insn *i3, rtx_insn *i2, rtx_insn *i1, rtx_insn *i0,
combine_successes++;
undo_commit ();
+ if (i2_unchanged)
+ return i3;
+
rtx_insn *ret = newi2pat ? i2 : i3;
if (added_links_insn && DF_INSN_LUID (added_links_insn) < DF_INSN_LUID (ret))
ret = added_links_insn;
--
2.35.3

18
gcc14-rpmlintrc Normal file
View File

@ -0,0 +1,18 @@
# This line is mandatory to access the configuration functions
from Config import *
# gcc/gcc-c++ are devel packages even if not called -devel...
addFilter ("gcc.*devel-file-in-non-devel-package")
addFilter ("gcc.*devel-dependency glibc-devel")
addFilter ("gcc.*devel-dependency libstdc")
# libstdc++6-devel is the devel package of libstdc++6, no better name exists
# and we do package static libs and the .so links (but in a gcc versioned
# directory)
addFilter ("libstdc.*shlib-policy-missing-lib")
# We have names lib libgcc_s1-gcc7 for non-default GCCs
addFilter ("shlib-policy-name-error")
addFilter ("shlib-legacy-policy-name-error")
# Packages provide libgcc_s1 = $version and conflict with other providers
# of libgcc_s1
addFilter ("conflicts-with-provides")

View File

@ -0,0 +1,10 @@
# This line is mandatory to access the configuration functions
from Config import *
# Currently gotools.log contains $RPM_BUILD_ROOT and there's nothing
# to be done about that and neither do we care
addFilter ("gcc.*-testresults.*file-contains-buildroot")
# The package should _not_ be noarch, testresults differ from architecture
# to architecture
addFilter ("gcc.*-testresults.*no-binary")

979
gcc14-testresults.spec Normal file
View File

@ -0,0 +1,979 @@
#
# spec file for package gcc14-testresults
#
# Copyright (c) 2024 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.
# Please submit bugfixes or comments via https://bugs.opensuse.org/
#
%define building_testsuite 1
%define run_tests 1
#
# spec file for package gcc${version}
#
# Copyright (c) 2021 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.
# Please submit bugfixes or comments via https://bugs.opensuse.org/
#
# nospeccleaner
%if 0%{?suse_version} < 1550
%define _slibdir /%{_lib}
%define slibdir /lib
%define slibdir64 /lib64
%else
%define _slibdir %{_libdir}
%define slibdir %{_prefix}/lib
%define slibdir64 %{_prefix}/lib64
%define usrmerged 1
%endif
%bcond_without bootstrap
# Ada currently fails to build on a few platforms, enable it only
# on those that work
%if %{suse_version} >= 1330
%define ada_arch %ix86 x86_64 ppc ppc64 ppc64le s390 s390x ia64 aarch64 riscv64
%else
%define ada_arch %ix86 x86_64 ppc ppc64 s390 ia64
%endif
%ifarch %ada_arch
%define build_ada 1
%else
%define build_ada 0
%endif
%define quadmath_arch %ix86 x86_64 ia64 ppc64le
%define tsan_arch x86_64 aarch64 ppc ppc64 ppc64le s390 s390x riscv64
%define asan_arch x86_64 %ix86 ppc ppc64 ppc64le s390 s390x %sparc %arm aarch64 riscv64
%define hwasan_arch aarch64 x86_64
%define itm_arch x86_64 %ix86 %arm aarch64 ppc ppc64 ppc64le riscv64 s390 s390x %sparc
%define atomic_arch x86_64 %ix86 %arm aarch64 ppc ppc64 ppc64le s390 s390x %sparc m68k ia64 riscv64
%define lsan_arch x86_64 aarch64 ppc ppc64 ppc64le s390 s390x riscv64
%define ubsan_arch x86_64 %ix86 ppc ppc64 ppc64le s390 s390x %arm aarch64 riscv64
%if 0%{?build_libvtv:1}
%define vtv_arch x86_64 %ix86
%endif
%define build_cp 1
%define build_fortran 1
%define build_objc 1
%define build_objcp 1
%define build_go 1
%ifarch x86_64 %ix86 %arm aarch64 riscv64 s390x
%define build_d 1
%else
%define build_d 0
%endif
%define build_m2 1
%if %{build_objcp}
%define build_cp 1
%define build_objc 1
%endif
%define build_rust 0
%if %{suse_version} >= 1699
# rust is still experimental, only build it for factory
%ifarch %ix86 x86_64 aarch64 riscv64
%define build_rust 1
%endif
%endif
# For optional compilers only build C, C++, Fortran, Ada and Go
%if 0%{?build_optional_compiler_languages:1}
%define build_objc 0
%define build_objcp 0
%define build_d 0
%define build_rust 0
%define build_m2 0
%endif
%ifarch x86_64
%define build_nvptx 1
%else
%define build_nvptx 0
%endif
%ifarch x86_64
# SLE12 does not fulfil build requirements for GCN, SLE15 SP1 does
# technically also SLE12 SP5 but do not bother there
%if %{suse_version} >= 1550 || 0%{?sle_version:%sle_version} >= 150100
%define build_gcn 1
%else
%define build_gcn 0
%endif
%else
%define build_gcn 0
%endif
%define use_lto_bootstrap 0
%ifarch x86_64 ppc64le s390x aarch64
%if %{suse_version} > 1500
%define use_lto_bootstrap %{with bootstrap}
%endif
%endif
# Enable plugins just for Tumbleweed, not for SLES
%if 0%{!?sle_version:1}
%define enable_plugins 1
%define build_jit 1
%else
%define enable_plugins 0
%define build_jit 0
%endif
# Limit the number of parallel jobs to avoid OOM
%bcond_without limitbuild
# Shared library SONAME versions
%ifarch hppa
%define libgcc_s 4
%else
%ifarch m68k
%define libgcc_s 2
%else
%define libgcc_s 1
%endif
%endif
%define libgomp_sover 1
%define libstdcxx_sover 6
%define libobjc_sover 4
%define libgfortran_sover 5
%define libquadmath_sover 0
%define libasan_sover 8
%define libtsan_sover 2
%define libhwasan_sover 0
%define libatomic_sover 1
%define libitm_sover 1
%define libubsan_sover 1
%define liblsan_sover 0
%define libvtv_sover 0
%define libgo_sover 23
%define libgphobos_sover 5
%define libgdruntime_sover 5
%define libgccjit_sover 0
%define libm2_sover 19
# Shared library package suffix
# This is used for the "non-standard" set of libraries, the standard
# being defined by %%product_libs_gcc_ver, the GCC version that should
# provide un-suffixed shared library packages following the shared-library
# policy. Even suffixed variants should provide the shared-library policy
# mandated names and ensure they conflict with each other.
# Individual shared libraries can be directed to be built from individual
# gcc versions by defining %%product_libs_gcc_ver_libgcc_s1 for example,
# generally %%product_libs_gcc_ver_%%name%%sover, similarly.
%define itsme14 1
%define plv_ %{!?product_libs_gcc_ver:14}%{?product_libs_gcc_ver}
%define plv() %{expand:%%{!?itsme%{expand:%%{!?product_libs_gcc_ver_%{1}%{2}:%%{plv_}}%%{?product_libs_gcc_ver_%{1}%{2}}}:-gcc14}}
%define libgcc_s_suffix %{plv libgcc_s %{libgcc_s}}
%define libgomp_suffix %{plv libgomp %{libgomp_sover}}
%define libstdcxx_suffix %{plv libstdcxx %{libstdcxx_sover}}
%define libobjc_suffix %{plv libobjc %{libobjc_sover}}
%define libgfortran_suffix %{plv libgfortran %{libgfortran_sover}}
%define libquadmath_suffix %{plv libquadmath %{libquadmath_sover}}
%define libasan_suffix %{plv libasan %{libasan_sover}}
%define libtsan_suffix %{plv libtsan %{libtsan_sover}}
%define libhwasan_suffix %{plv libhwasan %{libhwasan_sover}}
%define libatomic_suffix %{plv libatomic %{libatomic_sover}}
%define libitm_suffix %{plv libitm %{libitm_sover}}
%define libubsan_suffix %{plv libubsan %{libubsan_sover}}
%define liblsan_suffix %{plv liblsan %{liblsan_sover}}
%define libvtv_suffix %{plv libvtv %{libvtv_sover}}
%define libgo_suffix %{plv libgo %{libgo_sover}}
%define libgphobos_suffix %{plv libgphobos %{libgphobos_sover}}
%define libgdruntime_suffix %{plv libgdruntime %{libgdruntime_sover}}
%define libgccjit_suffix %{plv libgccjit %{libgccjit_sover}}
%define libm2_suffix %{plv libm2 %{libm2_sover}}
# libFOO-devel package suffix
%define libdevel_suffix -gcc14
%define biarch_targets x86_64 s390x powerpc64 powerpc sparc sparc64
URL: https://gcc.gnu.org/
Version: 14.2.0+git10526
Release: 0
%define gcc_dir_version %(echo %version | sed 's/+.*//' | cut -d '.' -f 1)
%define gcc_snapshot_revision %(echo %version | sed 's/[3-9]\.[0-9]\.[0-6]//' | sed 's/+/-/')
%define binsuffix -14
Name: gcc14-testresults
BuildRequires: xz
%if %{suse_version} > 1500
BuildRequires: libzstd-devel
%endif
# With generated files in src we could drop the following
BuildRequires: bison
BuildRequires: flex
BuildRequires: gettext-devel
BuildRequires: makeinfo
# until here, but at least renaming and patching info files breaks this
BuildRequires: gcc-c++
BuildRequires: glibc-devel-32bit
%if %{with limitbuild}
BuildRequires: memory-constraints
%endif
BuildRequires: mpc-devel
BuildRequires: mpfr-devel
BuildRequires: perl
BuildRequires: zlib-devel
%if %{suse_version} >= 1500
# for SDT markers in the C++ unwinder and gdb breakpoints on exceptions
BuildRequires: systemtap-headers
%endif
BuildRequires: isl-devel
%define hostsuffix %{nil}
%if %{build_ada}
%if 0%{?gcc_version:%{gcc_version}} > 14
%define hostsuffix %{binsuffix}
BuildRequires: gcc14-ada
BuildRequires: gcc14-c++
%else
%if %{suse_version} <= 1315
%define hostsuffix -7
BuildRequires: gcc7-ada
BuildRequires: gcc7-c++
%else
%define hostsuffix %{nil}
BuildRequires: gcc-ada
%endif
%endif
%endif
%if %{build_d}
%if %{suse_version} < 1550
BuildRequires: gcc11-d
BuildRequires: libstdc++6-devel-gcc11
%else
BuildRequires: gcc-d
%endif
%endif
%ifarch ia64
BuildRequires: libunwind-devel
%endif
%if 0%{?run_tests:1}
BuildRequires: dejagnu
BuildRequires: expect
BuildRequires: gdb
BuildRequires: timezone
%if %{build_go}
BuildRequires: netcfg
BuildRequires: procps
%endif
%if %{build_nvptx}
BuildRequires: cross-nvptx-gcc14
BuildRequires: cross-nvptx-newlib14-devel
%endif
%if %{build_gcn}
BuildRequires: cross-amdgcn-gcc14
BuildRequires: cross-amdgcn-newlib14-devel
%endif
%endif
#!BuildIgnore: gcc-PIE
%define separate_bi32 0
%define separate_bi64 0
%if 0%{!?disable_32bit:1}
%ifarch ppc sparcv9
%define separate_bi64 1
%endif
%ifarch x86_64 s390x ppc64 sparc64
%define separate_bi32 1
%endif
%define disable_multilib_arch %{nil}
%else
%define disable_multilib_arch ppc sparcv9 x86_64 s390x ppc64 sparc64
%endif
# Define two macros to trigger -32bit or -64bit package variants
%define separate_biarch 0
%if %{separate_bi32}
%define separate_biarch 1
%define separate_biarch_suffix -32bit
%endif
%if %{separate_bi64}
%define separate_biarch 1
%define separate_biarch_suffix -64bit
%endif
%ifarch aarch64 x86_64 ia64 s390x alpha ppc64 ppc64le sparc64 riscv64
# 64-bit is primary build target
%define build_primary_64bit 1
%else
%define build_primary_64bit 0
%endif
%if !0%{?building_testsuite:1}
Requires: binutils
Requires: cpp14 = %{version}-%{release}
Requires: glibc-devel
Requires: libgcc_s%{libgcc_s} >= %{version}-%{release}
Requires: libgomp%{libgomp_sover} >= %{version}-%{release}
%ifarch %asan_arch
Requires: libasan%{libasan_sover} >= %{version}-%{release}
%endif
%ifarch %tsan_arch
%if %{build_primary_64bit}
Requires: libtsan%{libtsan_sover} >= %{version}-%{release}
%endif
%endif
%ifarch %hwasan_arch
Requires: libhwasan%{libhwasan_sover} >= %{version}-%{release}
%endif
%ifarch %atomic_arch
Requires: libatomic%{libatomic_sover} >= %{version}-%{release}
%endif
%ifarch %itm_arch
Requires: libitm%{libitm_sover} >= %{version}-%{release}
%endif
%ifarch %lsan_arch
%if %{build_primary_64bit}
Requires: liblsan%{liblsan_sover} >= %{version}-%{release}
%endif
%endif
%ifarch %ubsan_arch
Requires: libubsan%{libubsan_sover} >= %{version}-%{release}
%endif
%ifarch %vtv_arch
Requires: libvtv%{libvtv_sover} >= %{version}-%{release}
%endif
Suggests: gcc14-info gcc14-locale
%endif
Group: Development/Languages/C and C++
Source: gcc-%{version}.tar.xz
Source1: change_spec
Source2: gcc14-rpmlintrc
Source3: gcc14-testresults-rpmlintrc
Source4: README.First-for.SuSE.packagers
Source5: newlib-4.4.0.20231231.tar.xz
Patch2: gcc-add-defaultsspec.diff
Patch5: tls-no-direct.diff
Patch6: gcc43-no-unwind-tables.diff
Patch7: gcc48-libstdc++-api-reference.patch
Patch11: gcc7-remove-Wexpansion-to-defined-from-Wextra.patch
Patch15: gcc7-avoid-fixinc-error.diff
Patch16: gcc9-reproducible-builds.patch
Patch17: gcc9-reproducible-builds-buildid-for-checksum.patch
Patch19: gcc11-gdwarf-4-default.patch
Patch20: gcc13-pr101523.patch
# A set of patches from the RH srpm
Patch51: gcc41-ppc32-retaddr.patch
# Some patches taken from Debian
Patch60: gcc44-textdomain.patch
Patch61: gcc44-rename-info-files.patch
# Patches for embedded newlib
Patch100: newlib-gcn-iolock.diff
Summary: Testsuite results
License: SUSE-Public-Domain
Group: Development/Languages/C and C++
%description
Results from running the gcc and target library testsuites.
# Define the canonical target and host architecture
# %%gcc_target_arch is supposed to be the full target triple
# %%cross_arch is supposed to be the rpm target variant arch
# %%TARGET_ARCH will be the canonicalized target CPU part
# %%HOST_ARCH will be the canonicalized host CPU part
%if 0%{?gcc_target_arch:1}
%define TARGET_ARCH %(echo %{cross_arch} | sed -e "s/i.86/i586/;s/ppc/powerpc/;s/sparc64.*/sparc64/;s/sparcv.*/sparc/;")
%else
%define TARGET_ARCH %(echo %{_target_cpu} | sed -e "s/i.86/i586/;s/ppc/powerpc/;s/sparc64.*/sparc64/;s/sparcv.*/sparc/;")
%endif
%if 0%{?disable_32bit:1}
%define biarch 0
%else
%define biarch %(case " %{biarch_targets} " in (*" %{TARGET_ARCH} "*) echo 1;; (*) echo 0;; esac)
%endif
%define HOST_ARCH %(echo %{_target_cpu} | sed -e "s/i.86/i586/;s/ppc/powerpc/;s/sparc64.*/sparc64/;s/sparcv.*/sparc/;")
%ifarch ppc
%define GCCDIST powerpc64-suse-linux
%else
%ifarch %sparc
%define GCCDIST sparc64-suse-linux
%else
%ifarch %arm
%define GCCDIST %{HOST_ARCH}-suse-linux-gnueabi
%else
%define GCCDIST %{HOST_ARCH}-suse-linux
%endif
%endif
%endif
%define libsubdir %{_libdir}/gcc/%{GCCDIST}/%{gcc_dir_version}
%define gxxinclude %{_prefix}/include/c++/%{gcc_dir_version}
# Versionspecific directories
%define versmainlibdir %{libsubdir}
%define versmainlibdirbi32 %{libsubdir}/32
%define versmainlibdirbi64 %{libsubdir}/64
%ifarch ppc
%define versmainlibdirbi32 %{libsubdir}
%define versmainlibdirbi64 %{libsubdir}/64
%endif
%if %{build_primary_64bit}
%define versmainlibdirbi %{versmainlibdirbi32}
%else
%define versmainlibdirbi %{versmainlibdirbi64}
%endif
%define mainlibdir %{_libdir}
%define mainlibdirbi32 %{_prefix}/lib
%define mainlibdirbi64 %{_prefix}/lib64
%if %{build_primary_64bit}
%define mainlibdirbi %{mainlibdirbi32}
%else
%define mainlibdirbi %{mainlibdirbi64}
%endif
# Now define a few macros that make it easy to package libs and
# related files just to the right package, without caring for the
# exact path the files are in.
# %%mainlib package X from all dirs that belong to the main package
# %%biarchlib package X from all dirs that belong to the -32/64bit package
%define mainlib() %{mainlibdir}/%1\
%{nil}
%define biarchlib() %{nil}
%if %{biarch}
%if !%{separate_biarch}
%define mainlib() %{mainlibdir}/%1\
%{mainlibdirbi}/%1\
%{nil}
%else
%define biarchlib() %{mainlibdirbi}/%1\
%{nil}
%endif
%endif
%define versmainlib() %{versmainlibdir}/%1\
%{nil}
%define versbiarchlib() %{nil}
%if %{biarch}
%if !%{separate_biarch}
%define versmainlib() %{versmainlibdir}/%1\
%{versmainlibdirbi}/%1\
%{nil}
%else
%define versbiarchlib() %{versmainlibdirbi}/%1\
%{nil}
%endif
%endif
%if 0%{suse_version} >= 1500
# Synchronize output by lines, useful for configure output
%define make_output_sync -Oline
%endif
%prep
%if 0%{?nvptx_newlib:1}%{?amdgcn_newlib:1}
%setup -q -n gcc-%{version} -a 5
ln -s newlib-4.4.0.20231231/newlib .
%else
%setup -q -n gcc-%{version}
%endif
#test patching start
%patch -P 2 -P 5 -P 6 -P 7
%patch -p1 -P 11
%patch -P 15 -P 16
%patch -p1 -P 17
# In SLE15 and earlier default to dwarf4, not dwarf5
%if %{suse_version} < 1550
%patch -p1 -P 19
%endif
%patch -p1 -P 20
%patch -P 51
%patch -p1 -P 60 -P 61
%if 0%{?nvptx_newlib:1}%{?amdgcn_newlib:1}
%patch -p1 -P 100
%endif
#test patching end
%build
%if %{with limitbuild}
%limit_build -m 900
%endif
%define _lto_cflags %{nil}
# Avoid rebuilding of generated files
contrib/gcc_update --touch
rm -rf obj-%{GCCDIST}
mkdir obj-%{GCCDIST}
cd obj-%{GCCDIST}
# Filter out unwanted flags from $RPM_OPT_FLAGS
optflags=
optflags_d=
for flag in $RPM_OPT_FLAGS; do
add_flag=
case $flag in
-U_FORTIFY_SOURCE|-D_FORTIFY_SOURCE=*) ;;
-fno-rtti|-fno-exceptions|-Wmissing-format-attribute|-fstack-protector*) ;;
-ffortify=*|-Wall|-m32|-m64) ;;
%ifarch %ix86
# -mcpu is superseded by -mtune but -mtune is not supported by
# our bootstrap compiler. -mcpu gives a warning that stops
# the build process, so remove it for now. Also remove all other
# -march and -mtune flags. They are superseded by proper
# default compiler settings now.
-mcpu=i?86|-march=i?86|-mtune=i?86) ;;
%endif
%ifarch s390 s390x
-fsigned-char) ;;
-O1) add_flag=-O2 ;;
%endif
%if 0%{?gcc_target_arch:1}
# Kill all -march/tune/cpu because that screws building the target libs
-march=*|-mtune=*|-mcpu=*) ;;
%endif
*) add_flag=$flag ;;
esac
if test -n "$add_flag"; then
optflags+=" $add_flag"
case $add_flag in
# Filter out -Werror=return-type for D (only valid for C and C++)
-Werror=return-type) ;;
*) optflags_d+=" $add_flag" ;;
esac
fi
done
languages=c
%if %{build_cp}
languages=$languages,c++
%endif
%if %{build_objc}
languages=$languages,objc
%endif
%if %{build_fortran}
languages=$languages,fortran
%endif
%if %{build_objcp}
languages=$languages,obj-c++
%endif
%if %{build_ada}
languages=$languages,ada
%endif
%if %{build_go}
languages=$languages,go
%endif
%if %{build_d}
languages=$languages,d
%endif
%if %{build_jit}
languages=$languages,jit
%endif
%if %{build_rust}
languages=$languages,rust
%endif
%if %{build_m2}
languages=$languages,m2
%endif
# In general we want to ship release checking enabled compilers
# which is the default for released compilers
#ENABLE_CHECKING="--enable-checking=yes"
ENABLE_CHECKING="--enable-checking=release"
#ENABLE_CHECKING=""
# Work around tail/head -1 changes
export _POSIX2_VERSION=199209
%if "%{TARGET_ARCH}" == "amdgcn"
mkdir -p target-tools/bin
ln -s /usr/bin/llvm-ar-%{product_libs_llvm_ver}* target-tools/bin/amdgcn-amdhsa-ar
ln -s /usr/bin/llvm-mc-%{product_libs_llvm_ver}* target-tools/bin/amdgcn-amdhsa-as
ln -s /usr/bin/lld-%{product_libs_llvm_ver}* target-tools/bin/amdgcn-amdhsa-ld
ln -s /usr/bin/llvm-nm-%{product_libs_llvm_ver}* target-tools/bin/amdgcn-amdhsa-nm
ln -s /usr/bin/llvm-ranlib-%{product_libs_llvm_ver}* target-tools/bin/amdgcn-amdhsa-ranlib
export PATH="`pwd`/target-tools/bin:$PATH"
%endif
%if "%{hostsuffix}" != ""
mkdir -p host-tools/bin
# Using the host gnatmake like
# CC="gcc%%{hostsuffix}" GNATBIND="gnatbind%%{hostsuffix}"
# GNATMAKE="gnatmake%%{hostsuffix}"
# doesn't work due to PR33857, so an un-suffixed gnatmake has to be
# available
%if %{build_ada}
cp -a /usr/bin/gnatmake%{hostsuffix} host-tools/bin/gnatmake
cp -a /usr/bin/gnatlink%{hostsuffix} host-tools/bin/gnatlink
cp -a /usr/bin/gnatbind%{hostsuffix} host-tools/bin/gnatbind
%endif
cp -a /usr/bin/gcc%{hostsuffix} host-tools/bin/gcc
cp -a /usr/bin/g++%{hostsuffix} host-tools/bin/g++
ln -sf /usr/%{_lib} host-tools/%{_lib}
export PATH="`pwd`/host-tools/bin:$PATH"
%endif
%if %{build_d} && %{suse_version} < 1550
# We are using gcc11-d to bootstrap d
export GDC=gdc-11
%endif
# libsanitizer needs <crypt.h> and since the glibc/libxcrypt split
# we don't have that yet in a pure cross environment
%if 0%{?gcc_target_arch:1}
CONFARGS="$CONFARGS --disable-libsanitizer"
%endif
export CARGO=/bin/true
../configure \
CFLAGS="$optflags" \
CXXFLAGS="$optflags" \
XCFLAGS="$optflags" \
TCFLAGS="$optflags" \
GDCFLAGS="$optflags_d" \
--prefix=%{_prefix} \
--infodir=%{_infodir} \
--mandir=%{_mandir} \
--libdir=%{_libdir} \
--libexecdir=%{_libdir} \
--enable-languages=$languages \
%if %{build_nvptx} || %{build_gcn}
--enable-offload-targets=\
%if %{build_nvptx}
nvptx-none,\
%endif
%if %{build_gcn}
amdgcn-amdhsa,\
%endif
--enable-offload-defaulted \
%endif
%if %{build_nvptx}
--without-cuda-driver \
%endif
%if %{build_jit}
--enable-host-shared \
%endif
$ENABLE_CHECKING \
--disable-werror \
--with-gxx-include-dir=%{_prefix}/include/c++/%{gcc_dir_version} \
--with-libstdcxx-zoneinfo=%{_datadir}/zoneinfo \
--enable-ssp \
--disable-libssp \
%if 0%{!?build_libvtv:1}
--disable-libvtv \
%endif
%if 0%{suse_version} >= 1500
--enable-cet=auto \
%else
--disable-cet \
%endif
--disable-libcc1 \
%if %{enable_plugins}
--enable-plugin \
%else
--disable-plugin \
%endif
--with-bugurl="https://bugs.opensuse.org/" \
--with-pkgversion="SUSE Linux" \
%if 0%{?sysroot:1}
--with-slibdir=%{sysroot}/%{_lib} \
%else
--with-slibdir=/%{_lib} \
%endif
--with-system-zlib \
--enable-libstdcxx-allocator=new \
--disable-libstdcxx-pch \
%if 0%{suse_version} <= 1320
--with-default-libstdcxx-abi=gcc4-compatible \
%endif
%if %{build_d}
--enable-libphobos \
%endif
--enable-version-specific-runtime-libs \
--with-gcc-major-version-only \
%if 0%{!?gcc_target_arch:1}
--enable-linker-build-id \
%else
%if 0%{?gcc_target_glibc:1}
--enable-linker-build-id \
%endif
%endif
--enable-linux-futex \
%ifarch %ix86 x86_64 ppc ppc64 ppc64le %arm aarch64 s390 s390x %sparc
--enable-gnu-indirect-function \
%endif
--program-suffix=%{binsuffix} \
%ifarch %{disable_multilib_arch}
--disable-multilib \
%endif
%if 0%{!?gcc_target_arch:1}
%ifarch ia64
--with-system-libunwind \
%else
--without-system-libunwind \
%endif
%endif
%if 0%{?gcc_target_arch:1}
--program-prefix=%{gcc_target_arch}- \
--target=%{gcc_target_arch} \
--disable-nls \
%if 0%{?sysroot:1}
--with-sysroot=%sysroot \
%endif
%if 0%{?build_sysroot:1}
--with-build-sysroot=%{build_sysroot} \
%else
%if 0%{?sysroot:1}
--with-build-sysroot=%{sysroot} \
%endif
%endif
%if 0%{?binutils_os:1}
--with-build-time-tools=/usr/%{binutils_os}/bin \
%endif
%if 0%{?gcc_target_newlib}
--with-newlib \
%if 0%{?gcc_libc_bootstrap:1}
--disable-gcov \
%endif
%else
%if 0%{?gcc_libc_bootstrap:1}
--disable-gcov --disable-threads --disable-shared \
--disable-libmudflap --disable-libssp --disable-libgomp \
--disable-libquadmath --disable-libatomic \
--without-headers --with-newlib \
%endif
%endif
%if "%{TARGET_ARCH}" == "bpf"
--disable-gcov \
%endif
%if "%{TARGET_ARCH}" == "spu"
--with-gxx-include-dir=%sysroot/include/c++/%{gcc_dir_version} \
--with-newlib \
%endif
%if "%{TARGET_ARCH}" == "nvptx"
--enable-as-accelerator-for=%{GCCDIST} \
--disable-sjlj-exceptions \
--enable-newlib-io-long-long \
%endif
%if "%{TARGET_ARCH}" == "amdgcn"
--enable-as-accelerator-for=%{GCCDIST} \
--enable-libgomp \
%endif
%if "%{TARGET_ARCH}" == "avr"
--enable-lto \
--without-gxx-include-dir \
--with-native-system-header-dir=/include \
%endif
%endif
%if "%{TARGET_ARCH}" == "arm-none"
--enable-multilib \
--with-multilib-list=aprofile,rmprofile \
--disable-decimal-float \
--disable-libffi \
--disable-libgomp \
--disable-libmudflap \
--disable-libquadmath \
--disable-shared \
--disable-threads \
--disable-tls \
%endif
%if "%{TARGET_ARCH}" == "armv6hl" || "%{TARGET_ARCH}" == "arm"
--with-cpu=arm1176jzf-s \
--with-float=hard \
--with-abi=aapcs-linux \
--with-fpu=vfpv2 \
--disable-sjlj-exceptions \
%endif
%if "%{TARGET_ARCH}" == "armv7hl"
--with-cpu=generic-armv7-a \
--with-float=hard \
--with-abi=aapcs-linux \
--with-fpu=vfpv3-d16 \
--disable-sjlj-exceptions \
%endif
%if "%{TARGET_ARCH}" == "aarch64"
--enable-fix-cortex-a53-835769 \
--enable-fix-cortex-a53-843419 \
%endif
%if "%{TARGET_ARCH}" == "powerpc64le"
%if 0%{?cross_arch:1}
--with-glibc-version=2.32 \
%endif
%if %{suse_version} >= 1600 && !0%{?is_opensuse}
--with-cpu=power9 \
--with-tune=power9 \
%else
%if %{suse_version} >= 1350
--with-cpu=power8 \
--with-tune=power9 \
%else
--with-cpu=power8 \
--with-tune=power8 \
%endif
%endif
%if %{suse_version} > 1500
--with-long-double-format=ieee \
%else
--with-long-double-format=ibm \
%endif
--enable-secureplt \
--with-long-double-128 \
--enable-targets=powerpcle-linux \
--disable-multilib \
%endif
%if "%{TARGET_ARCH}" == "powerpc" || "%{TARGET_ARCH}" == "powerpc64"
%if "%{TARGET_ARCH}" == "powerpc"
--with-cpu=default32 \
%endif
--with-cpu-64=power4 \
--enable-secureplt \
--with-long-double-128 \
%endif
%if "%{TARGET_ARCH}" == "sparc64"
--with-cpu=ultrasparc \
--with-long-double-128 \
%endif
%if "%{TARGET_ARCH}" == "sparc"
--with-cpu=v8 \
--with-long-double-128 \
%endif
%if "%{TARGET_ARCH}" == "i586"
%if %{suse_version} >= 1600 && !0%{?is_opensuse}
--with-arch-32=x86-64-v2 \
%else
%if 0%{?sle_version:%sle_version} >= 150000
--with-arch-32=x86-64 \
%else
--with-arch-32=i586 \
%endif
%endif
--with-tune=generic \
%endif
%if "%{TARGET_ARCH}" == "x86_64"
%ifnarch %{disable_multilib_arch}
--enable-multilib \
%if %{suse_version} >= 1600 && !0%{?is_opensuse}
--with-arch-32=x86-64-v2 \
%else
--with-arch-32=x86-64 \
%endif
%endif
%if %{suse_version} >= 1600 && !0%{?is_opensuse}
--with-arch=x86-64-v2 \
%endif
--with-tune=generic \
%endif
%if "%{TARGET_ARCH}" == "s390" || "%{TARGET_ARCH}" == "s390x"
%if %{suse_version} >= 1600 && !0%{?is_opensuse}
--with-tune=z14 --with-arch=z14 \
%else
--with-tune=zEC12 --with-arch=z196 \
%endif
--with-long-double-128 \
--enable-decimal-float \
%if 0%{?cross_arch:1}
--disable-multilib \
%endif
%endif
%if "%{TARGET_ARCH}" == "m68k"
--disable-multilib \
%endif
%if "%{TARGET_ARCH}" == "riscv64"
--disable-multilib \
%endif
%if %{with bootstrap}
%if %{use_lto_bootstrap} && !0%{?building_testsuite:1}
--with-build-config=bootstrap-lto-lean \
%endif
%else
--disable-bootstrap \
%endif
--enable-link-serialization \
$CONFARGS \
--build=%{GCCDIST} \
--host=%{GCCDIST} || \
{
rc=$?;
echo "------- BEGIN config.log ------";
%{__cat} config.log;
echo "------- END config.log ------";
exit $rc;
}
%if 0%{?qemu_user_space_build}
# Tell qemu to use the stack size that gcc is trying to use
# The default of 8Mb is too small for some big files like insn-opinit.cc
export QEMU_STACK_SIZE=64M
%endif
STAGE1_FLAGS="-g -O2"
%if 0%{?do_profiling} && !0%{?building_testsuite:1}
%ifarch x86_64 %ix86 ppc64le s390x aarch64
%if %{with bootstrap}
%define use_pgo_bootstrap 1
%endif
%endif
%endif
%{?use_pgo_bootstrap:setarch `arch` -R} make %{?make_output_sync} %{?use_pgo_bootstrap:profiledbootstrap} STAGE1_CFLAGS="$STAGE1_FLAGS" BOOT_CFLAGS="$RPM_OPT_FLAGS" %{?_smp_mflags}
make info
%if 0%{?run_tests:1}
echo "Run testsuite"
(make -C %{GCCDIST}/libstdc++-v3 check-abi || true)
mv %{GCCDIST}/libstdc++-v3/testsuite/libstdc++.log %{GCCDIST}/libstdc++-v3/testsuite/libstdc++-abi.log
mv %{GCCDIST}/libstdc++-v3/testsuite/libstdc++.sum %{GCCDIST}/libstdc++-v3/testsuite/libstdc++-abi.sum
# asan needs a whole shadow address space
ulimit -v unlimited || true
make -k check %{?_smp_mflags} || true
mkdir ../testresults
../contrib/test_summary | tee ../testresults/test_summary.txt
%endif
%install
# Make sure libtool re-linking libasan at install time doesn't drop the
# libstdc++ reference to make asan of C++ modules in python work
export SUSE_ASNEEDED=0
export NO_BRP_CHECK_BYTECODE_VERSION=true
cd obj-%{GCCDIST}
%if 0%{?run_tests:1}
cp `find . -name "*.sum"` ../testresults/
cp `find . -name "*.log" \! -name "config.log" | grep -v 'acats.\?/tests' | grep -v libbacktrace` ../testresults/
chmod 644 ../testresults/*
%endif
%if 0%{?run_tests:1}
%files
%defattr(-,root,root)
%doc testresults/test_summary.txt
%doc testresults/*.sum
%doc testresults/*.log
%endif
%changelog

269
gcc14.changes Normal file
View File

@ -0,0 +1,269 @@
-------------------------------------------------------------------
Thu Aug 22 10:37:05 UTC 2024 - Richard Biener <rguenther@suse.com>
- Re-enable cross compiler builds on i586.
-------------------------------------------------------------------
Thu Aug 1 09:33:39 UTC 2024 - Richard Biener <rguenther@suse.com>
- Update to GCC 14.2.0 release, c035a7c30c310ff928988cbcf, git10526
- Add libquadmath0-devel-gcc14 sub-package to allow installing
quadmath.h and SO link without installing the fortran frontend
- Drop SLE11 compatibility %selfconflict wrapper, drop various
conditions gating SLE11 build support
-------------------------------------------------------------------
Tue Jul 23 13:59:35 UTC 2024 - Richard Biener <rguenther@suse.com>
- Update to gcc-14 branch head, a544898f6dd6a1689bb25abfd, git10504
* GCC 14.2 release candidate.
-------------------------------------------------------------------
Fri Jun 21 12:18:10 UTC 2024 - Richard Biener <rguenther@suse.com>
- Update to gcc-14 branch head, 272e8c90af527fc1d0055ad0f, git10335
* picks first batch of post-release fixes
-------------------------------------------------------------------
Tue May 7 07:10:32 UTC 2024 - Richard Biener <rguenther@suse.com>
- Update to GCC 14.1 release.
-------------------------------------------------------------------
Tue Apr 30 10:34:29 UTC 2024 - Richard Biener <rguenther@suse.com>
- Update to gcc-14 branch head, 7a00c459cbb913ac165a39d34, git10154
* GCC 14.1 RC1
-------------------------------------------------------------------
Thu Apr 18 07:00:33 UTC 2024 - Richard Biener <rguenther@suse.com>
- Update to trunk head, 7c2a9dbcc2c1cb1563774068c59d5e09e, git10008
-------------------------------------------------------------------
Wed Apr 10 06:06:05 UTC 2024 - Richard Biener <rguenther@suse.com>
- Update to trunk head, 109f1b28fc94c93096506e3df0c25e331, git9885
- Package Modula-2 info files.
- Install/Remove Modula-2 and D info files.
-------------------------------------------------------------------
Tue Apr 9 13:41:50 UTC 2024 - Richard Biener <rguenther@suse.com>
- Add gcc13-pr101523.patch to avoid combine spending too much
compile-time and memory doing nothing on s390x. [boo#1188441]
-------------------------------------------------------------------
Wed Mar 27 12:13:22 UTC 2024 - Richard Biener <rguenther@suse.com>
- Update to trunk head, 0b02da5b99e89347f5f8bf875ec8318f84, git9687
- Fix install link to amdgcn-amdhsa-ld.
-------------------------------------------------------------------
Mon Mar 25 14:50:07 UTC 2024 - Richard Biener <rguenther@suse.com>
- Add newlib-gcn-iolock.diff to fix locking for I/O on gcn offload
targets.
-------------------------------------------------------------------
Mon Mar 18 14:32:42 UTC 2024 - Richard Biener <rguenther@suse.com>
- Remove timezone Recommends from the libstdc++6 package. [boo#1221601]
-------------------------------------------------------------------
Wed Mar 13 08:17:35 UTC 2024 - Richard Biener <rguenther@suse.com>
- Revert libgccjit dependency change. [boo#1220724]
-------------------------------------------------------------------
Thu Mar 7 10:08:08 UTC 2024 - Richard Biener <rguenther@suse.com>
- Update to trunk head, b209d905f5ce1fa9d76ce634fd54245ff3, git9355
-------------------------------------------------------------------
Tue Mar 5 14:35:38 UTC 2024 - Richard Biener <rguenther@suse.com>
- Fix libgccjit-devel dependency, a newer shared library is OK.
- Fix libgccjit dependency, the corresponding compiler isn't required.
-------------------------------------------------------------------
Tue Feb 13 08:04:07 UTC 2024 - Richard Biener <rguenther@suse.com>
- Update to trunk head, 4a1cd5560b9b545eb848eb1d1e06d345fb, git8957
* bumps libgphobos and libgdrundime SONAME
- Use %patch -P N instead of %patchN
- Refresh gcc44-rename-info-files.patch
-------------------------------------------------------------------
Wed Feb 7 12:47:27 UTC 2024 - Richard Biener <rguenther@suse.com>
- Update to trunk head, 5c3ba60024fedc6b3d374ebb071bcf5b3e, git8840
- Disable epiphany cross compiler since it fails building.
-------------------------------------------------------------------
Tue Feb 6 07:43:25 UTC 2024 - Richard Biener <rguenther@suse.com>
- Update to trunk head, c5d34912ad576be1ef19be92f7eabde54b, git8817
* bumps libgo SONAME
-------------------------------------------------------------------
Mon Feb 5 14:24:16 UTC 2024 - Richard Biener <rguenther@suse.com>
- Use %{_target_cpu} to determine host and build.
-------------------------------------------------------------------
Mon Jan 29 08:34:57 UTC 2024 - Richard Biener <rguenther@suse.com>
- Update to trunk head, b702dc980215074a06535e3aa52a766bef, git8486
- Refresh gcc7-remove-Wexpansion-to-defined-from-Wextra.patch
- Up requirement to llvm15 when building GCN offload compiler, needed
for gfx1100 support.
- Remove obsolete gcc11-amdgcn-disable-hot-cold-partitioning.patch and
gcc10-amdgcn-llvm-as.patch patches.
-------------------------------------------------------------------
Mon Jan 22 09:50:35 UTC 2024 - Richard Biener <rguenther@suse.com>
- Update to trunk head, 86f3cbdaa6f60eaff1cdb4ab2f1a9bc796, git8330
- Package more risc-v headers
- Add cross-X-newlib-devel requires to newlib cross compilers.
[boo#1219031]
- Re-enable AutoReqProv for cross packages but filter files processed
via __requires_exclude_from and __provides_exclude_from.
[boo#1219031]
-------------------------------------------------------------------
Fri Jan 19 09:55:53 UTC 2024 - Richard Biener <rguenther@suse.com>
- Package m2rte.so plugin in the gcc14-m2 sub-package rather than
in gcc13-devel. [boo#1210959]
- Require libstdc++6-devel-gcc14 from gcc14-m2 as m2 programs
are linked against libstdc++6.
- Fixup rust packaging for the rust1 to crab1 rename.
- Build rust only for openSUSE Tumbleweed.
-------------------------------------------------------------------
Thu Jan 18 13:48:04 UTC 2024 - Richard Biener <rguenther@suse.com>
- Update to trunk head, a6bf09f65aed44d36acaa511e552783bfb, git8231
-------------------------------------------------------------------
Tue Jan 16 09:42:25 UTC 2024 - Andreas Schwab <schwab@suse.de>
- Enable cross compilers on riscv64
-------------------------------------------------------------------
Fri Jan 12 13:30:13 UTC 2024 - Richard Biener <rguenther@suse.com>
- Restrict general cross-compiler builds to ppc64le, x86_64, s390x
and aarch64 hosts.
-------------------------------------------------------------------
Fri Jan 12 09:34:37 UTC 2024 - Richard Biener <rguenther@suse.com>
- Update embedded newlib to 4.4.0.20231231.
-------------------------------------------------------------------
Fri Jan 12 00:19:27 UTC 2024 - Toolchain Bot <mjambor@suse.de>
- Bump to 1a80e9558dd7fed1a9d22b3606489f72e4dd8c20, git7159.
-------------------------------------------------------------------
Wed Jan 3 18:16:29 UTC 2024 - Andreas Schwab <schwab@suse.de>
- Add riscv64 to tsan_arch and lsan_arch
-------------------------------------------------------------------
Wed Jan 3 00:18:16 UTC 2024 - Toolchain Bot <mjambor@suse.de>
- Bump to 152cd65bf468c378e1e06ac72e443453137034b5, git6886.
-------------------------------------------------------------------
Tue Dec 5 11:42:26 UTC 2023 - Andreas Schwab <schwab@suse.de>
- Update libm2_sover
-------------------------------------------------------------------
Mon Dec 4 01:01:52 UTC 2023 - Toolchain Bot <mjambor@suse.de>
- Bump to 833819e75a67614049ca75a3d471d45724fadf39, git6097.
-------------------------------------------------------------------
Thu Sep 28 10:01:02 UTC 2023 - Andreas Schwab <schwab@suse.de>
- Tell qemu to use a bigger guest stack size
-------------------------------------------------------------------
Wed Sep 27 23:29:37 UTC 2023 - Toolchain Bot <mjambor@suse.de>
- Bump to 1fab05a885a308c19cf42b72fd36805ddf27fdc8, git4300.
-------------------------------------------------------------------
Fri Sep 1 23:18:06 UTC 2023 - Toolchain Bot <mjambor@suse.de>
- Bump to 6f06152541d62ae7c8579b7d7bf552be19e15b05, git3633.
-------------------------------------------------------------------
Fri Aug 18 14:03:36 UTC 2023 - Michal Suchanek <msuchanek@suse.com>
- Raise Power architecture baseline to Power9 only for ALP (boo#1214915).
-------------------------------------------------------------------
Mon Jul 31 09:41:05 UTC 2023 - Andreas Schwab <schwab@suse.de>
- Filter out -Werror=return-type from D compile flags
-------------------------------------------------------------------
Sun Jul 30 23:13:52 UTC 2023 - Toolchain Bot <mjambor@suse.de>
- Bump to c9434ea40e20584a44a0b6fc8659ee983d5f2dd2, git2868.
-------------------------------------------------------------------
Thu May 4 10:20:16 UTC 2023 - Martin Liška <mliska@suse.cz>
- Remove upstreamed patch riscv-pthread.patch.
-------------------------------------------------------------------
Thu May 4 09:30:28 UTC 2023 - Toolchain Bot <mjambor@suse.de>
- Bump to 93c26deab98fc80b616a1c53c324a88f61036f53, git473.
-------------------------------------------------------------------
Thu Apr 27 07:03:42 UTC 2023 - Martin Liška <mliska@suse.cz>
- Remove upstreamed patch riscv-atomic.patch.
-------------------------------------------------------------------
Thu Apr 27 06:00:46 UTC 2023 - Toolchain Bot <mjambor@suse.de>
- Bump to 95d4c0d2e6318aef88ba0bc607dfc1ec6b7a612f, git283.
-------------------------------------------------------------------
Mon Apr 17 12:26:48 UTC 2023 - Martin Liška <mliska@suse.cz>
- New package, inherits from gcc13
- Take patches inherited from GCC 13.
* gcc-add-defaultsspec.diff, add the ability to provide a specs
file that is read by default
* tls-no-direct.diff, avoid direct %fs references on x86 to not
slow down Xen
* gcc43-no-unwind-tables.diff, do not produce unwind tables for
CRT files
* gcc41-ppc32-retaddr.patch, fix expansion of __builtin_return_addr
for ppc, just a testcase
* gcc44-textdomain.patch, make translation files version specific
and adjust textdomain to find them
* gcc44-rename-info-files.patch, fix cross-references in info files
when renaming them to be version specific
* gcc48-libstdc++-api-reference.patch, fix link in the installed
libstdc++ html documentation
* gcc48-remove-mpfr-2.4.0-requirement.patch, make GCC work with
earlier mpfr versions on old products
* gcc5-no-return-gcc43-workaround.patch, make build work with
host gcc 4.3
* gcc7-remove-Wexpansion-to-defined-from-Wextra.patch, removes
new warning from -Wextra
* gcc7-avoid-fixinc-error.diff
* gcc9-reproducible-builds-buildid-for-checksum.patch
* gcc9-reproducible-builds.patch
* gcc10-amdgcn-llvm-as.patch

4172
gcc14.spec Normal file

File diff suppressed because it is too large Load Diff

91
gcc41-ppc32-retaddr.patch Normal file
View File

@ -0,0 +1,91 @@
2005-11-28 Jakub Jelinek <jakub@redhat.com>
* config/rs6000/rs6000.c (rs6000_return_addr): If COUNT == 0,
read word RETURN_ADDRESS_OFFSET bytes above arg_pointer_rtx
instead of doing an extran indirection from frame_pointer_rtx.
* gcc.dg/20051128-1.c: New test.
#Index: gcc/config/rs6000/rs6000.cc
#===================================================================
#--- gcc/config/rs6000/rs6000.cc.orig 2013-11-26 15:42:33.000000000 +0100
#+++ gcc/config/rs6000/rs6000.cc 2013-11-26 16:44:14.566089231 +0100
#@@ -20878,18 +20878,22 @@ rs6000_return_addr (int count, rtx frame
if (count != 0
|| ((DEFAULT_ABI == ABI_V4 || DEFAULT_ABI == ABI_DARWIN) && flag_pic))
{
+ rtx x;
cfun->machine->ra_needs_full_frame = 1;
- return
- gen_rtx_MEM
- (Pmode,
- memory_address
- (Pmode,
- plus_constant (Pmode,
- copy_to_reg
- (gen_rtx_MEM (Pmode,
- memory_address (Pmode, frame))),
- RETURN_ADDRESS_OFFSET)));
+ if (count == 0)
+ {
+ gcc_assert (frame == frame_pointer_rtx);
+ x = arg_pointer_rtx;
+ }
+ else
+ {
+ x = memory_address (Pmode, frame);
+ x = copy_to_reg (gen_rtx_MEM (Pmode, x));
+ }
+
+ x = plus_constant (Pmode, x, RETURN_ADDRESS_OFFSET);
+ return gen_rtx_MEM (Pmode, memory_address (Pmode, x));
}
cfun->machine->ra_need_lr = 1;
Index: gcc/testsuite/gcc.dg/20051128-1.c
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ gcc/testsuite/gcc.dg/20051128-1.c 2013-11-26 16:44:14.566089231 +0100
@@ -0,0 +1,41 @@
+/* { dg-do run } */
+/* { dg-options "-O2 -fpic" } */
+
+extern void exit (int);
+extern void abort (void);
+
+int b;
+
+struct A
+{
+ void *pad[147];
+ void *ra, *h;
+ long o;
+};
+
+void
+__attribute__((noinline))
+foo (struct A *a, void *x)
+{
+ __builtin_memset (a, 0, sizeof (a));
+ if (!b)
+ exit (0);
+}
+
+void
+__attribute__((noinline))
+bar (void)
+{
+ struct A a;
+
+ __builtin_unwind_init ();
+ foo (&a, __builtin_return_address (0));
+}
+
+int
+main (void)
+{
+ bar ();
+ abort ();
+ return 0;
+}

View File

@ -0,0 +1,13 @@
Index: libgcc/Makefile.in
===================================================================
--- libgcc/Makefile.in.orig 2015-12-14 11:33:03.225790694 +0100
+++ libgcc/Makefile.in 2015-12-17 15:09:45.415136693 +0100
@@ -301,7 +301,7 @@ CRTSTUFF_CFLAGS = -O2 $(GCC_CFLAGS) $(INCLUDES) $(MULTILIB_CFLAGS) -g0 \
$(NO_PIE_CFLAGS) -finhibit-size-directive -fno-inline -fno-exceptions \
-fno-zero-initialized-in-bss -fno-toplevel-reorder -fno-tree-vectorize \
-fbuilding-libgcc -fno-stack-protector $(FORCE_EXPLICIT_EH_REGISTRY) \
- $(INHIBIT_LIBC_CFLAGS) $(USE_TM_CLONE_REGISTRY)
+ $(INHIBIT_LIBC_CFLAGS) $(USE_TM_CLONE_REGISTRY) -fno-unwind-tables -fno-asynchronous-unwind-tables
# Extra flags to use when compiling crt{begin,end}.o.
CRTSTUFF_T_CFLAGS =

View File

@ -0,0 +1,708 @@
#! /bin/sh -e
# DP: Allow transformations on info file names. Reference the
# DP: transformed info file names in the texinfo files.
dir=
if [ $# -eq 3 -a "$2" = '-d' ]; then
pdir="-d $3"
dir="$3/"
elif [ $# -ne 1 ]; then
echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
exit 1
fi
case "$1" in
-patch)
patch $pdir -f --no-backup-if-mismatch -p0 < $0
;;
-unpatch)
patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
;;
*)
echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
exit 1
esac
exit 0
gcc/ChangeLog:
2004-02-17 Matthias Klose <doko@debian.org>
* Makefile.in: Allow transformations on info file names.
Define MAKEINFODEFS, macros to pass transformated info file
names to makeinfo.
* doc/cpp.texi: Use macros defined in MAKEINFODEFS for references.
* doc/cppinternals.texi: Likewise.
* doc/extend.texi: Likewise.
* doc/gcc.texi: Likewise.
* doc/gccint.texi: Likewise.
* doc/invoke.texi: Likewise.
* doc/libgcc.texi: Likewise.
* doc/makefile.texi: Likewise.
* doc/passes.texi: Likewise.
* doc/sourcebuild.texi: Likewise.
* doc/standards.texi: Likewise.
* doc/trouble.texi: Likewise.
gcc/fortran/ChangeLog:
* Make-lang.in: Allow transformations on info file names.
Pass macros of transformated info file defined in MAKEINFODEFS
names to makeinfo.
* gfortran.texi: Use macros defined in MAKEINFODEFS for references.
gcc/java/ChangeLog:
* Make-lang.in: Allow transformations on info file names.
Pass macros of transformated info file defined in MAKEINFODEFS
names to makeinfo.
* gcj.texi: Use macros defined in MAKEINFODEFS for references.
---
gcc/Makefile.in | 74 ++++++++++++++++++++++++++++++++++++----------
gcc/ada/gnat-style.texi | 2 -
gcc/ada/gnat_rm.texi | 2 -
gcc/ada/gnat_ugn.texi | 2 -
gcc/doc/cpp.texi | 2 -
gcc/doc/cppinternals.texi | 2 -
gcc/doc/extend.texi | 2 -
gcc/doc/gcc.texi | 8 ++--
gcc/doc/gccint.texi | 4 +-
gcc/doc/install.texi | 2 -
gcc/doc/invoke.texi | 10 +++---
gcc/doc/libgcc.texi | 2 -
gcc/doc/makefile.texi | 2 -
gcc/doc/passes.texi | 2 -
gcc/doc/standards.texi | 4 +-
gcc/fortran/Make-lang.in | 11 +++---
gcc/fortran/gfortran.texi | 2 -
gcc/java/Make-lang.in | 19 +++++++++--
gcc/java/gcj.texi | 20 ++++++------
libgomp/Makefile.am | 13 ++++----
libgomp/Makefile.in | 14 ++++----
libgomp/libgomp.texi | 2 -
22 files changed, 131 insertions(+), 70 deletions(-)
diff --git a/gcc/Makefile.in b/gcc/Makefile.in
index d8b76d83d68..4f9c274ee38 100644
--- a/gcc/Makefile.in
+++ b/gcc/Makefile.in
@@ -3333,8 +3333,29 @@ install-no-fixedincludes:
no-info: info
endif
-INFOFILES = doc/cpp.info doc/gcc.info doc/gccint.info \
- doc/gccinstall.info doc/cppinternals.info
+INFO_CPP_NAME = $(shell echo cpp|sed '$(program_transform_name)')
+INFO_GCC_NAME = $(shell echo gcc|sed '$(program_transform_name)')
+INFO_GXX_NAME = $(shell echo g++|sed '$(program_transform_name)')
+INFO_GCCINT_NAME = $(shell echo gccint|sed '$(program_transform_name)')
+INFO_GCCINSTALL_NAME = $(shell echo gccinstall|sed '$(program_transform_name)')
+INFO_CPPINT_NAME = $(shell echo cppinternals|sed '$(program_transform_name)')
+
+INFO_FORTRAN_NAME = $(shell echo gfortran|sed '$(program_transform_name)')
+INFO_GCJ_NAME = $(shell echo gcj|sed '$(program_transform_name)')
+INFO_GDC_NAME = $(shell echo gdc|sed '$(program_transform_name)')
+
+INFOFILES = doc/$(INFO_CPP_NAME).info doc/$(INFO_GCC_NAME).info \
+ doc/$(INFO_GCCINT_NAME).info \
+ doc/$(INFO_GCCINSTALL_NAME).info doc/$(INFO_CPPINT_NAME).info
+
+MAKEINFODEFS = -D 'fncpp $(INFO_CPP_NAME)' -D 'fngcc $(INFO_GCC_NAME)' \
+ -D 'fngxx $(INFO_GXX_NAME)' \
+ -D 'fngccint $(INFO_GCCINT_NAME)' \
+ -D 'fngccinstall $(INFO_GCCINSTALL_NAME)' \
+ -D 'fncppint $(INFO_CPPINT_NAME)' \
+ -D 'fngfortran $(INFO_FORTRAN_NAME)' \
+ -D 'fngcj $(INFO_GCJ_NAME)' \
+ -D 'fngdc $(INFO_GDC_NAME)'
info: $(INFOFILES) lang.info @GENINSRC@ srcinfo lang.srcinfo
@@ -3390,21 +3411,41 @@ gcc-vers.texi: $(BASEVER) $(DEVPHASE)
# patterns. To use them, put each of the specific targets with its
# specific dependencies but no build commands.
-doc/cpp.info: $(TEXI_CPP_FILES)
-doc/gcc.info: $(TEXI_GCC_FILES)
-doc/gccint.info: $(TEXI_GCCINT_FILES)
-doc/cppinternals.info: $(TEXI_CPPINT_FILES)
-
+# Generic entry to handle info files, which are not renamed (currently Ada)
doc/%.info: %.texi
if [ x$(BUILD_INFO) = xinfo ]; then \
$(MAKEINFO) $(MAKEINFOFLAGS) -I . -I $(gcc_docdir) \
-I $(gcc_docdir)/include -o $@ $<; \
fi
+doc/$(INFO_CPP_NAME).info: $(TEXI_CPP_FILES)
+ if [ x$(BUILD_INFO) = xinfo ]; then \
+ $(MAKEINFO) $(MAKEINFOFLAGS) $(MAKEINFODEFS) -I $(gcc_docdir) \
+ -I $(gcc_docdir)/include -o $@ $<; \
+ fi
+
+doc/$(INFO_GCC_NAME).info: $(TEXI_GCC_FILES)
+ if [ x$(BUILD_INFO) = xinfo ]; then \
+ $(MAKEINFO) $(MAKEINFOFLAGS) $(MAKEINFODEFS) -I $(gcc_docdir) \
+ -I $(gcc_docdir)/include -o $@ $<; \
+ fi
+
+doc/$(INFO_GCCINT_NAME).info: $(TEXI_GCCINT_FILES)
+ if [ x$(BUILD_INFO) = xinfo ]; then \
+ $(MAKEINFO) $(MAKEINFOFLAGS) $(MAKEINFODEFS) -I $(gcc_docdir) \
+ -I $(gcc_docdir)/include -o $@ $<; \
+ fi
+
+doc/$(INFO_CPPINT_NAME).info: $(TEXI_CPPINT_FILES)
+ if [ x$(BUILD_INFO) = xinfo ]; then \
+ $(MAKEINFO) $(MAKEINFOFLAGS) $(MAKEINFODEFS) -I $(gcc_docdir) \
+ -I $(gcc_docdir)/include -o $@ $<; \
+ fi
+
# Duplicate entry to handle renaming of gccinstall.info
-doc/gccinstall.info: $(TEXI_GCCINSTALL_FILES)
+doc/$(INFO_GCCINSTALL_NAME).info: $(TEXI_GCCINSTALL_FILES)
if [ x$(BUILD_INFO) = xinfo ]; then \
- $(MAKEINFO) $(MAKEINFOFLAGS) -I $(gcc_docdir) \
+ $(MAKEINFO) $(MAKEINFOFLAGS) $(MAKEINFODEFS) -I $(gcc_docdir) \
-I $(gcc_docdir)/include -o $@ $<; \
fi
@@ -3815,11 +3856,11 @@ install-driver: installdirs xgcc$(exeext)
# $(INSTALL_DATA) might be a relative pathname, so we can't cd into srcdir
# to do the install.
install-info:: doc installdirs \
- $(DESTDIR)$(infodir)/cpp.info \
- $(DESTDIR)$(infodir)/gcc.info \
- $(DESTDIR)$(infodir)/cppinternals.info \
- $(DESTDIR)$(infodir)/gccinstall.info \
- $(DESTDIR)$(infodir)/gccint.info \
+ $(DESTDIR)$(infodir)/$(INFO_CPP_NAME).info \
+ $(DESTDIR)$(infodir)/$(INFO_GCC_NAME).info \
+ $(DESTDIR)$(infodir)/$(INFO_CPPINT_NAME).info \
+ $(DESTDIR)$(infodir)/$(INFO_GCCINSTALL_NAME).info \
+ $(DESTDIR)$(infodir)/$(INFO_GCCINT_NAME).info \
lang.install-info
$(DESTDIR)$(infodir)/%.info: doc/%.info installdirs
@@ -4058,8 +4099,11 @@ uninstall: lang.uninstall
-rm -rf $(DESTDIR)$(bindir)/$(GCOV_INSTALL_NAME)$(exeext)
-rm -rf $(DESTDIR)$(man1dir)/$(GCC_INSTALL_NAME)$(man1ext)
-rm -rf $(DESTDIR)$(man1dir)/cpp$(man1ext)
- -rm -f $(DESTDIR)$(infodir)/cpp.info* $(DESTDIR)$(infodir)/gcc.info*
- -rm -f $(DESTDIR)$(infodir)/cppinternals.info* $(DESTDIR)$(infodir)/gccint.info*
+ -rm -f $(DESTDIR)$(infodir)/$(INFO_CPP_NAME).info*
+ -rm -f $(DESTDIR)$(infodir)/$(INFO_GCC_NAME).info*
+ -rm -f $(DESTDIR)$(infodir)/$(INFO_CPPINT_NAME).info*
+ -rm -f $(DESTDIR)$(infodir)/$(INFO_GCCINT_NAME).info*
+ -rm -f $(DESTDIR)$(infodir)/$(INFO_GCCINSTALL_NAME).info*
for i in ar nm ranlib ; do \
install_name=`echo gcc-$$i|sed '$(program_transform_name)'`$(exeext) ;\
target_install_name=$(target_noncanonical)-`echo gcc-$$i|sed '$(program_transform_name)'`$(exeext) ; \
diff --git a/gcc/ada/gnat-style.texi b/gcc/ada/gnat-style.texi
index f3b1c29a24f..46bd21535cf 100644
--- a/gcc/ada/gnat-style.texi
+++ b/gcc/ada/gnat-style.texi
@@ -12,7 +12,7 @@
@finalout
@dircategory GNU Ada Tools
@direntry
-* gnat-style: (gnat-style.info). gnat-style
+* gnat-style: (gnat-style-14.info). gnat-style
@end direntry
@c %**end of header
diff --git a/gcc/ada/gnat_rm.texi b/gcc/ada/gnat_rm.texi
index 212ed3df9d8..bed8ce40548 100644
--- a/gcc/ada/gnat_rm.texi
+++ b/gcc/ada/gnat_rm.texi
@@ -12,7 +12,7 @@
@finalout
@dircategory GNU Ada Tools
@direntry
-* gnat_rm: (gnat_rm.info). gnat_rm
+* GNAT Reference Manual: (gnat_rm-14). Reference Manual for GNU Ada tools.
@end direntry
@c %**end of header
diff --git a/gcc/ada/gnat_ugn.texi b/gcc/ada/gnat_ugn.texi
index a1daff92fbe..514931ec139 100644
--- a/gcc/ada/gnat_ugn.texi
+++ b/gcc/ada/gnat_ugn.texi
@@ -12,7 +12,7 @@
@finalout
@dircategory GNU Ada Tools
@direntry
-* gnat_ugn: (gnat_ugn.info). gnat_ugn
+* User's Guide: (gnat_ugn-14).
@end direntry
@c %**end of header
diff --git a/gcc/d/Make-lang.in b/gcc/d/Make-lang.in
index 1679fb81097..6845aa67d43 100644
--- a/gcc/d/Make-lang.in
+++ b/gcc/d/Make-lang.in
@@ -247,10 +247,11 @@ D_TEXI_FILES = \
$(gcc_docdir)/include/gcc-common.texi \
gcc-vers.texi
-doc/gdc.info: $(D_TEXI_FILES)
+INFO_GDC_NAME = $(shell echo gdc|sed '$(program_transform_name)')
+doc/$(INFO_GDC_NAME).info: $(D_TEXI_FILES)
if test "x$(BUILD_INFO)" = xinfo; then \
- rm -f doc/gdc.info*; \
- $(MAKEINFO) $(MAKEINFOFLAGS) -I $(gcc_docdir) \
+ rm -f doc/$(INFO_GDC_NAME).info*; \
+ $(MAKEINFO) $(MAKEINFOFLAGS) $(MAKEINFODEFS) -I $(gcc_docdir) \
-I $(gcc_docdir)/include -o $@ $<; \
else true; fi
@@ -275,11 +276,11 @@ gdc.pod: d/gdc.texi
d.all.cross: gdc-cross$(exeext)
d.start.encap: gdc$(exeext)
d.rest.encap:
-d.info: doc/gdc.info
+d.info: doc/$(INFO_GDC_NAME).info
d.dvi: doc/gdc.dvi
d.pdf: doc/gdc.pdf
d.html: $(build_htmldir)/gdc/index.html
-d.srcinfo: doc/gdc.info
+d.srcinfo: doc/$(INFO_GDC_NAME).info
-cp -p $^ $(srcdir)/doc
d.srcextra:
@@ -320,7 +321,7 @@ d.install-common: installdirs
d.install-plugin:
-d.install-info: $(DESTDIR)$(infodir)/gdc.info
+d.install-info: $(DESTDIR)$(infodir)/$(INFO_GDC_NAME).info
d.install-pdf: doc/gdc.pdf
@$(NORMAL_INSTALL)
@@ -370,7 +371,7 @@ d.uninstall:
-rm -rf $(DESTDIR)$(bindir)/$(D_INSTALL_NAME)$(exeext)
-rm -rf $(DESTDIR)$(man1dir)/$(D_INSTALL_NAME)$(man1ext)
-rm -rf $(DESTDIR)$(bindir)/$(D_TARGET_INSTALL_NAME)$(exeext)
- -rm -rf $(DESTDIR)$(infodir)/gdc.info*
+ -rm -rf $(DESTDIR)$(infodir)/$(INFO_GDC_NAME).info*
# Clean hooks.
diff --git a/gcc/d/gdc.texi b/gcc/d/gdc.texi
index 24b6ee00478..1a35bb099e6 100644
--- a/gcc/d/gdc.texi
+++ b/gcc/d/gdc.texi
@@ -38,7 +38,7 @@ man page gfdl(7).
@format
@dircategory Software development
@direntry
-* gdc: (gdc). A GCC-based compiler for the D language
+* @value{fngdc}: (@value{fngdc}). A GCC-based compiler for the D language
@end direntry
@end format
diff --git a/gcc/doc/cpp.texi b/gcc/doc/cpp.texi
index b0a2ce3ac6b..922a1c95181 100644
--- a/gcc/doc/cpp.texi
+++ b/gcc/doc/cpp.texi
@@ -50,7 +50,7 @@ This manual contains no Invariant Sections. The Front-Cover Texts are
@ifinfo
@dircategory Software development
@direntry
-* Cpp: (cpp). The GNU C preprocessor.
+* @value{fncpp}: (@value{fncpp}). The GNU C preprocessor.
@end direntry
@end ifinfo
diff --git a/gcc/doc/cppinternals.texi b/gcc/doc/cppinternals.texi
index a8ddb5c190e..e8fe1fcf2d8 100644
--- a/gcc/doc/cppinternals.texi
+++ b/gcc/doc/cppinternals.texi
@@ -7,7 +7,7 @@
@ifinfo
@dircategory Software development
@direntry
-* Cpplib: (cppinternals). Cpplib internals.
+* @value{fncppint}: (@value{fncppint}). Cpplib internals.
@end direntry
@end ifinfo
diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi
index 3adb67aa47a..0fae318cade 100644
--- a/gcc/doc/extend.texi
+++ b/gcc/doc/extend.texi
@@ -24488,7 +24488,7 @@ want to write code that checks whether these features are available, you can
test for the GNU compiler the same way as for C programs: check for a
predefined macro @code{__GNUC__}. You can also use @code{__GNUG__} to
test specifically for GNU C++ (@pxref{Common Predefined Macros,,
-Predefined Macros,cpp,The GNU C Preprocessor}).
+Predefined Macros,@value{fncpp},The GNU C Preprocessor}).
@menu
* C++ Volatiles:: What constitutes an access to a volatile object.
diff --git a/gcc/doc/gcc.texi b/gcc/doc/gcc.texi
index b3d500d4f47..d58e57dd480 100644
--- a/gcc/doc/gcc.texi
+++ b/gcc/doc/gcc.texi
@@ -70,12 +70,12 @@ Texts being (a) (see below), and with the Back-Cover Texts being (b)
@ifnottex
@dircategory Software development
@direntry
-* gcc: (gcc). The GNU Compiler Collection.
-* g++: (gcc). The GNU C++ compiler.
-* gcov: (gcc) Gcov. @command{gcov}---a test coverage program.
-* gcov-tool: (gcc) Gcov-tool. @command{gcov-tool}---an offline gcda profile processing program.
-* gcov-dump: (gcc) Gcov-dump. @command{gcov-dump}---an offline gcda and gcno profile dump tool.
-* lto-dump: (gcc) lto-dump. @command{lto-dump}---Tool for
+* @value{fngcc}: (@value{fngcc}). The GNU Compiler Collection.
+* @value{fngxx}: (@value{fngcc}). The GNU C++ compiler.
+* gcov: (@value{fngcc}) Gcov. @command{gcov}---a test coverage program.
+* gcov-tool: (@value{fngcc}) Gcov-tool. @command{gcov-tool}---an offline gcda profile processing program.
+* gcov-dump: (@value{fngcc}) Gcov-dump. @command{gcov-dump}---an offline gcda and gcno profile dump tool.
+* lto-dump: (@value{fngcc}) Lto-dump. @command{lto-dump}---Tool for
dumping LTO object files.
@end direntry
@sp 1
@@ -135,7 +135,7 @@ version @value{version-GCC}.
The internals of the GNU compilers, including how to port them to new
targets and some information about how to write front ends for new
languages, are documented in a separate manual. @xref{Top,,
-Introduction, gccint, GNU Compiler Collection (GCC) Internals}.
+Introduction, @value{fngccint}, GNU Compiler Collection (GCC) Internals}.
@menu
* G++ and GCC:: You can compile C or C++ programs.
diff --git a/gcc/doc/gccint.texi b/gcc/doc/gccint.texi
index 33cf7fdafce..8c76bf8a0c6 100644
--- a/gcc/doc/gccint.texi
+++ b/gcc/doc/gccint.texi
@@ -49,7 +49,7 @@ Texts being (a) (see below), and with the Back-Cover Texts being (b)
@ifnottex
@dircategory Software development
@direntry
-* gccint: (gccint). Internals of the GNU Compiler Collection.
+* @value{fngccint}: (@value{fngccint}). Internals of the GNU Compiler Collection.
@end direntry
This file documents the internals of the GNU compilers.
@sp 1
@@ -81,7 +81,7 @@ write front ends for new languages. It corresponds to the compilers
@value{VERSION_PACKAGE}
@end ifset
version @value{version-GCC}. The use of the GNU compilers is documented in a
-separate manual. @xref{Top,, Introduction, gcc, Using the GNU
+separate manual. @xref{Top,, Introduction, @value{fngcc}, Using the GNU
Compiler Collection (GCC)}.
This manual is mainly a reference manual rather than a tutorial. It
diff --git a/gcc/doc/install.texi b/gcc/doc/install.texi
index 63fc949b447..a5a1b01fc55 100644
--- a/gcc/doc/install.texi
+++ b/gcc/doc/install.texi
@@ -89,7 +89,7 @@ Free Documentation License}''.
@end ifinfo
@dircategory Software development
@direntry
-* gccinstall: (gccinstall). Installing the GNU Compiler Collection.
+* @value{fngccinstall}: (@value{fngccinstall}). Installing the GNU Compiler Collection.
@end direntry
@c Part 3 Titlepage and Copyright
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index def2df4584b..e5385a6140f 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -17722,7 +17722,7 @@ One of the standard libraries bypassed by @option{-nostdlib} and
@option{-nodefaultlibs} is @file{libgcc.a}, a library of internal subroutines
which GCC uses to overcome shortcomings of particular machines, or special
needs for some languages.
-(@xref{Interface,,Interfacing to GCC Output,gccint,GNU Compiler
+(@xref{Interface,,Interfacing to GCC Output,@value{fngccint},GNU Compiler
Collection (GCC) Internals},
for more discussion of @file{libgcc.a}.)
In most cases, you need @file{libgcc.a} even when you want to avoid
@@ -17731,7 +17731,7 @@ or @option{-nodefaultlibs} you should usually specify @option{-lgcc} as well.
This ensures that you have no unresolved references to internal GCC
library subroutines.
(An example of such an internal subroutine is @code{__main}, used to ensure C++
-constructors are called; @pxref{Collect2,,@code{collect2}, gccint,
+constructors are called; @pxref{Collect2,,@code{collect2}, @value{fngccint},
GNU Compiler Collection (GCC) Internals}.)
@opindex nostdlib++
@@ -35109,7 +35109,7 @@ Note that you can also specify places to search using options such as
@option{-B}, @option{-I} and @option{-L} (@pxref{Directory Options}). These
take precedence over places specified using environment variables, which
in turn take precedence over those specified by the configuration of GCC@.
-@xref{Driver,, Controlling the Compilation Driver @file{gcc}, gccint,
+@xref{Driver,, Controlling the Compilation Driver @file{gcc}, @value{fngccint},
GNU Compiler Collection (GCC) Internals}.
@table @env
@@ -35289,7 +35289,7 @@ the headers it contains change.
A precompiled header file is searched for when @code{#include} is
seen in the compilation. As it searches for the included file
-(@pxref{Search Path,,Search Path,cpp,The C Preprocessor}) the
+(@pxref{Search Path,,Search Path,@value{fncpp},The C Preprocessor}) the
compiler looks for a precompiled header in each directory just before it
looks for the include file in that directory. The name searched for is
the name specified in the @code{#include} with @samp{.gch} appended. If
diff --git a/gcc/doc/libgcc.texi b/gcc/doc/libgcc.texi
index 73aa803f97b..e005588b88e 100644
--- a/gcc/doc/libgcc.texi
+++ b/gcc/doc/libgcc.texi
@@ -24,7 +24,7 @@ that needs them.
GCC will also generate calls to C library routines, such as
@code{memcpy} and @code{memset}, in some cases. The set of routines
that GCC may possibly use is documented in @ref{Other
-Builtins,,,gcc, Using the GNU Compiler Collection (GCC)}.
+Builtins,,,@value{fngcc}, Using the GNU Compiler Collection (GCC)}.
These routines take arguments and return values of a specific machine
mode, not a specific C type. @xref{Machine Modes}, for an explanation
diff --git a/gcc/fortran/Make-lang.in b/gcc/fortran/Make-lang.in
index 1666fd8f0ff..96ec8861a3d 100644
--- a/gcc/fortran/Make-lang.in
+++ b/gcc/fortran/Make-lang.in
@@ -116,7 +116,8 @@ fortran.tags: force
cd $(srcdir)/fortran; $(ETAGS) -o TAGS.sub *.cc *.h; \
$(ETAGS) --include TAGS.sub --include ../TAGS.sub
-fortran.info: doc/gfortran.info doc/gfc-internals.info
+INFO_FORTRAN_NAME = $(shell echo gfortran|sed '$(program_transform_name)')
+fortran.info: doc/$(INFO_FORTRAN_NAME).info
F95_DVIFILES = doc/gfortran.dvi
@@ -199,10 +200,10 @@ GFORTRAN_TEXI = \
$(srcdir)/doc/include/gcc-common.texi \
gcc-vers.texi
-doc/gfortran.info: $(GFORTRAN_TEXI)
+doc/$(INFO_FORTRAN_NAME).info: $(GFORTRAN_TEXI)
if [ x$(BUILD_INFO) = xinfo ]; then \
rm -f doc/gfortran.info-*; \
- $(MAKEINFO) -I $(srcdir)/doc/include -I $(srcdir)/fortran \
+ $(MAKEINFO) $(MAKEINFODEFS) -I $(srcdir)/doc/include -I $(srcdir)/fortran \
-o $@ $<; \
else true; fi
@@ -267,7 +268,7 @@ fortran.install-common: install-finclude-dir installdirs
fortran.install-plugin:
-fortran.install-info: $(DESTDIR)$(infodir)/gfortran.info
+fortran.install-info: $(DESTDIR)$(infodir)/$(INFO_FORTRAN_NAME).info
fortran.install-man: $(DESTDIR)$(man1dir)/$(GFORTRAN_INSTALL_NAME)$(man1ext)
@@ -285,7 +286,7 @@ fortran.uninstall:
rm -rf $(DESTDIR)$(bindir)/$(GFORTRAN_INSTALL_NAME)$(exeext); \
rm -rf $(DESTDIR)$(man1dir)/$(GFORTRAN_INSTALL_NAME)$(man1ext); \
rm -rf $(DESTDIR)$(bindir)/$(GFORTRAN_TARGET_INSTALL_NAME)$(exeext); \
- rm -rf $(DESTDIR)$(infodir)/gfortran.info*
+ rm -rf $(DESTDIR)$(infodir)/$(INFO_FORTRAN_NAME).info*
#
# Clean hooks:
diff --git a/gcc/fortran/gfortran.texi b/gcc/fortran/gfortran.texi
index b96712987e1..55ed2a540c2 100644
--- a/gcc/fortran/gfortran.texi
+++ b/gcc/fortran/gfortran.texi
@@ -101,7 +101,7 @@ Texts being (a) (see below), and with the Back-Cover Texts being (b)
@ifinfo
@dircategory Software development
@direntry
-* gfortran: (gfortran). The GNU Fortran Compiler.
+* @value{fngfortran}: (@value{fngfortran}). The GNU Fortran Compiler.
@end direntry
This file documents the use and the internals of
the GNU Fortran compiler, (@command{gfortran}).
diff --git a/libffi/Makefile.am b/libffi/Makefile.am
index c6d6f849c53..6fbf374a2e7 100644
--- a/libffi/Makefile.am
+++ b/libffi/Makefile.am
@@ -28,6 +28,8 @@ TEXINFO_TEX = ../gcc/doc/include/texinfo.tex
# Defines info, dvi, pdf and html targets
MAKEINFOFLAGS = -I $(srcdir)/../gcc/doc/include
info_TEXINFOS = doc/libffi.texi
+INFO_LIBFFI_NAME = $(shell echo libffi | sed '${program_transform_name}')
+INFO_DEPS = doc/$(INFO_LIBFFI_NAME).info
# AM_CONDITIONAL on configure option --generated-files-in-srcdir
if GENINSRC
@@ -45,14 +47,14 @@ endif
all-local: $(STAMP_GENINSRC)
-stamp-geninsrc: doc/libffi.info
- cp -p $(top_builddir)/doc/libffi.info $(srcdir)/doc/libffi.info
+stamp-geninsrc: doc/$(INFO_LIBFFI_NAME).info
+ cp -p $(top_builddir)/doc/$(INFO_LIBFFI_NAME).info $(srcdir)/doc/libffi.info
@touch $@
-doc/libffi.info: $(STAMP_BUILD_INFO)
+doc/$(INFO_LIBFFI_NAME).info: $(STAMP_BUILD_INFO)
stamp-build-info: doc/libffi.texi $(srcdir)/doc/version.texi doc/$(am__dirstamp)
- $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)/doc -o doc/libffi.info $(srcdir)/doc/libffi.texi
+ $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -D 'fnlibffi $(INFO_LIBFFI_NAME)' -I $(srcdir)/doc -o doc/$(INFO_LIBFFI_NAME).info $(srcdir)/doc/libffi.texi
@touch $@
CLEANFILES = $(STAMP_GENINSRC) $(STAMP_BUILD_INFO)
diff --git a/libffi/Makefile.in b/libffi/Makefile.in
index 5524a6a571e..1898ffee446 100644
--- a/libffi/Makefile.in
+++ b/libffi/Makefile.in
@@ -249,7 +249,8 @@ AM_V_texidevnull = $(am__v_texidevnull_@AM_V@)
am__v_texidevnull_ = $(am__v_texidevnull_@AM_DEFAULT_V@)
am__v_texidevnull_0 = > /dev/null
am__v_texidevnull_1 =
-INFO_DEPS = doc/libffi.info
+INFO_LIBFFI_NAME = $(shell echo libffi | sed '${program_transform_name}')
+INFO_DEPS = doc/$(INFO_LIBFFI_NAME).info
am__TEXINFO_TEX_DIR = $(srcdir)/../gcc/doc/include
DVIS = doc/libffi.dvi
PDFS = doc/libffi.pdf
@@ -473,6 +474,8 @@ TEXINFO_TEX = ../gcc/doc/include/texinfo.tex
# Defines info, dvi, pdf and html targets
MAKEINFOFLAGS = -I $(srcdir)/../gcc/doc/include
info_TEXINFOS = doc/libffi.texi
+INFO_LIBFFI_NAME = $(shell echo libffi | sed '${program_transform_name}')
+INFO_DEPS = doc/$(INFO_LIBFFI_NAME).info
@GENINSRC_FALSE@STAMP_GENINSRC =
# AM_CONDITIONAL on configure option --generated-files-in-srcdir
@@ -1906,14 +1909,15 @@ uninstall-am: uninstall-dvi-am uninstall-html-am uninstall-info-am \
all-local: $(STAMP_GENINSRC)
-stamp-geninsrc: doc/libffi.info
- cp -p $(top_builddir)/doc/libffi.info $(srcdir)/doc/libffi.info
+$(srcdir)/doc/libffi.info: stamp-geninsrc
+stamp-geninsrc: doc/$(INFO_LIBFFI_NAME).info
+ cp -p $(top_builddir)/doc/$(INFO_LIBFFI_NAME).info $(srcdir)/doc/libffi.info
@touch $@
-doc/libffi.info: $(STAMP_BUILD_INFO)
+doc/$(INFO_LIBFFI_NAME).info: $(STAMP_BUILD_INFO)
stamp-build-info: doc/libffi.texi $(srcdir)/doc/version.texi doc/$(am__dirstamp)
- $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)/doc -o doc/libffi.info $(srcdir)/doc/libffi.texi
+ $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -D 'fnlibffi $(INFO_LIBFFI_NAME)' -I $(srcdir)/doc -o doc/$(INFO_LIBFFI_NAME).info $(srcdir)/doc/libffi.texi
@touch $@
@LIBFFI_BUILD_VERSIONED_SHLIB_SUN_TRUE@@LIBFFI_BUILD_VERSIONED_SHLIB_TRUE@libffi.map-sun : libffi.map $(top_srcdir)/../contrib/make_sunver.pl \
@LIBFFI_BUILD_VERSIONED_SHLIB_SUN_TRUE@@LIBFFI_BUILD_VERSIONED_SHLIB_TRUE@ $(libffi_la_OBJECTS) $(libffi_la_LIBADD)
diff --git a/libffi/doc/libffi.texi b/libffi/doc/libffi.texi
index 7fd3625d992..62dc76d6d64 100644
--- a/libffi/doc/libffi.texi
+++ b/libffi/doc/libffi.texi
@@ -43,7 +43,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@dircategory Development
@direntry
-* libffi: (libffi). Portable foreign function interface library.
+* libffi: (@value{fnlibffi}). Portable foreign-function interface library.
@end direntry
@titlepage
diff --git a/libgomp/Makefile.am b/libgomp/Makefile.am
index 428f7a9dab5..cce97d85bc8 100644
--- a/libgomp/Makefile.am
+++ b/libgomp/Makefile.am
@@ -129,14 +129,17 @@ endif
all-local: $(STAMP_GENINSRC)
-stamp-geninsrc: libgomp.info
- cp -p $(top_builddir)/libgomp.info $(srcdir)/libgomp.info
+INFO_LIBGOMP_NAME = $(shell echo libgomp|sed '$(program_transform_name)')
+stamp-geninsrc: $(INFO_LIBGOMP_NAME).info
+ cp -p $(top_builddir)/$(INFO_LIBGOMP_NAME).info $(srcdir)/libgomp.info
@touch $@
-libgomp.info: $(STAMP_BUILD_INFO)
+libgomp.info: $(INFO_LIBGOMP_NAME).info
+ cp $(INFO_LIBGOMP_NAME).info libgomp.info
+$(STAMP_BUILD_INFO).info: $(STAMP_BUILD_INFO)
stamp-build-info: libgomp.texi
- $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) -o libgomp.info $(srcdir)/libgomp.texi
+ $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) -o $(INFO_LIBGOMP_NAME).info $(srcdir)/libgomp.texi
@touch $@
diff --git a/libgomp/Makefile.in b/libgomp/Makefile.in
index 2c81ccacc1d..0fb67876733 100644
--- a/libgomp/Makefile.in
+++ b/libgomp/Makefile.in
@@ -612,6 +612,7 @@ info_TEXINFOS = libgomp.texi
# AM_CONDITIONAL on configure check ACX_CHECK_PROG_VER([MAKEINFO])
@BUILD_INFO_TRUE@STAMP_BUILD_INFO = stamp-build-info
+INFO_LIBGOMP_NAME = $(shell echo libgomp|sed '$(program_transform_name)')
CLEANFILES = $(STAMP_GENINSRC) $(STAMP_BUILD_INFO)
MAINTAINERCLEANFILES = $(srcdir)/libgomp.info
MULTISRCTOP =
@@ -1392,15 +1393,16 @@ env.lo: libgomp_f.h
env.o: libgomp_f.h
all-local: $(STAMP_GENINSRC)
-
-stamp-geninsrc: libgomp.info
- cp -p $(top_builddir)/libgomp.info $(srcdir)/libgomp.info
+stamp-geninsrc: $(INFO_LIBGOMP_NAME).info
+ cp -p $(top_builddir)/$(INFO_LIBGOMP_NAME).info $(srcdir)/libgomp.info
@touch $@
-libgomp.info: $(STAMP_BUILD_INFO)
+libgomp.info: $(INFO_LIBGOMP_NAME).info
+ cp $(INFO_LIBGOMP_NAME).info libgomp.info
+$(INFO_LIBGOMP_NAME).info: $(STAMP_BUILD_INFO)
stamp-build-info: libgomp.texi
- $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) -o libgomp.info $(srcdir)/libgomp.texi
+ $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -D 'fnlibgomp $(INFO_LIBGOMP_NAME)' -I $(srcdir) -o $(INFO_LIBGOMP_NAME).info $(srcdir)/libgomp.texi
@touch $@
# target overrides
diff --git a/libgomp/libgomp.texi b/libgomp/libgomp.texi
index 5bcb84a1d6f..60715911924 100644
--- a/libgomp/libgomp.texi
+++ b/libgomp/libgomp.texi
@@ -31,7 +31,7 @@ texts being (a) (see below), and with the Back-Cover Texts being (b)
@ifinfo
@dircategory GNU Libraries
@direntry
-* libgomp: (libgomp). GNU Offloading and Multi Processing Runtime Library.
+* @value{fnlibgomp}: (@value{fnlibgomp}). GNU Offloading and Multi Processing Runtime Library.
@end direntry
This manual documents libgomp, the GNU Offloading and Multi Processing
diff --git a/libitm/libitm.texi b/libitm/libitm.texi
index 9bb818fa53f..e62a90231f5 100644
--- a/libitm/libitm.texi
+++ b/libitm/libitm.texi
@@ -20,7 +20,7 @@ Free Documentation License''.
@ifinfo
@dircategory GNU Libraries
@direntry
-* libitm: (libitm). GNU Transactional Memory Library
+* libitm: (libitm-6). GNU Transactional Memory Library
@end direntry
This manual documents the GNU Transactional Memory Library.
diff --git a/libquadmath/libquadmath.texi b/libquadmath/libquadmath.texi
index 2e3a62511b1..ac658f5f2a7 100644
--- a/libquadmath/libquadmath.texi
+++ b/libquadmath/libquadmath.texi
@@ -25,7 +25,7 @@ copy and modify this GNU manual.
@ifinfo
@dircategory GNU Libraries
@direntry
-* libquadmath: (libquadmath). GCC Quad-Precision Math Library
+* libquadmath: (libquadmath-6). GCC Quad-Precision Math Library
@end direntry
This manual documents the GCC Quad-Precision Math Library API.

115
gcc44-textdomain.patch Normal file
View File

@ -0,0 +1,115 @@
#! /bin/sh -e
# DP: Set gettext's domain and textdomain to the versioned package name.
dir=
if [ $# -eq 3 -a "$2" = '-d' ]; then
pdir="-d $3"
dir="$3/"
elif [ $# -ne 1 ]; then
echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
exit 1
fi
case "$1" in
-patch)
patch $pdir -f --no-backup-if-mismatch -p0 < $0
;;
-unpatch)
patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
;;
*)
echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
exit 1
esac
exit 0
diff --git a/gcc/Makefile.in b/gcc/Makefile.in
index 0fe2ba241..86e5fb9e7 100644
--- a/gcc/Makefile.in
+++ b/gcc/Makefile.in
@@ -4303,8 +4303,8 @@ install-po:
dir=$(localedir)/$$lang/LC_MESSAGES; \
echo $(mkinstalldirs) $(DESTDIR)$$dir; \
$(mkinstalldirs) $(DESTDIR)$$dir || exit 1; \
- echo $(INSTALL_DATA) $$cat $(DESTDIR)$$dir/gcc.mo; \
- $(INSTALL_DATA) $$cat $(DESTDIR)$$dir/gcc.mo; \
+ echo $(INSTALL_DATA) $$cat $(DESTDIR)$$dir/gcc-14.mo; \
+ $(INSTALL_DATA) $$cat $(DESTDIR)$$dir/gcc-14.mo; \
done
# Rule for regenerating the message template (gcc.pot).
diff --git a/gcc/intl.cc b/gcc/intl.cc
index e8108b7dc..62895c11f 100644
--- a/gcc/intl.cc
+++ b/gcc/intl.cc
@@ -55,8 +55,8 @@ gcc_init_libintl (void)
setlocale (LC_ALL, "");
#endif
- (void) bindtextdomain ("gcc", LOCALEDIR);
- (void) textdomain ("gcc");
+ (void) bindtextdomain ("gcc-14", LOCALEDIR);
+ (void) textdomain ("gcc-14");
/* Opening quotation mark. */
open_quote = _("`");
diff --git a/libcpp/Makefile.in b/libcpp/Makefile.in
index 5fbba9b9c..c37bc6bcf 100644
--- a/libcpp/Makefile.in
+++ b/libcpp/Makefile.in
@@ -49,6 +49,7 @@ LDFLAGS = @LDFLAGS@
LIBICONV = @LIBICONV@
LIBINTL = @LIBINTL@
PACKAGE = @PACKAGE@
+PACKAGE_SUFFIX = -14
RANLIB = @RANLIB@
SHELL = @SHELL@
USED_CATALOGS = @USED_CATALOGS@
@@ -76,8 +77,10 @@ INCLUDES = -I$(srcdir) -I. -I$(srcdir)/../include @INCINTL@ \
ALL_CFLAGS = $(CFLAGS) $(WARN_CFLAGS) $(INCLUDES) $(CPPFLAGS) $(PICFLAG) \
$(CET_HOST_FLAGS)
+ALL_CFLAGS += -DPACKAGE_SUFFIX=\"$(strip $(PACKAGE_SUFFIX))\"
ALL_CXXFLAGS = $(CXXFLAGS) $(WARN_CXXFLAGS) $(NOEXCEPTION_FLAGS) $(INCLUDES) \
$(CPPFLAGS) $(PICFLAG) $(CET_HOST_FLAGS)
+ALL_CXXFLAGS += -DPACKAGE_SUFFIX=\"$(strip $(PACKAGE_SUFFIX))\"
# The name of the compiler to use.
COMPILER = $(CXX)
@@ -166,8 +169,8 @@ install-strip install: all installdirs
else continue; \
fi; \
dir=$(localedir)/$$lang/LC_MESSAGES; \
- echo $(INSTALL_DATA) $$cat $(DESTDIR)$$dir/$(PACKAGE).mo; \
- $(INSTALL_DATA) $$cat $(DESTDIR)$$dir/$(PACKAGE).mo; \
+ echo $(INSTALL_DATA) $$cat $(DESTDIR)$$dir/$(PACKAGE)$(PACKAGE_SUFFIX).mo; \
+ $(INSTALL_DATA) $$cat $(DESTDIR)$$dir/$(PACKAGE)$(PACKAGE_SUFFIX).mo; \
done
mostlyclean:
diff --git a/libcpp/init.cc b/libcpp/init.cc
index 63124c816..4471ff358 100644
--- a/libcpp/init.cc
+++ b/libcpp/init.cc
@@ -167,7 +167,7 @@ init_library (void)
init_trigraph_map ();
#ifdef ENABLE_NLS
- (void) bindtextdomain (PACKAGE, LOCALEDIR);
+ (void) bindtextdomain (PACKAGE PACKAGE_SUFFIX, LOCALEDIR);
#endif
}
}
diff --git a/libcpp/system.h b/libcpp/system.h
index 0a0629d55..6fc28a651 100644
--- a/libcpp/system.h
+++ b/libcpp/system.h
@@ -284,7 +284,7 @@ extern int errno;
#endif
#ifndef _
-# define _(msgid) dgettext (PACKAGE, msgid)
+# define _(msgid) dgettext (PACKAGE PACKAGE_SUFFIX, msgid)
#endif
#ifndef N_

View File

@ -0,0 +1,14 @@
Index: libstdc++-v3/doc/html/index.html
===================================================================
--- libstdc++-v3/doc/html/index.html (revision 210144)
+++ libstdc++-v3/doc/html/index.html (working copy)
@@ -18,7 +18,7 @@
</p></li><li class="listitem"><p>
<a class="link" href="faq.html" title="Frequently Asked Questions">Frequently Asked Questions</a>
</p></li><li class="listitem"><p>
- <a class="link" href="api.html" title="The GNU C++ Library API Reference">API and Source Documentation</a>
+ <a class="link" href="api/index.html" title="The GNU C++ Library API Reference">API and Source Documentation</a>
</p></li></ul></div><p>
</p></div></div></div><hr /></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="book"><a href="manual/index.html">The GNU C++ Library Manual</a></span></dt><dd><dl><dt><span class="part"><a href="manual/intro.html">I.
Introduction

View File

@ -0,0 +1,23 @@
Index: gcc/Makefile.in
===================================================================
--- gcc/Makefile.in (revision 255776)
+++ gcc/Makefile.in (working copy)
@@ -3066,18 +3066,6 @@ stmp-fixinc: gsyslimits.h macro_list fix
sysroot_headers_suffix=`echo $${ml} | sed -e 's/;.*$$//'`; \
multi_dir=`echo $${ml} | sed -e 's/^[^;]*;//'`; \
fix_dir=include-fixed$${multi_dir}; \
- if ! $(inhibit_libc) && test ! -d ${BUILD_SYSTEM_HEADER_DIR}; then \
- echo "The directory (BUILD_SYSTEM_HEADER_DIR) that should contain system headers does not exist:" >&2 ; \
- echo " ${BUILD_SYSTEM_HEADER_DIR}" >&2 ; \
- case ${build_os} in \
- darwin*) \
- echo "(on Darwin this usually means you need to pass the --with-sysroot= flag to point to a valid MacOS SDK)" >&2; \
- ;; \
- esac; \
- tooldir_sysinc=`echo "${gcc_tooldir}/sys-include" | sed -e :a -e "s,[^/]*/\.\.\/,," -e ta`; \
- if test "x${BUILD_SYSTEM_HEADER_DIR}" = "x$${tooldir_sysinc}"; \
- then sleep 1; else exit 1; fi; \
- fi; \
$(mkinstalldirs) $${fix_dir}; \
chmod a+rx $${fix_dir} || true; \
(TARGET_MACHINE='$(target)'; srcdir=`cd $(srcdir); ${PWD_COMMAND}`; \

View File

@ -0,0 +1,13 @@
diff --git a/gcc/c-family/c.opt b/gcc/c-family/c.opt
index 9c0a28092fc..e2d4aa059e4 100644
--- a/gcc/c-family/c.opt
+++ b/gcc/c-family/c.opt
@@ -715,7 +715,7 @@ C++ ObjC++ Var(warn_exceptions) Init(1) Warning
Warn when an exception handler is shadowed by another handler.
Wexpansion-to-defined
-C ObjC C++ ObjC++ CPP(warn_expansion_to_defined) CppReason(CPP_W_EXPANSION_TO_DEFINED) Var(cpp_warn_expansion_to_defined) Init(0) Warning EnabledBy(Wextra || Wpedantic)
+C ObjC C++ ObjC++ CPP(warn_expansion_to_defined) CppReason(CPP_W_EXPANSION_TO_DEFINED) Var(cpp_warn_expansion_to_defined) Init(0) Warning EnabledBy(Wpedantic)
Warn if \"defined\" is used outside #if.
Wextra

View File

@ -0,0 +1,116 @@
Use the binaries build-id as checksum for PCH purposes.
diff --git a/gcc/c-family/c-pch.cc b/gcc/c-family/c-pch.cc
index 2cafa1387bb..7f51f977378 100644
--- a/gcc/c-family/c-pch.cc
+++ b/gcc/c-family/c-pch.cc
@@ -64,6 +64,66 @@ static FILE *pch_outfile;
static const char *get_ident (void);
+#if _GNU_SOURCE
+#include <link.h>
+
+#define ALIGN(val, align) (((val) + (align) - 1) & ~((align) - 1))
+
+static int
+get_build_id_1 (struct dl_phdr_info *info, size_t, void *data)
+{
+ for (unsigned i = 0; i < info->dlpi_phnum; ++i)
+ {
+ if (info->dlpi_phdr[i].p_type != PT_NOTE)
+ continue;
+ ElfW(Nhdr) *nhdr
+ = (ElfW(Nhdr) *)(info->dlpi_addr + info->dlpi_phdr[i].p_vaddr);
+ ptrdiff_t size = info->dlpi_phdr[i].p_filesz;
+ ptrdiff_t align = info->dlpi_phdr[i].p_align;
+ if (align != 8)
+ align = 4;
+ while (size >= (ptrdiff_t)sizeof (ElfW(Nhdr)))
+ {
+ if (nhdr->n_type == NT_GNU_BUILD_ID
+ && nhdr->n_namesz == 4
+ && strncmp ((char *)nhdr
+ + sizeof (ElfW(Nhdr)),
+ "GNU", 4) == 0
+ && nhdr->n_descsz >= 16)
+ {
+ memcpy (data,
+ (char *)nhdr
+ + ALIGN (sizeof (ElfW(Nhdr))
+ + nhdr->n_namesz, align), 16);
+ return 1;
+ }
+ size_t offset = (ALIGN (sizeof (ElfW(Nhdr))
+ + nhdr->n_namesz, align)
+ + ALIGN(nhdr->n_descsz, align));
+ nhdr = (ElfW(Nhdr) *)((char *)nhdr + offset);
+ size -= offset;
+ }
+ }
+
+ return 0;
+}
+
+static const unsigned char *
+get_build_id ()
+{
+ static unsigned char build_id[16];
+ if (!dl_iterate_phdr (get_build_id_1, build_id))
+ return NULL;
+ return build_id;
+}
+#else
+static const unsigned char *
+get_build_id ()
+{
+ return NULL;
+}
+#endif
+
/* Compute an appropriate 8-byte magic number for the PCH file, so that
utilities like file(1) can identify it, and so that GCC can quickly
ignore non-PCH files and PCH files that are of a completely different
@@ -118,8 +178,11 @@ pch_init (void)
}
target_validity = targetm.get_pch_validity (&v.target_data_length);
+ const unsigned char *chksum = get_build_id ();
+ if (!chksum)
+ chksum = executable_checksum;
if (fwrite (partial_pch, IDENT_LENGTH, 1, f) != 1
- || fwrite (executable_checksum, 16, 1, f) != 1
+ || fwrite (chksum, 16, 1, f) != 1
|| fwrite (&v, sizeof (v), 1, f) != 1
|| fwrite (target_validity, v.target_data_length, 1, f) != 1)
fatal_error (input_location, "cannot write to %s: %m", pch_file);
@@ -234,7 +297,10 @@ c_common_valid_pch (cpp_reader *pfile, const char *name, int fd)
cpp_warning (pfile, CPP_W_INVALID_PCH, "%s: not a PCH file", name);
return 2;
}
- if (memcmp (ident + IDENT_LENGTH, executable_checksum, 16) != 0)
+ const unsigned char *chksum = get_build_id ();
+ if (!chksum)
+ chksum = executable_checksum;
+ if (memcmp (ident + IDENT_LENGTH, chksum, 16) != 0)
{
cpp_warning (pfile, CPP_W_INVALID_PCH,
"%s: created by a different GCC executable", name);
diff --git a/gcc/genchecksum.cc b/gcc/genchecksum.cc
index 47280f5147b..bcfdcacf954 100644
--- a/gcc/genchecksum.cc
+++ b/gcc/genchecksum.cc
@@ -113,8 +113,13 @@ main (int argc, char ** argv)
puts ("#include \"config.h\"");
puts ("#include \"system.h\"");
fputs ("EXPORTED_CONST unsigned char executable_checksum[16] = { ", stdout);
+#if _GNU_SOURCE
+ for (i = 0; i < 16; i++)
+ printf ("0x%02x%s", 0, i == 15 ? " };\n" : ", ");
+#else
for (i = 0; i < 16; i++)
printf ("0x%02x%s", result[i], i == 15 ? " };\n" : ", ");
+#endif
return 0;
}

View File

@ -0,0 +1,15 @@
Avoid leaking current data on generated file for Ada.
Index: gcc/ada/gcc-interface/Makefile.in
===================================================================
--- gcc/ada/gcc-interface/Makefile.in (revision 268977)
+++ gcc/ada/gcc-interface/Makefile.in (working copy)
@@ -2407,6 +2407,7 @@ $(RTSDIR)/s-oscons.ads: ../stamp-gnatlib
$(OSCONS_CPP) ; \
$(OSCONS_EXTRACT) ; \
../bldtools/oscons/xoscons s-oscons)
+ touch -r $(fsrcpfx)ada/gsocket.h $@
gnatlib: ../stamp-gnatlib1-$(RTSDIR) ../stamp-gnatlib2-$(RTSDIR) $(RTSDIR)/s-oscons.ads
test -f $(RTSDIR)/s-oscons.ads || exit 1

BIN
newlib-4.4.0.20231231.tar.xz (Stored with Git LFS) Normal file

Binary file not shown.

333
newlib-gcn-iolock.diff Normal file
View File

@ -0,0 +1,333 @@
From 7dd4eb1db9e1b1b9f14ef5b743705156e5f370e1 Mon Sep 17 00:00:00 2001
From: Andrew Stubbs <ams@baylibre.com>
Date: Fri, 22 Mar 2024 14:53:30 +0000
Subject: [PATCH] amdgcn: Implement proper locks
This should prevent printf output from multiple threads getting garbled.
I don't know why IO ever worked properly -- probably it was always a bit
broken -- but the GFX11 devices have a different cache architecture and
trying to print from many threads at once corrupted the FILE buffers.
---
newlib/Makefile.in | 24 ++-
newlib/libc/sys/amdgcn/Makefile.inc | 3 +-
newlib/libc/sys/amdgcn/include/sys/lock.h | 39 +++++
newlib/libc/sys/amdgcn/lock.c | 187 ++++++++++++++++++++++
4 files changed, 250 insertions(+), 3 deletions(-)
create mode 100644 newlib/libc/sys/amdgcn/include/sys/lock.h
create mode 100644 newlib/libc/sys/amdgcn/lock.c
diff --git a/newlib/Makefile.in b/newlib/Makefile.in
index 8c71dbab3..b45c42c36 100644
--- a/newlib/Makefile.in
+++ b/newlib/Makefile.in
@@ -560,7 +560,8 @@ check_PROGRAMS =
@HAVE_LIBC_SYS_AMDGCN_DIR_TRUE@am__append_43 = \
@HAVE_LIBC_SYS_AMDGCN_DIR_TRUE@ libc/sys/amdgcn/close.c libc/sys/amdgcn/fstat.c libc/sys/amdgcn/isatty.c libc/sys/amdgcn/lseek.c libc/sys/amdgcn/read.c libc/sys/amdgcn/write.c \
-@HAVE_LIBC_SYS_AMDGCN_DIR_TRUE@ libc/sys/amdgcn/fcntl.c libc/sys/amdgcn/getpid.c libc/sys/amdgcn/kill.c libc/sys/amdgcn/open.c libc/sys/amdgcn/raise.c libc/sys/amdgcn/stat.c libc/sys/amdgcn/unlink.c
+@HAVE_LIBC_SYS_AMDGCN_DIR_TRUE@ libc/sys/amdgcn/fcntl.c libc/sys/amdgcn/getpid.c libc/sys/amdgcn/kill.c libc/sys/amdgcn/open.c libc/sys/amdgcn/raise.c libc/sys/amdgcn/stat.c \
+@HAVE_LIBC_SYS_AMDGCN_DIR_TRUE@ libc/sys/amdgcn/unlink.c libc/sys/amdgcn/lock.c
@HAVE_LIBC_SYS_ARM_DIR_TRUE@am__append_44 = libc/sys/arm/access.c libc/sys/arm/aeabi_atexit.c libc/sys/arm/sysconf.c
@HAVE_LIBC_SYS_ARM_DIR_TRUE@@MAY_SUPPLY_SYSCALLS_TRUE@am__append_45 = libc/sys/arm/libcfunc.c libc/sys/arm/trap.S libc/sys/arm/syscalls.c
@@ -1656,7 +1657,8 @@ am__objects_51 = libc/ssp/libc_a-chk_fail.$(OBJEXT) \
@HAVE_LIBC_SYS_AMDGCN_DIR_TRUE@ libc/sys/amdgcn/libc_a-open.$(OBJEXT) \
@HAVE_LIBC_SYS_AMDGCN_DIR_TRUE@ libc/sys/amdgcn/libc_a-raise.$(OBJEXT) \
@HAVE_LIBC_SYS_AMDGCN_DIR_TRUE@ libc/sys/amdgcn/libc_a-stat.$(OBJEXT) \
-@HAVE_LIBC_SYS_AMDGCN_DIR_TRUE@ libc/sys/amdgcn/libc_a-unlink.$(OBJEXT)
+@HAVE_LIBC_SYS_AMDGCN_DIR_TRUE@ libc/sys/amdgcn/libc_a-unlink.$(OBJEXT) \
+@HAVE_LIBC_SYS_AMDGCN_DIR_TRUE@ libc/sys/amdgcn/libc_a-lock.$(OBJEXT)
@HAVE_LIBC_SYS_ARM_DIR_TRUE@am__objects_55 = libc/sys/arm/libc_a-access.$(OBJEXT) \
@HAVE_LIBC_SYS_ARM_DIR_TRUE@ libc/sys/arm/libc_a-aeabi_atexit.$(OBJEXT) \
@HAVE_LIBC_SYS_ARM_DIR_TRUE@ libc/sys/arm/libc_a-sysconf.$(OBJEXT)
@@ -7268,6 +7270,9 @@ libc/sys/amdgcn/libc_a-stat.$(OBJEXT): \
libc/sys/amdgcn/libc_a-unlink.$(OBJEXT): \
libc/sys/amdgcn/$(am__dirstamp) \
libc/sys/amdgcn/$(DEPDIR)/$(am__dirstamp)
+libc/sys/amdgcn/libc_a-lock.$(OBJEXT): \
+ libc/sys/amdgcn/$(am__dirstamp) \
+ libc/sys/amdgcn/$(DEPDIR)/$(am__dirstamp)
libc/sys/arm/$(am__dirstamp):
@$(MKDIR_P) libc/sys/arm
@: > libc/sys/arm/$(am__dirstamp)
@@ -13831,6 +13836,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@libc/sys/amdgcn/$(DEPDIR)/libc_a-getpid.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@libc/sys/amdgcn/$(DEPDIR)/libc_a-isatty.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@libc/sys/amdgcn/$(DEPDIR)/libc_a-kill.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@libc/sys/amdgcn/$(DEPDIR)/libc_a-lock.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@libc/sys/amdgcn/$(DEPDIR)/libc_a-lseek.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@libc/sys/amdgcn/$(DEPDIR)/libc_a-open.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@libc/sys/amdgcn/$(DEPDIR)/libc_a-raise.Po@am__quote@
@@ -30960,6 +30966,20 @@ libc/sys/amdgcn/libc_a-unlink.obj: libc/sys/amdgcn/unlink.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -c -o libc/sys/amdgcn/libc_a-unlink.obj `if test -f 'libc/sys/amdgcn/unlink.c'; then $(CYGPATH_W) 'libc/sys/amdgcn/unlink.c'; else $(CYGPATH_W) '$(srcdir)/libc/sys/amdgcn/unlink.c'; fi`
+libc/sys/amdgcn/libc_a-lock.o: libc/sys/amdgcn/lock.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -MT libc/sys/amdgcn/libc_a-lock.o -MD -MP -MF libc/sys/amdgcn/$(DEPDIR)/libc_a-lock.Tpo -c -o libc/sys/amdgcn/libc_a-lock.o `test -f 'libc/sys/amdgcn/lock.c' || echo '$(srcdir)/'`libc/sys/amdgcn/lock.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libc/sys/amdgcn/$(DEPDIR)/libc_a-lock.Tpo libc/sys/amdgcn/$(DEPDIR)/libc_a-lock.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libc/sys/amdgcn/lock.c' object='libc/sys/amdgcn/libc_a-lock.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -c -o libc/sys/amdgcn/libc_a-lock.o `test -f 'libc/sys/amdgcn/lock.c' || echo '$(srcdir)/'`libc/sys/amdgcn/lock.c
+
+libc/sys/amdgcn/libc_a-lock.obj: libc/sys/amdgcn/lock.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -MT libc/sys/amdgcn/libc_a-lock.obj -MD -MP -MF libc/sys/amdgcn/$(DEPDIR)/libc_a-lock.Tpo -c -o libc/sys/amdgcn/libc_a-lock.obj `if test -f 'libc/sys/amdgcn/lock.c'; then $(CYGPATH_W) 'libc/sys/amdgcn/lock.c'; else $(CYGPATH_W) '$(srcdir)/libc/sys/amdgcn/lock.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libc/sys/amdgcn/$(DEPDIR)/libc_a-lock.Tpo libc/sys/amdgcn/$(DEPDIR)/libc_a-lock.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libc/sys/amdgcn/lock.c' object='libc/sys/amdgcn/libc_a-lock.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -c -o libc/sys/amdgcn/libc_a-lock.obj `if test -f 'libc/sys/amdgcn/lock.c'; then $(CYGPATH_W) 'libc/sys/amdgcn/lock.c'; else $(CYGPATH_W) '$(srcdir)/libc/sys/amdgcn/lock.c'; fi`
+
libc/sys/arm/libc_a-access.o: libc/sys/arm/access.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -MT libc/sys/arm/libc_a-access.o -MD -MP -MF libc/sys/arm/$(DEPDIR)/libc_a-access.Tpo -c -o libc/sys/arm/libc_a-access.o `test -f 'libc/sys/arm/access.c' || echo '$(srcdir)/'`libc/sys/arm/access.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libc/sys/arm/$(DEPDIR)/libc_a-access.Tpo libc/sys/arm/$(DEPDIR)/libc_a-access.Po
diff --git a/newlib/libc/sys/amdgcn/Makefile.inc b/newlib/libc/sys/amdgcn/Makefile.inc
index c1570b2ad..4e540fc24 100644
--- a/newlib/libc/sys/amdgcn/Makefile.inc
+++ b/newlib/libc/sys/amdgcn/Makefile.inc
@@ -1,3 +1,4 @@
libc_a_SOURCES += \
%D%/close.c %D%/fstat.c %D%/isatty.c %D%/lseek.c %D%/read.c %D%/write.c \
- %D%/fcntl.c %D%/getpid.c %D%/kill.c %D%/open.c %D%/raise.c %D%/stat.c %D%/unlink.c
+ %D%/fcntl.c %D%/getpid.c %D%/kill.c %D%/open.c %D%/raise.c %D%/stat.c \
+ %D%/unlink.c %D%/lock.c
diff --git a/newlib/libc/sys/amdgcn/include/sys/lock.h b/newlib/libc/sys/amdgcn/include/sys/lock.h
new file mode 100644
index 000000000..0e0e667e5
--- /dev/null
+++ b/newlib/libc/sys/amdgcn/include/sys/lock.h
@@ -0,0 +1,39 @@
+#ifndef __SYS_LOCK_H__
+#define __SYS_LOCK_H__
+
+#include <newlib.h>
+#include <_ansi.h>
+
+typedef unsigned int _LOCK_T;
+typedef unsigned int _LOCK_RECURSIVE_T;
+
+#define __LOCK_INIT(CLASS,LOCK) CLASS _LOCK_T LOCK = 0;
+#define __LOCK_INIT_RECURSIVE(CLASS,LOCK) __LOCK_INIT(CLASS,LOCK)
+
+#define __lock_init(LOCK) LOCK = 0
+#define __lock_init_recursive(LOCK) LOCK = 0
+#define __lock_close(LOCK) ((void)0)
+#define __lock_close_recursive(LOCK) ((void) 0)
+#define __lock_acquire(LOCK) __gcn_lock_acquire (&LOCK)
+#define __lock_acquire_recursive(LOCK) \
+ __gcn_lock_acquire_recursive (&LOCK)
+#define __lock_try_acquire(LOCK) __gcn_try_lock_acquire (&LOCK)
+#define __lock_try_acquire_recursive(LOCK) \
+ __gcn_lock_try_acquire_recursive (&LOCK)
+#define __lock_release(LOCK) __gcn_lock_release (&LOCK)
+#define __lock_release_recursive(LOCK) \
+ __gcn_lock_release_recursive (&LOCK)
+
+
+int __gcn_try_lock_acquire (_LOCK_T *lock_ptr);
+void __gcn_lock_acquire (_LOCK_T *lock_ptr);
+void __gcn_lock_release (_LOCK_T *lock_ptr);
+int __gcn_lock_try_acquire_recursive (_LOCK_T *lock_ptr);
+void __gcn_lock_acquire_recursive (_LOCK_T *lock_ptr);
+void __gcn_lock_release_recursive (_LOCK_T *lock_ptr);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __SYS_LOCK_H__ */
diff --git a/newlib/libc/sys/amdgcn/lock.c b/newlib/libc/sys/amdgcn/lock.c
new file mode 100644
index 000000000..dcc93cb01
--- /dev/null
+++ b/newlib/libc/sys/amdgcn/lock.c
@@ -0,0 +1,187 @@
+/*
+ * Support file for amdgcn in newlib.
+ * Copyright (c) 2024 BayLibre.
+ *
+ * The authors hereby grant permission to use, copy, modify, distribute,
+ * and license this software and its documentation for any purpose, provided
+ * that existing copyright notices are retained in all copies and that this
+ * notice is included verbatim in any distributions. No written agreement,
+ * license, or royalty fee is required for any of the authorized uses.
+ * Modifications to this software may be copyrighted by their authors
+ * and need not follow the licensing terms described here, provided that
+ * the new terms are clearly indicated on the first page of each file where
+ * they apply.
+ */
+
+/* Lock routines for AMD GPU devices.
+
+ The lock is a 32-bit int:
+ - bits 0-3: wavefront id
+ - bits 4-23: workgroup id (+1, so never zero)
+ - bits 24-31: recursive lock count.
+
+ The purpose of the "relaxed" loads and stores being "atomic" here is
+ mostly just to ensure we punch through the caches consistently.
+
+ Non-recursive locks may be unlocked by any thread. It's an error to
+ attempt to unlock a recursive lock from the wrong thread.
+
+ The DEBUG statements here use sprintf and write to avoid taking locks
+ themselves. */
+
+#include <sys/lock.h>
+#include <assert.h>
+
+#define DEBUG 0
+
+#if DEBUG
+extern void write(int, char *, int);
+#endif
+
+static unsigned
+__gcn_thread_id ()
+{
+ /* Dim(0) is the workgroup ID; range 0 to maybe thousands.
+ Dim(1) is the wavefront ID; range 0 to 15. */
+ return (((__builtin_gcn_dim_pos (0) + 1) << 4)
+ + __builtin_gcn_dim_pos (1));
+}
+
+static int
+__gcn_lock_acquire_int (_LOCK_T *lock_ptr, int _try)
+{
+ int id = __gcn_thread_id ();
+
+#if DEBUG
+ char buf[1000];
+ __builtin_sprintf (buf,"acquire:%p(%d) lock_value:0x%x id:0x%x", lock_ptr,
+ _try, *lock_ptr, id);
+ write (1, buf, __builtin_strlen(buf));
+#endif
+
+ int expected = 0;
+ while (!__atomic_compare_exchange_n (lock_ptr, &expected, id, 0,
+ __ATOMIC_ACQUIRE, __ATOMIC_RELAXED))
+ {
+ /* Lock *not* acquired. */
+ if (_try)
+ return 0;
+ else
+ {
+ asm ("s_sleep 64");
+ expected = 0;
+ }
+ }
+
+#if DEBUG
+ __builtin_sprintf (buf,"acquired:%p(%d) lock_value:0x%x id:0x%x", lock_ptr,
+ _try, *lock_ptr, id);
+ write (1, buf, __builtin_strlen(buf));
+#endif
+
+ return 1;
+}
+
+int
+__gcn_try_lock_acquire (_LOCK_T *lock_ptr)
+{
+ return __gcn_lock_acquire_int (lock_ptr, 1);
+}
+
+void
+__gcn_lock_acquire (_LOCK_T *lock_ptr)
+{
+ __gcn_lock_acquire_int (lock_ptr, 0);
+}
+
+static int
+__gcn_lock_acquire_recursive_int (_LOCK_T *lock_ptr, int _try)
+{
+ int id = __gcn_thread_id ();
+
+#if DEBUG
+ char buf[1000];
+ __builtin_sprintf (buf,"acquire recursive:%p(%d) lock_value:0x%x id:0x%x",
+ lock_ptr, _try, *lock_ptr, id);
+ write (1, buf, __builtin_strlen(buf));
+#endif
+
+ unsigned int lock_value = __atomic_load_n (lock_ptr, __ATOMIC_RELAXED);
+ if ((lock_value & 0xffffff) == id)
+ {
+ /* This thread already holds the lock.
+ Increment the recursion counter and update the lock. */
+ int count = lock_value >> 24;
+ lock_value = ((count + 1) << 24) | id;
+ __atomic_store_n (lock_ptr, lock_value, __ATOMIC_RELAXED);
+
+#if DEBUG
+ __builtin_sprintf (buf,
+ "increment recursive:%p(%d) lock_value:0x%x id:0x%x",
+ lock_ptr, _try, *lock_ptr, id);
+ write (1, buf, __builtin_strlen(buf));
+#endif
+
+ return 1;
+ }
+ else
+ return __gcn_lock_acquire_int (lock_ptr, _try);
+}
+
+int
+__gcn_lock_try_acquire_recursive (_LOCK_T *lock_ptr)
+{
+ return __gcn_lock_acquire_recursive_int (lock_ptr, 1);
+}
+
+void
+__gcn_lock_acquire_recursive (_LOCK_T *lock_ptr)
+{
+ __gcn_lock_acquire_recursive_int (lock_ptr, 0);
+}
+
+void
+__gcn_lock_release (_LOCK_T *lock_ptr)
+{
+#if DEBUG
+ char buf[1000];
+ __builtin_sprintf (buf,"release:%p lock_value:0x%x id:0x%x", lock_ptr,
+ *lock_ptr, __gcn_thread_id());
+ write (1, buf, __builtin_strlen(buf));
+#endif
+
+ __atomic_store_n (lock_ptr, 0, __ATOMIC_RELEASE);
+}
+
+void
+__gcn_lock_release_recursive (_LOCK_T *lock_ptr)
+{
+ int id = __gcn_thread_id ();
+ unsigned int lock_value = __atomic_load_n (lock_ptr, __ATOMIC_RELAXED);
+
+#if DEBUG
+ char buf[1000];
+ __builtin_sprintf (buf, "release recursive:%p lock_value:0x%x id:0x%x",
+ lock_ptr, lock_value, id);
+ write (1, buf, __builtin_strlen(buf));
+#endif
+
+ /* It is an error to call this function from the wrong thread. */
+ assert ((lock_value & 0xffffff) == id);
+
+ /* Decrement or release the lock. */
+ int count = lock_value >> 24;
+ if (count > 0)
+ {
+ lock_value = ((count - 1) << 24) | id;
+ __atomic_store_n (lock_ptr, lock_value, __ATOMIC_RELAXED);
+
+#if DEBUG
+ __builtin_sprintf (buf, "decrement recursive:%p lock_value:0x%x id:0x%x",
+ lock_ptr, *lock_ptr, id);
+ write (1, buf, __builtin_strlen(buf));
+#endif
+ }
+ else
+ __gcn_lock_release (lock_ptr);
+}
--
2.35.3

31
pre_checkin.sh Normal file
View File

@ -0,0 +1,31 @@
#!/bin/bash
# This script is called automatically during autobuild checkin.
case $0 in
\./*)
here=$PWD
;;
*/*)
here=${0%/*}
;;
*)
here=$PWD
;;
esac
case ${here##*/} in
gcc*.*)
# Handle maintainance projects with .$REPO suffix
suffix=${here##*/}
suffix=${suffix%%\.*}
set ${suffix#gcc}
;;
gcc-*)
suffix=${here##*/}
set ${suffix#*-}-
;;
gcc[0-9]*)
suffix=${here##*/}
set ${suffix#gcc}
;;
esac
. ${here}/change_spec

20
tls-no-direct.diff Normal file
View File

@ -0,0 +1,20 @@
For i?86 negative offsets to %fs segment accesses cause a hypervisor
trap for Xen. Avoid this by making accesses indirect.
??? Note that similar to the behavior on SLE11 this only affects
the compiler built on %ix86, not that on x86_64, even with -m32.
Index: gcc/config/i386/linux.h
===================================================================
--- gcc/config/i386/linux.h.orig 2015-12-17 15:07:37.785650062 +0100
+++ gcc/config/i386/linux.h 2015-12-17 15:08:06.393983290 +0100
@@ -24,3 +24,9 @@ along with GCC; see the file COPYING3.
#undef MUSL_DYNAMIC_LINKER
#define MUSL_DYNAMIC_LINKER "/lib/ld-musl-i386.so.1"
+
+/* This slows down Xen, so take a very small general performance hit
+ for not accessing the %fs segment with negative offsets by making
+ GCC not emit direct accesses to %fs at all. */
+#undef TARGET_TLS_DIRECT_SEG_REFS_DEFAULT
+#define TARGET_TLS_DIRECT_SEG_REFS_DEFAULT 0