diff --git a/binutils-2.19.50.0.1-output-format.sed b/binutils-2.19.50.0.1-output-format.sed new file mode 100644 index 0000000000000000000000000000000000000000..fd770cb255d266b685133ca1230d42d850cfcd51 --- /dev/null +++ b/binutils-2.19.50.0.1-output-format.sed @@ -0,0 +1,38 @@ +# Generate OUTPUT_FORMAT line for .so files from the system linker output. +# Imported from glibc/Makerules. + +/ld.*[ ]-E[BL]/b f +/collect.*[ ]-E[BL]/b f +/OUTPUT_FORMAT[^)]*$/{N +s/\n[ ]*/ / +} +t o +: o +s/^.*OUTPUT_FORMAT(\([^,]*\), \1, \1).*$/OUTPUT_FORMAT(\1)/ +t q +s/^.*OUTPUT_FORMAT(\([^,]*\), \([^,]*\), \([^,]*\)).*$/\1,\2,\3/ +t s +s/^.*OUTPUT_FORMAT(\([^,)]*\).*$)/OUTPUT_FORMAT(\1)/ +t q +d +: s +s/"//g +G +s/\n// +s/^\([^,]*\),\([^,]*\),\([^,]*\),B/OUTPUT_FORMAT(\2)/p +s/^\([^,]*\),\([^,]*\),\([^,]*\),L/OUTPUT_FORMAT(\3)/p +s/^\([^,]*\),\([^,]*\),\([^,]*\)/OUTPUT_FORMAT(\1)/p +/,/s|^|*** BUG in libc/scripts/output-format.sed *** |p +q +: q +s/"//g +p +q +: f +s/^.*[ ]-E\([BL]\)[ ].*$/,\1/ +t h +s/^.*[ ]-E\([BL]\)$/,\1/ +t h +d +: h +h diff --git a/binutils-2.27-aarch64-ifunc.patch b/binutils-2.27-aarch64-ifunc.patch new file mode 100644 index 0000000000000000000000000000000000000000..562ef18c231c6b2fee44183b1e943d8a2a7a719a --- /dev/null +++ b/binutils-2.27-aarch64-ifunc.patch @@ -0,0 +1,11 @@ +diff -rup binutils.orig/bfd/elfnn-aarch64.c binutils-2.27/bfd/elfnn-aarch64.c +--- binutils.orig/bfd/elfnn-aarch64.c 2017-02-21 10:45:19.311956006 +0000 ++++ binutils-2.27/bfd/elfnn-aarch64.c 2017-02-21 11:55:07.517922655 +0000 +@@ -4947,6 +4947,7 @@ elfNN_aarch64_final_link_relocate (reloc + it here if it is defined in a non-shared object. */ + if (h != NULL + && h->type == STT_GNU_IFUNC ++ && (input_section->flags & SEC_ALLOC) + && h->def_regular) + { + asection *plt; diff --git a/binutils-2.42.spec b/binutils-2.42.spec new file mode 100644 index 0000000000000000000000000000000000000000..6f6f574d39122c9b7ce7e9c13490fcadb60fe905 --- /dev/null +++ b/binutils-2.42.spec @@ -0,0 +1,1276 @@ +%{?scl_package:%global scl gcc-toolset-14} +%global _vendor %{?_vendor:%{_vendor}}%{!?_vendor:openEuler} +%global _scl_prefix gcc-toolset-14- +%global _scl_path /opt/%{_vendor}/gcc-toolset-14 +%global _scl_root /opt/%{_vendor}/gcc-toolset-14/root +%global _prefix %{_scl_root}/usr +%global _sysconfdir %{_scl_root}/etc +%global _libdir %{_prefix}/lib64 +%global _infodir %{_prefix}/share/info +%global _bindir %{_prefix}/bin +%global _mandir %{_prefix}/share/man +%global _root_sbindir /usr/sbin +%global binutils_ver %{nil} + +Summary: A GNU collection of binary utilities +Name: %{?_scl_prefix}binutils%{binutils_ver} +Version: 2.42 +Release: 2 +License: GPLv3+ +URL: https://sourceware.org/binutils +ExcludeArch: loongarch64 + +#---Start of Configure Options----------------------------------------------- + +# The binutils can be built with the following parameters to change +# the default behaviour: + +# --with bootstrap Build with minimal dependencies. +# --with clang Force building with CLANG instead of GCC. +# --with crossbuilds Build cross targeted versions of the binutils as well as natives. +# --with debug Build without optimizations and without splitting the debuginfo into a separate file. +# --with debuginfod Disable support for debuginfod. +# --without docs Skip building documentation. Default is with docs, except when building a cross binutils. +# --without gold Disable building of the GOLD linker. +# --without gprofng Do not build the GprofNG profiler. +# --without systemzlib Use the binutils version of zlib. +# --without testsuite Do not run the testsuite. Default is to run it. + +# Other configuration options can be set by modifying the following defines. + +# Create shared libraries. +%define enable_shared 1 + +# Create deterministic archives (ie ones without timestamps). +# Default is off because of BZ 1195883. +%define enable_deterministic_archives 0 + +# Generate a warning when linking creates an executable stack +%define warn_for_executable_stacks 1 + +# Generate a warning when linking creates a segment with read, write and execute permissions +%define warn_for_rwx_segments 1 + +# Turn the above warnings into errors. +# Only effective if the warnings are enabled. +# Disabled by default because this is now handled by a macro in redhat-rpm-config. +%define error_for_executable_stacks 0 +%define error_for_rwx_segments 0 + +# Enable support for GCC LTO compilation. +# Disable if it is necessary to work around bugs in LTO. +%define enable_lto 1 + +# Enable support for generating new dtags in the linker +# Disable if it is necessary to use RPATH instead. +%define enable_new_dtags 0 + +# Enable the compression of debug sections as default behaviour of the +# assembler and linker. This option is disabled for now. The assembler and +# linker have command line options to override the default behaviour. +%define default_compress_debug 0 + +# Default to read-only-relocations (relro) in shared binaries. +# This is enabled as a security feature. +%define default_relro 1 + +# Enable the default generation of GNU Build notes by the assembler. +# This option is disabled as it has turned out to be problematic for the i686 +# architecture, although the exact reason has not been determined. (See +# BZ 1572485). It also breaks building EFI binaries on AArch64, as these +# cannot have relocations against absolute symbols. +%define default_generate_notes 0 + +# Enable thread support in the GOLD linker (if it is being built). This is +# particularly important if plugins to the linker intend to use threads +# themselves. See BZ 1636479 for more details. This option is made +# configurable in case there is ever a need to disable thread support. +%define enable_threading 1 + +# Enable the use of separate code and data segments for all architectures, +# not just x86/x86_64. +%define enable_separate_code 0 + +#----End of Configure Options------------------------------------------------ + +# Note - in the future the gold linker may become deprecated. +%ifnarch riscv64 +%bcond_without gold +%else +# RISC-V does not have ld.gold thus disable by default. +%bcond_with gold +%endif + +# Default: Not bootstrapping. +%bcond_with bootstrap +# Default: Not debug +%bcond_with debug +# Default: Always build documentation. +%bcond_without docs +# Default: Always run the testsuite. FIXME: Temporarily disable it. +%bcond_with testsuite +# Default: Not support debuginfod. +%bcond_with debuginfod +# Default: Not build binutils-gprofng package. +%bcond_with gprofng +# Default: Use the system supplied version of the zlib compression library. +%bcond_without systemzlib + +# Allow the user to override the compiler used to build the binutils. +# The default build compiler is gcc if %%toolchain is not clang. +%if "%toolchain" == "clang" +%bcond_without clang +%else +%bcond_with clang +%endif + +%if %{with clang} +%global toolchain clang +%else +%global toolchain gcc +%endif + +# (Do not) create cross targeted versions of the binutils. +%bcond_with crossbuilds +# %%bcond_without crossbuilds + +%if %{with bootstrap} +%undefine with_docs +%undefine with_testsuite +%undefine with_gprofng +%endif + +%if %{with debug} +%undefine with_testsuite +%define enable_shared 0 +%endif + +# GprofNG currenly only supports the x86 and AArch64 architectures. +%ifnarch x86_64 aarch64 +%undefine with_gprofng +%endif + +# The opcodes library needs a few functions defined in the bfd +# library, but these symbols are not defined in the stub bfd .so +# that is available at link time. (They are present in the real +# .so that is used at run time). +%undefine _strict_symbol_defs_build + +# BZ 1924068. Since applications that use the BFD library are +# required to link against the static version, ensure that it retains +# its debug informnation. +%undefine __brp_strip_static_archive + +#---------------------------------------------------------------------------- + +# Note - the Linux Kernel binutils releases are too unstable and contain +# too many controversial patches so we stick with the official FSF version +# instead. + +Source: https://ftp.gnu.org/gnu/binutils/binutils-%{version}.tar.xz +Source2: binutils-2.19.50.0.1-output-format.sed + +#---------------------------------------------------------------------------- + +# OpenEuler Patch Naming Rules +# https://gitee.com/openeuler/TC/blob/master/oEEP/oEEP-0012%20openEuler%E8%BD%AF%E4%BB%B6%E5%8C%85%E9%9D%9Eupstream%E6%94%AF%E6%8C%81%E5%A4%9A%E6%9E%B6%E6%9E%84%E4%BB%A3%E7%A0%81%E6%8F%90%E4%BA%A4%E8%A7%84%E5%88%99.md + +# Part 1000 - 1999 +# Part 5000 - +# Purpose: Use /lib64 and /usr/lib64 instead of /lib and /usr/lib in the +# default library search path of 64-bit targets. +# Lifetime: Permanent, but it should not be. This is a bug in the libtool +# sources used in both binutils and gcc, (specifically the +# libtool.m4 file). These are based on a version released in 2009 +# (2.2.6?) rather than the latest version. (Definitely fixed in +# libtool version 2.4.6). +Patch5001: binutils-libtool-lib64.patch + +# Purpose: Exports the demangle.h header file (associated with the libiberty +# sources) with the binutils-devel rpm. +# Lifetime: Permanent. This is a Vendor specific patch. +Patch5002: binutils-export-demangle.h.patch + +# Purpose: Disables the check in the BFD library's bfd.h header file that +# config.h has been included before the bfd.h header. See BZ +# #845084 for more details. +# Lifetime: Permanent - but it should not be. The bfd.h header defines +# various types that are dependent upon configuration options, so +# the order of inclusion is important. +# FIXME: It would be better if the packages using the bfd.h header were +# fixed so that they do include the header files in the correct +# order. +Patch5003: binutils-no-config-h-check.patch + +# Purpose: Do not create PLT entries for AARCH64 IFUNC symbols referenced in +# debug sections. +# Lifetime: Permanent. +# FIXME: Find related bug. Decide on permanency. +Patch5004: binutils-2.27-aarch64-ifunc.patch + +# Purpose: Allow OS specific sections in section groups. +# Lifetime: Fixed in 2.42 (maybe) +Patch5005: binutils-special-sections-in-groups.patch + +# Purpose: Stop gold from aborting when input sections with the same name +# have different flags. +# Lifetime: Fixed in 2.42 (maybe) +Patch5006: binutils-gold-mismatched-section-flags.patch + +%if %{enable_new_dtags} +# Purpose: Change ld man page so that it says that --enable-new-dtags is the default. +# Lifetime: Permanent +Patch5007: binutils-update-linker-manual.patch +%endif + +# Purpose: Stop an abort when using dwp to process a file with no dwo links. +# Lifetime: Fixed in 2.42 (maybe) +Patch5008: binutils-gold-empty-dwp.patch + +#---------------------------------------------------------------------------- + +Provides: bundled(libiberty) + +%if %{with debug} +# Define this if you want to skip the strip step and preserve debug info. +# Useful for testing. +%define __debug_install_post : > %{_builddir}/%{?buildsubdir}/debugfiles.list +%define debug_package %{nil} +%endif + +# Perl, sed and touch are all used in the %%prep section of this spec file. +BuildRequires: autoconf, automake, perl, sed, coreutils, make, chrpath + +%if %{with clang} +BuildRequires: clang compiler-rt +%else + +# Use the GTS version of gcc to build the binutils so that the built static libraries +# (libfd.a, libopcodes.a libiberty.a libsframe.a) use the same LTO version as the one +# that will be used by consumers of GTS binutils. +# Note - during GTS bootstrap these have to be changed to the systemOS versions. +BuildRequires: gcc + + +%endif + +%if %{with gold} +# Gold needs bison in order to build gold/yyscript.c. The GOLD testsuite needs a static libc++ +BuildRequires: bison, m4, gcc-c++, libstdc++-static + +%if ! %{with clang} +BuildRequires: gcc-c++ +Conflicts: gcc-c++ < 4.0.0 +%endif +%endif + +%if %{without bootstrap} +BuildRequires: gettext, flex, jansson-devel +%if %{with systemzlib} +BuildRequires: zlib-devel +%endif +%endif + +%if %{with docs} +BuildRequires: texinfo >= 4.0 +# BZ 920545: We need pod2man in order to build the manual pages. +BuildRequires: /usr/bin/pod2man +%else +BuildRequires: findutils +%endif + +# Required for: ld-bootstrap/bootstrap.exp bootstrap with --static +# It should not be required for: ld-elf/elf.exp static {preinit,init,fini} array +%if %{with testsuite} +# relro_test.sh uses dc which is part of the bc rpm, hence its inclusion here. +# sharutils is needed so that we can uuencode the testsuite results. +BuildRequires: dejagnu, glibc-static, sharutils, bc, libstdc++ +%if %{with systemzlib} +BuildRequires: zlib-devel +%endif +%endif + +%if %{with debuginfod} +BuildRequires: elfutils-debuginfod-client-devel +%endif + +%define alternatives_cmd %{_root_sbindir}/alternatives +%define alternatives_cmdline %{alternatives_cmd} --altdir %{_sysconfdir}/alternatives --admindir %{_scl_root}/var/lib/alternatives + + +Requires(post): %{alternatives_cmd} +Requires(preun): %{alternatives_cmd} + +# We also need rm. +Requires(post): coreutils + +%if %{with gold} +# For now we make the binutils package require the gold sub-package. +# That way other packages that have a requirement on "binutils" but +# actually want gold will not have to be changed. In the future, if +# we decide to deprecate gold, we can remove this requirement, and +# then update other packages as necessary. +Requires: %{?_scl_prefix}binutils-gold >= %{version} +%endif + +# On ARM EABI systems, we do want -gnueabi to be part of the +# target triple. +%ifnarch %{arm} +%define _gnu %{nil} +%endif + +#---------------------------------------------------------------------------- + +%description +Binutils is a collection of binary utilities, including ar (for +creating, modifying and extracting from archives), as (a family of GNU +assemblers), gprof (for displaying call graph profile data), ld (the +GNU linker), nm (for listing symbols from object files), objcopy (for +copying and translating object files), objdump (for displaying +information from object files), ranlib (for generating an index for +the contents of an archive), readelf (for displaying detailed +information about binary files), size (for listing the section sizes +of an object or archive file), strings (for listing printable strings +from files), strip (for discarding symbols), and addr2line (for +converting addresses to file and line). + +#---------------------------------------------------------------------------- + +%package -n %{?_scl_prefix}binutils-devel%{binutils_ver} +Summary: BFD and opcodes static and dynamic libraries and header files +Provides: %{?_scl_prefix}binutils-static = %{version}-%{release} +%if %{with systemzlib} +Requires: zlib-devel +%endif +Requires: %{?_scl_prefix}binutils = %{version}-%{release} +# BZ 1215242: We need touch... +Requires: coreutils + +%description -n %{?_scl_prefix}binutils-devel%{binutils_ver} +This package contains BFD and opcodes static and dynamic libraries. + +The dynamic libraries are in this package, rather than a separate +base package because they are actually linker scripts that force +the use of the static libraries. This is because the API of the +BFD library is too unstable to be used dynamically. + +The static libraries are here because they are now needed by the +dynamic libraries. + +Developers starting new projects are strongly encouraged to consider +using libelf instead of BFD. + +# BZ 1924068. Since applications that use the BFD library are +# required to link against the static version, ensure that it retains +# its debug informnation. +# FIXME: Yes - this is being done twice. I have no idea why this +# second invocation is necessary but if both are not present the +# static archives will be stripped. +%undefine __brp_strip_static_archive + +#---------------------------------------------------------------------------- + +%if %{with gold} + +%package -n %{?_scl_prefix}binutils-gold%{binutils_ver} +Summary: The GOLD linker, a faster alternative to the BFD linker +Provides: %{?_scl_prefix}binutils-gold = %{version}-%{release} +Requires: %{?_scl_prefix}binutils >= %{version} + +%description -n %{?_scl_prefix}binutils-gold%{binutils_ver} +This package provides the GOLD linker, which can be used as an alternative to +the default binutils linker (ld.bfd). The GOLD is generally faster than the +BFD linker, and it supports features such as Identical Code Folding and +Incremental linking. Unfortunately it is not as well maintained as the BFD +linker, and it may become deprecated in the future. + +# The higher of these two numbers determines the default linker. +%{!?ld_gold_priority:%global ld_gold_priority 30} + +%endif + +%{!?ld_bfd_priority: %global ld_bfd_priority 50} + +#---------------------------------------------------------------------------- + +%if %{with gprofng} +%package -n %{?_scl_prefix}gprofng%{binutils_ver} +Summary: Next Generating code profiling tool +Provides: %{?_scl_prefix}binutils-gprofng = %{version}-%{release} +Requires: %{?_scl_prefix}binutils = %{version}-%{release} + +%description -n %{?_scl_prefix}gprofng%{binutils_ver} +GprofNG is the GNU Next Generation Profiler for analyzing the performance +of Linux applications. + +%endif + +#---------------------------------------------------------------------------- + +%if %{with crossbuilds} + +# Uncomment this when testing changes to the spec file, especially the cross building support. +# Remember to comment it out again once the testing is complete. +# %%undefine with_testsuite + +# The list of cross targets to build. +%global system %{_vendor}-linux +%global cross_targets aarch64-%{system} ppc64le-%{system} s390x-%{system} x86_64-%{system} + +%package -n %{?_scl_prefix}cross-binutils-aarch64%{binutils_ver} +Summary: Cross targeted AArch64 binutils for developer use. Not intended for production. +Provides: cross-binutils-aarch64 = %{version}-%{release} +Requires: coreutils +%if %{with systemzlib} +Requires: zlib-devel +%endif +BuildRequires: autoconf automake perl sed coreutils make gcc findutils gcc-c++ +ExcludeArch: aarch64-linux-gnu aarch64-%{_vendor}-linux + +%description -n %{?_scl_prefix}cross-binutils-aarch64%{binutils_ver} +This package contains an AArch64 cross targeted version of the binutils for +use by developers. It is NOT INTENDED FOR PRODUCTION use. + + +%package -n %{?_scl_prefix}cross-binutils-ppc64le%{binutils_ver} +Summary: Cross targeted PPC64LE binutils for developer use. Not intended for production. +Provides: cross-binutils-ppc64le = %{version}-%{release} +Requires: coreutils +%if %{with systemzlib} +Requires: zlib-devel +%endif +BuildRequires: autoconf automake perl sed coreutils make gcc findutils gcc-c++ +ExcludeArch: ppc64le-linux-gnu ppc64le-%{_vendor}-linux + +%description -n %{?_scl_prefix}cross-binutils-ppc64le%{binutils_ver} +This package contains a PPC64LE cross targeted version of the binutils for +use by developers. It is NOT INTENDED FOR PRODUCTION use. + + +%package -n %{?_scl_prefix}cross-binutils-s390x%{binutils_ver} +Summary: Cross targeted S390X binutils for developer use. Not intended for production. +Provides: cross-binutils-s390x = %{version}-%{release} +Requires: coreutils +%if %{with systemzlib} +Requires: zlib-devel +%endif +BuildRequires: autoconf automake perl sed coreutils make gcc findutils gcc-c++ +ExcludeArch: s390x-linux-gnu s390x-%{_vendor}-linux + +%description -n %{?_scl_prefix}cross-binutils-s390x%{binutils_ver} +This package contains a S390X cross targeted version of the binutils for +use by developers. It is NOT INTENDED FOR PRODUCTION use. + + +%package -n %{?_scl_prefix}cross-binutils-x86_64%{binutils_ver} +Summary: Cross targeted X86_64 binutils for developer use. Not intended for production. +Provides: cross-binutils-x86_64 = %{version}-%{release} +Requires: coreutils +%if %{with systemzlib} +Requires: zlib-devel +%endif +BuildRequires: autoconf automake perl sed coreutils make gcc findutils gcc-c++ +ExcludeArch: x86_64-linux-gnu x86_64-%{_vendor}-linux i686-linux-gnu i686-%{_vendor}-linux + +%description -n %{?_scl_prefix}cross-binutils-x86_64%{binutils_ver} +This package contains a X86_64 cross targeted version of the binutils for +use by developers. It is NOT INTENDED FOR PRODUCTION use. + +%endif + +#---------------------------------------------------------------------------- + +%prep +# NB/ Do not add {?_scl_prefix} to the -n option below. The binutils sources +# uppack into a directory called binutils-VERSION not gcc-toolset-13-binutils-VERSION. +%autosetup -p1 -n binutils-%{version} + +# On ppc64 and aarch64, we might use 64KiB pages +sed -i -e '/#define.*ELF_COMMONPAGESIZE/s/0x1000$/0x10000/' bfd/elf*ppc.c +sed -i -e '/#define.*ELF_COMMONPAGESIZE/s/0x1000$/0x10000/' bfd/elf*aarch64.c +sed -i -e '/common_pagesize/s/4 /64 /' gold/powerpc.cc +sed -i -e '/pagesize/s/0x1000,/0x10000,/' gold/aarch64.cc + +# LTP issues +perl -pi -e 's/i\[3-7\]86/i[34567]86/g' */conf* +sed -i -e 's/%''{release}/%{release}/g' bfd/Makefile{.am,.in} +sed -i -e '/^libopcodes_la_\(DEPENDENCIES\|LIBADD\)/s,$, ../bfd/libbfd.la,' opcodes/Makefile.{am,in} + +# Build libbfd.so and libopcodes.so with -Bsymbolic-functions if possible. +if gcc %{optflags} -v --help 2>&1 | grep -q -- -Bsymbolic-functions; then +sed -i -e 's/^libbfd_la_LDFLAGS = /&-Wl,-Bsymbolic-functions /' bfd/Makefile.{am,in} +sed -i -e 's/^libopcodes_la_LDFLAGS = /&-Wl,-Bsymbolic-functions /' opcodes/Makefile.{am,in} +fi + +# $PACKAGE is used for the gettext catalog name. +sed -i -e 's/^ PACKAGE=/ PACKAGE=%{?cross}/' */configure + +# Undo the name change to run the testsuite. +for tool in binutils gas ld +do + sed -i -e "2aDEJATOOL = $tool" $tool/Makefile.am + sed -i -e "s/^DEJATOOL = .*/DEJATOOL = $tool/" $tool/Makefile.in +done + +# Touch the .info files so that they are newer then the .texi files and +# hence do not need to be rebuilt. This eliminates the need for makeinfo. +# The -print is there just to confirm that the command is working. +%if %{without docs} + find . -name *.info -print -exec touch {} \; +%else +# If we are creating the docs, touch the texi files so that the info and +# man pages will be rebuilt. + find . -name *.texi -print -exec touch {} \; +%endif + +%ifarch %{power64} +%define _target_platform %{_arch}-%{_vendor}-%{_host_os} +%endif + +#---------------------------------------------------------------------------- + +%build + +# Building is now handled by functions which allow for both native and cross +# builds. Builds are created in their own sub-directory of the sources, which +# allows for both native and cross builds to be created at the same time. + +# compute_global_configuration() +# Build the CARGS variable which contains the global configuration arguments. +compute_global_configuration() +{ + CARGS="--quiet \ + --build=%{_target_platform} \ + --host=%{_target_platform} \ + --enable-ld \ + --enable-plugins \ + --enable-64-bit-bfd \ + --with-bugurl=https://gitee.com/src-openeuler/binutils-2.42/issues/" + +%if %{without bootstrap} + CARGS="$CARGS --enable-jansson=yes" +%endif + +%if %{with debuginfod} + CARGS="$CARGS --with-debuginfod" +%endif + +%if %{with gprofng} + CARGS="$CARGS --enable-gprofng=yes" +%else + CARGS="$CARGS --enable-gprofng=no" +%endif + +%if %{with systemzlib} + CARGS="$CARGS --with-system-zlib" +%endif + +%if %{default_compress_debug} + CARGS="$CARGS --enable-compressed-debug-sections=all" +%else + CARGS="$CARGS --enable-compressed-debug-sections=none" +%endif + +%if %{default_generate_notes} + CARGS="$CARGS --enable-generate-build-notes=yes" +%else + CARGS="$CARGS --enable-generate-build-notes=no" +%endif + +%if %{default_relro} + CARGS="$CARGS --enable-relro=yes" +%else + CARGS="$CARGS --enable-relro=no" +%endif + +%if %{enable_deterministic_archives} + CARGS="$CARGS --enable-deterministic-archives" +%else + CARGS="$CARGS --enable-deterministic-archives=no" +%endif + +%if %{warn_for_executable_stacks} + CARGS="$CARGS --enable-warn-execstack=yes" + CARGS="$CARGS --enable-default-execstack=no" +%if %{error_for_executable_stacks} + CARGS="$CARGS --enable-error-execstack=yes" +%endif +%else + CARGS="$CARGS --enable-warn-execstack=no" +%endif + +%if %{warn_for_rwx_segments} + CARGS="$CARGS --enable-warn-rwx-segments=yes" +%if %{error_for_rwx_segments} + CARGS="$CARGS --enable-error-rwx-segments=yes" +%endif +%else + CARGS="$CARGS --enable-warn-rwx-segments=no" +%endif + +%if %{enable_lto} + CARGS="$CARGS --enable-lto" +%endif + +%if %{enable_new_dtags} + CARGS="$CARGS --enable-new-dtags --disable-rpath" +%endif + +%if %{enable_separate_code} + CARGS="$CARGS --enable-separate-code=yes" +%endif + +%if %{enable_threading} + CARGS="$CARGS --enable-threads=yes" +%else + CARGS="$CARGS --enable-threads=no" +%endif +} + +# run_target_configuration() +# Create and configure the build tree. +# $1 is the target architecture +# $2 is 1 if this is a native build +# $3 is 1 if shared libraries should be built +# +run_target_configuration() +{ + local target="$1" + local native="$2" + local shared="$3" + local builddir=build-$target + + # Create a build directory + rm -rf $builddir + mkdir $builddir + pushd $builddir + + echo "BUILDING the Binutils for TARGET $target (native ? $native) (shared ? $shared)" + + %set_build_flags + +%ifarch %{power64} + export CFLAGS="$RPM_OPT_FLAGS -Wno-error" +%else + export CFLAGS="$RPM_OPT_FLAGS" +%endif + +%if %{with debug} + %undefine _fortify_level + export CFLAGS="$CFLAGS -O0 -ggdb2 -Wno-error" +%endif + + export CXXFLAGS="$CXXFLAGS $CFLAGS" + + # BZ 1541027 - include the linker flags from %%{_vendor}-rpm-config as well. + export LDFLAGS=$RPM_LD_FLAGS + +%if %{enable_new_dtags} + # Build the tools with new dtags, as well as supporting their generation by the linker. + export LDFLAGS="$LDFLAGS -Wl,--enable-new-dtags" +%endif + + if test x$native == x1 ; then + # Extra targets to build along with the native one. + # + # BZ 1920373: Enable PEP support for all targets as the PERF package's + # testsuite expects to be able to read PE format files ragrdless of + # the host's architecture. + case $target in + s390*) + # Note - The s390-linux target is there so that the GOLD linker will + # build. By default, if configured for just s390x-linux, the GOLD + # configure system will only include support for 64-bit targets, but + # the s390x gold backend uses both 32-bit and 64-bit templates. + TARGS="--enable-targets=s390-linux,s390x-linux,x86_64-pep" + ;; + ia64*) + TARGS="--enable-targets=ia64-linux,x86_64-pep" + ;; + ppc64-*) + TARGS="--enable-targets=powerpc64le-linux,x86_64-pep" + ;; + ppc64le*) + TARGS="--enable-targets=powerpc-linux,x86_64-pep" + ;; + *) + TARGS="--enable-targets=x86_64-pep" + ;; + esac + + # Set up the sysroot and paths. + SARGS="--with-sysroot=/ \ + --prefix=%{_prefix} \ + --libdir=%{_libdir} \ + --sysconfdir=%{_sysconfdir}" +%if %{with gold} + SARGS="$SARGS --enable-gold=default" +%else + SARGS="$SARGS --disable-gold" +%endif + + else # Cross builds + + # No extra targets are supported. + TARGS="" + + # Disable the GOLD linker for cross builds because although it does + # support sysroots specified on the command line, it does not support + # them in linker scripts via the =/$SYSROOT prefix. + SARGS="--with-sysroot=yes \ + --program-prefix=$target- \ + --prefix=%{_prefix}/$target \ + --libdir=%{_libdir} \ + --exec-prefix=%{_usr} \ + --sysconfdir=%{_sysconfdir} \ + --disable-gold" + fi + + if test x$shared == x1 ; then + RARGS="--enable-shared" + else + RARGS="--disable-shared" + fi + + ../configure --target=$target $CARGS $SARGS $RARGS $TARGS || cat config.log + + popd +} + +# build_target () +# Builds a configured set of sources. +# $1 is the target architecture +build_target() +{ + local target="$1" + local builddir=build-$target + + pushd $builddir + +%if %{with docs} + # Because of parallel building, info has to be made after all. + %make_build %{_smp_mflags} tooldir=%{_prefix} all + %make_build %{_smp_mflags} tooldir=%{_prefix} info +%else + %make_build %{_smp_mflags} tooldir=%{_prefix} MAKEINFO=true all +%endif + + popd +} + +# run_tests() +# Test a built (but not installed) binutils. +# $1 is the target architecture +# $2 is 1 if this is a native build +# +run_tests() +{ + local target="$1" + local native="$2" + + echo "TESTING the binutils FOR TARGET $target (native ? $native)" + + # Do not use %%check as it is run after %%install where libbfd.so is rebuilt + # with -fvisibility=hidden no longer being usable in its shared form. +%if %{without testsuite} + echo ================ $target == TESTSUITE DISABLED ==================== + return +%endif + + pushd build-$target + + # FIXME: I have not been able to find a way to capture a "failed" return + # value from "make check" without having it also stop the build. So in + # order to obtain the logs from the test runs if a check fails I have to + # run the tests twice. Once to generate the logs and then a second time + # to generate the correct exit code. + + echo ================ $target == TEST RUN 1 ============================= + + # Run the tests and accumulate the logs - but ignore failures... + + if test x$native == x1 ; then + make -k check-gas check-binutils check-ld < /dev/null || : +%if %{with gold} + # The GOLD testsuite always returns an error code, even if no tests fail. + make -k check-gold < /dev/null || : +%endif + else + # Do not try running linking tests for the cross-binutils. + make -k check-gas check-binutils < /dev/null || : + fi + + for f in {gas/testsuite/gas,ld/ld,binutils/binutils}.sum + do + if [ -f $f ]; then + cat $f + fi + done + +%if %{with gold} + if [ -f gold/test-suite.log ]; then + cat gold/test-suite.log + fi + if [ -f gold/testsuite/test-suite.log ]; then + cat gold/testsuite/*.log + fi +%endif + + for file in {gas/testsuite/gas,ld/ld,binutils/binutils}.{sum,log} + do + if [ -f $file ]; then + ln $file binutils-$target-$(basename $file) || : + fi + done + + tar cjf binutils-$target.tar.xz binutils-$target-*.{sum,log} + uuencode binutils-$target.tar.xz binutils-$target.tar.xz + rm -f binutils-$target.tar.xz binutils-$target-*.{sum,log} + +%if %{with gold} + if [ -f gold/testsuite/test-suite.log ]; then + tar cjf binutils-$target-gold.log.tar.xz gold/testsuite/*.log + uuencode binutils-$target-gold.log.tar.xz binutils-$target-gold.log.tar.xz + rm -f binutils-$target-gold.log.tar.xz + fi +%endif + + echo ================ $target == TEST RUN 2 ============================= + + # Run the tests and this time fail if there are any errors. + + if test x$native == x1 ; then + make -k check-gas check-binutils check-ld < /dev/null + # Ignore the gold tests - they always fail + else + # Do not try running linking tests for the cross-binutils. + make -k check-gas check-binutils < /dev/null + fi + + popd +} + +#---------------------------------------------------------------------------- + +# There is a problem with the clang+libtool+lto combination. +# The LDFLAGS containing -flto are not being passed when linking the +# libbfd.so, so the build fails. Solution: disable LTO. +%if %{with clang} +%define enable_lto 0 +%endif + +%if %{with clang} +%define _with_cc_clang 1 +%endif + +# Disable LTO on arm due to: +# https://bugzilla.redhat.com/show_bug.cgi?id=1918924 +%ifarch %{arm} +%define enable_lto 0 +%endif + +%if !0%{?enable_lto} +%global _lto_cflags %{nil} +%endif + +compute_global_configuration + +# Build the native configuration. +run_target_configuration %{_target_platform} 1 %{enable_shared} +build_target %{_target_platform} +run_tests %{_target_platform} 1 + +%if %{with crossbuilds} + +# Build the cross configurations. +for f in %{cross_targets}; do + + # Skip the native build. + if test x$f != x%{_target_platform}; then + # We could improve the cross build's size by enabling shared libraries but + # the produced binaries may be less convenient in the embedded environment. + run_target_configuration $f 0 0 + build_target $f + run_tests $f 0 + fi +done + +%endif + +#---------------------------------------------------------------------------- + +%install + +mkdir -p %{buildroot}%{_scl_root}/etc/alternatives %{buildroot}%{_scl_root}/var/lib/alternatives +# install_binutils() +# Install the binutils. +# $1 is the target architecture +# $2 is 1 if this is a native build +# $3 is 1 if shared libraries should be built +# +install_binutils() +{ + local target="$1" + local native="$2" + local shared="$3" + + local local_root=%{buildroot}/%{_prefix} + local local_bindir=$local_root/bin + local local_libdir=%{buildroot}%{_libdir} + local local_mandir=$local_root/share/man/man1 + local local_incdir=$local_root/include + local local_infodir=$local_root/share/info + local local_libdir + + mkdir -p $local_libdir + mkdir -p $local_incdir + mkdir -p $local_mandir + mkdir -p $local_infodir + + echo "INSTALLING the binutils FOR TARGET $target (native ? $native) (shared ? $shared)" + + pushd build-$target + + if test x$native == x1 ; then + +%if %{with docs} + %make_install DESTDIR=%{buildroot} + make prefix=%{buildroot}%{_prefix} infodir=$local_infodir install-info +%else + %make_install DESTDIR=%{buildroot} MAKEINFO=true +%endif + + # Rebuild the static libiaries with -fPIC. + # It would be nice to build the static libraries with -fno-lto so that + # they can be used by programs that are built with a different version + # of GCC from the one used to build the libraries, but this will trigger + # warnings from annocheck. + + # Future: Remove libiberty together with its header file, projects should bundle it. + %make_build -s -C libiberty clean + %set_build_flags + %make_build -s CFLAGS="-g -fPIC $RPM_OPT_FLAGS" -C libiberty + + # Without the hidden visibility the 3rd party shared libraries would export + # the bfd non-stable ABI. + %make_build -s -C bfd clean + %set_build_flags + %make_build -s CFLAGS="-g -fPIC $RPM_OPT_FLAGS -fvisibility=hidden" -C bfd + + %make_build -s -C opcodes clean + %set_build_flags + %make_build -s CFLAGS="-g -fPIC $RPM_OPT_FLAGS" -C opcodes + + %make_build -s -C libsframe clean + %set_build_flags + %make_build -s CFLAGS="-g -fPIC $RPM_OPT_FLAGS" -C libsframe + + install -m 644 bfd/.libs/libbfd.a $local_libdir + install -m 644 libiberty/libiberty.a $local_libdir + install -m 644 ../include/libiberty.h $local_incdir + install -m 644 opcodes/.libs/libopcodes.a $local_libdir + install -m 644 libsframe/.libs/libsframe.a $local_libdir + + # Remove Windows/Novell only man pages + rm -f $local_mandir/{dlltool,nlmconv,windres,windmc}* +%if %{without docs} + rm -f $local_mandir/{addr2line,ar,as,c++filt,elfedit,gprof,ld,nm,objcopy,objdump,ranlib,readelf,size,strings,strip}* + rm -f $local_infodir/{as,bfd,binutils,gprof,ld}* +%endif + +%if %{enable_shared} + chmod +x $local_libdir/lib*.so* + chrpath -d $local_libdir/lib*.so* + chmod +x $local_bindir/* + chrpath -d $local_bindir/* +%endif + + # Prevent programs from linking against libbfd and libopcodes + # dynamically, as they are changed far too often. + rm -f $local_libdir/lib{bfd,opcodes}.so + + # Remove libtool files, which reference the .so libs + rm -f %local_libdir/lib{bfd,opcodes}.la + + # Sanity check --enable-64-bit-bfd really works. + grep '^#define BFD_ARCH_SIZE 64$' $local_incdir/bfd.h + # Fix multilib conflicts of generated values by __WORDSIZE-based expressions. +%ifarch %{ix86} x86_64 ppc %{power64} s390 s390x sh3 sh4 sparc sparc64 arm + sed -i -e '/^#include "ansidecl.h"/{p;s~^.*$~#include ~;}' \ + -e 's/^#define BFD_DEFAULT_TARGET_SIZE \(32\|64\) *$/#define BFD_DEFAULT_TARGET_SIZE __WORDSIZE/' \ + -e 's/^#define BFD_HOST_64BIT_LONG [01] *$/#define BFD_HOST_64BIT_LONG (__WORDSIZE == 64)/' \ + -e 's/^#define BFD_HOST_64_BIT \(long \)\?long *$/#if __WORDSIZE == 32\ +#define BFD_HOST_64_BIT long long\ +#else\ +#define BFD_HOST_64_BIT long\ +#endif/' \ + -e 's/^#define BFD_HOST_U_64_BIT unsigned \(long \)\?long *$/#define BFD_HOST_U_64_BIT unsigned BFD_HOST_64_BIT/' \ + $local_incdir/bfd.h +%endif + + touch -r ../bfd/bfd-in2.h $local_incdir/bfd.h + + # Generate .so linker scripts for dependencies; imported from glibc/Makerules: + + # This fragment of linker script gives the OUTPUT_FORMAT statement + # for the configuration we are building. + OUTPUT_FORMAT="\ +/* Ensure this .so library will not be used by a link for a different format + on a multi-architecture system. */ +$(gcc $CFLAGS $LDFLAGS -shared -x c /dev/null -o /dev/null -Wl,--verbose -v 2>&1 | sed -n -f "%{SOURCE2}")" + + tee $local_libdir/libbfd.so <> binutils.lang + cat bfd.lang >> binutils.lang + cat gas.lang >> binutils.lang + cat gprof.lang >> binutils.lang + + if [ -x ld/ld-new ]; then + %find_lang ld + cat ld.lang >> binutils.lang + fi + + if [ -x gold/ld-new ]; then + %find_lang gold + cat gold.lang >> binutils.lang + fi + + popd +} + +#---------------------------------------------------------------------------- + +install_binutils %{_target_platform} 1 %{enable_shared} + +%if %{with crossbuilds} + +for f in %{cross_targets}; do + if test x$f != x%{_target_platform}; then + install_binutils $f 0 0 + fi +done + +%endif + +# Stop check-rpaths from complaining about standard runpaths. +export QA_RPATHS=0x0003 + +#---------------------------------------------------------------------------- + +%if %{with gold} +%post -n %{?_scl_prefix}binutils-gold%{binutils_ver} + +%{alternatives_cmdline} --install %{_bindir}/ld ld \ + %{_bindir}/ld.gold %{ld_gold_priority} +exit 0 +%endif + +%post + +# Remove the /usr/bin/ld file so that the alternatives program +# can replace it with a symbolic link. +%__rm -f %{_bindir}/ld +%{alternatives_cmdline} --install %{_bindir}/ld ld \ + %{_bindir}/ld.bfd %{ld_bfd_priority} + +# Do not run "alternatives --auto ld" here. Leave the setting to +# however the user previously had it set. See BZ 1592069 for more details. + +%ldconfig_post + +exit 0 + +#---------------------------------------------------------------------------- + +# Note: $1 == 0 means that there is an uninstall in progress. +# $1 == 1 means that there is an upgrade in progress. + +%if %{with gold} +%preun -n %{?_scl_prefix}binutils-gold%{binutils_ver} +if [ $1 = 0 ]; then + %{alternatives_cmdline} --remove ld %{_bindir}/ld.gold +fi +exit 0 +%endif + +%preun +if [ $1 = 0 ]; then + %{alternatives_cmdline} --remove ld %{_bindir}/ld.bfd +fi +touch %{_bindir}/ld +exit 0 + +#---------------------------------------------------------------------------- + +%postun +%ldconfig_postun + +#---------------------------------------------------------------------------- + +%files -f build-%{_target_platform}/binutils.lang +%dir %{_scl_root}/etc/alternatives +%dir %{_scl_root}/var/lib/alternatives + +%if %{with crossbuilds} +%if "%{_target_platform}" != "aarch64-%{system}" +%exclude /usr/aarch64-%{system}/* +%exclude /usr/bin/aarch64-%{system}-* +%endif + +%if "%{_target_platform}" != "ppc64le-%{system}" +%exclude /usr/ppc64le-%{system}/* +%exclude /usr/bin/ppc64le-%{system}-* +%endif + +%if "%{_target_platform}" != "s390x-%{system}" +%exclude /usr/s390x-%{system}/* +%exclude /usr/bin/s390x-%{system}-* +%endif + +%if "%{_target_platform}" != "x86_64-%{system}" +%exclude /usr/x86_64-%{system}/* +%exclude /usr/bin/x86_64-%{system}-* +%endif +%endif + +%{_bindir}/[!l]* +# %%verify(symlink) does not work for some reason, so using "owner" instead. +%verify(owner) %{_bindir}/ld +%{_bindir}/ld.bfd +# Comment it out temporarily, use IBLS1V to track it. +# %{_libdir}/*\.la +%if %{with gprofng} +%exclude %{_bindir}/gp-* +%exclude %{_bindir}/gprofng +%endif + +%if %{with docs} +%{_mandir}/man1/ +%exclude %{_mandir}/man1/gp* + +%{_infodir}/as.info* +%{_infodir}/binutils.info* +%{_infodir}/ld.info* +%{_infodir}/ldint.info* +%{_infodir}/bfd.info* +%{_infodir}/ctf-spec.info* +%{_infodir}/gprof.info* +%{_infodir}/sframe-spec.info* + +%if %{with gprofng} +%exclude %{_infodir}/gprofng* +%endif +%endif + +%if %{enable_shared} +%{_libdir}/lib*.so +%{_libdir}/lib*.so.* +%exclude %{_libdir}/libbfd.so +%exclude %{_libdir}/libopcodes.so +%exclude %{_libdir}/libctf.a +%exclude %{_libdir}/libctf-nobfd.a + +%dir %{_libdir}/bfd-plugins +%{_libdir}/bfd-plugins/libdep.so +%endif + +%if %{with debug} +%dir %{_libdir}/bfd-plugins +%{_libdir}/bfd-plugins/libdep.a +%endif + +%files -n %{?_scl_prefix}binutils-devel%{binutils_ver} +%{_prefix}/include/* +%{_libdir}/lib*.a +%{_libdir}/libbfd.so +%{_libdir}/libopcodes.so +%exclude %{_libdir}/lib*.la + +%if %{with gold} +%files -n %{?_scl_prefix}binutils-gold%{binutils_ver} +%{_bindir}/%{?cross}ld.gold +%endif + +%if %{with gprofng} +%files -n %{?_scl_prefix}gprofng%{binutils_ver} +%{_bindir}/gp-* +%{_bindir}/gprofng +%{_mandir}/man1/gp-* +%{_mandir}/man1/gprofng* +%{_infodir}/gprofng.info.* +%dir %{_libdir}/gprofng +%{_libdir}/gprofng/* +%{_prefix}/usr/gprofng.rc +%endif + +%if %{with crossbuilds} + +%if "%{_target_platform}" != "aarch64-%{system}" +%files -n %{?_scl_prefix}cross-binutils-aarch64%{binutils_ver} +/usr/aarch64-%{system}/ +/usr/bin/aarch64-%{system}-* +%endif + +%if "%{_target_platform}" != "ppc64le-%{system}" +%files -n %{?_scl_prefix}cross-binutils-ppc64le%{binutils_ver} +/usr/ppc64le-%{system}/ +/usr/bin/ppc64le-%{system}-* +%endif + +%if "%{_target_platform}" != "s390x-%{system}" +%files -n %{?_scl_prefix}cross-binutils-s390x%{binutils_ver} +/usr/s390x-%{system}/ +/usr/bin/s390x-%{system}-* +%endif + +%if "%{_target_platform}" != "x86_64-%{system}" +%files -n %{?_scl_prefix}cross-binutils-x86_64%{binutils_ver} +/usr/x86_64-%{system}/ +/usr/bin/x86_64-%{system}-* +%endif + +%endif + +#---------------------------------------------------------------------------- +%changelog +* Wed Feb 12 2025 yinchuang - 2.42-2 +- Temporarily disable install *.la file + +* Thu Aug 15 2024 zhaoshujian - 2.42-1 +- Init binutils 2.42 +- Reference: https://gitlab.com/redhat/centos-stream/rpms/binutils + diff --git a/binutils-2.42.tar.xz b/binutils-2.42.tar.xz new file mode 100644 index 0000000000000000000000000000000000000000..810591acb51f4d37afd460e179a80dcfbb78fcc8 Binary files /dev/null and b/binutils-2.42.tar.xz differ diff --git a/binutils-export-demangle.h.patch b/binutils-export-demangle.h.patch new file mode 100644 index 0000000000000000000000000000000000000000..9716a8bfacaa5fd4e8cffb60f69e37cc614f2e19 --- /dev/null +++ b/binutils-export-demangle.h.patch @@ -0,0 +1,33 @@ +diff -rup binutils.orig/bfd/Makefile.am binutils-2.32/bfd/Makefile.am +--- binutils.orig/bfd/Makefile.am 2019-02-08 12:22:51.395684251 +0000 ++++ binutils-2.32/bfd/Makefile.am 2019-02-08 12:22:53.970664973 +0000 +@@ -33,7 +33,7 @@ bfdlibdir = @bfdlibdir@ + bfdincludedir = @bfdincludedir@ + bfdlib_LTLIBRARIES = libbfd.la + bfdinclude_HEADERS = $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \ +- $(INCDIR)/diagnostics.h $(INCDIR)/bfdlink.h ++ $(INCDIR)/diagnostics.h $(INCDIR)/bfdlink.h $(INCDIR)/demangle.h + else !INSTALL_LIBBFD + # Empty these so that the respective installation directories will not be created. + bfdlibdir = +diff -rup binutils.orig/bfd/Makefile.in binutils-2.32/bfd/Makefile.in +--- binutils.orig/bfd/Makefile.in 2019-02-08 12:21:35.291254044 +0000 ++++ binutils-2.32/bfd/Makefile.in 2019-02-08 12:22:10.163992947 +0000 +@@ -249,7 +249,7 @@ am__can_run_installinfo = \ + esac + am__bfdinclude_HEADERS_DIST = $(INCDIR)/plugin-api.h bfd.h \ + $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \ +- $(INCDIR)/diagnostics.h $(INCDIR)/bfdlink.h ++ $(INCDIR)/diagnostics.h $(INCDIR)/bfdlink.h $(INCDIR)/demangle.h + HEADERS = $(bfdinclude_HEADERS) + RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +@@ -468,7 +468,7 @@ libbfd_la_LDFLAGS = $(am__append_1) -rel + @INSTALL_LIBBFD_FALSE@bfdinclude_HEADERS = $(am__append_2) + @INSTALL_LIBBFD_TRUE@bfdinclude_HEADERS = $(BFD_H) \ + @INSTALL_LIBBFD_TRUE@ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \ +-@INSTALL_LIBBFD_TRUE@ $(INCDIR)/diagnostics.h \ ++@INSTALL_LIBBFD_TRUE@ $(INCDIR)/diagnostics.h $(INCDIR)/demangle.h \ + @INSTALL_LIBBFD_TRUE@ $(INCDIR)/bfdlink.h $(am__append_2) + @INSTALL_LIBBFD_FALSE@rpath_bfdlibdir = @bfdlibdir@ + @INSTALL_LIBBFD_FALSE@noinst_LTLIBRARIES = libbfd.la diff --git a/binutils-gold-empty-dwp.patch b/binutils-gold-empty-dwp.patch new file mode 100644 index 0000000000000000000000000000000000000000..b716565985cffdb534678907617884a5ef8559f5 --- /dev/null +++ b/binutils-gold-empty-dwp.patch @@ -0,0 +1,11 @@ +--- binutils.orig/gold/dwp.cc 2023-05-02 13:26:44.075148082 +0100 ++++ binutils-2.40/gold/dwp.cc 2023-05-02 13:27:16.189130127 +0100 +@@ -2418,6 +2418,8 @@ main(int argc, char** argv) + { + Dwo_file exe_file(exe_filename); + exe_file.read_executable(&files); ++ if (files.empty()) ++ gold_fatal(_("Could not find any dwo links in specified EXE")); + } + + // Add any additional files listed on command line. diff --git a/binutils-gold-mismatched-section-flags.patch b/binutils-gold-mismatched-section-flags.patch new file mode 100644 index 0000000000000000000000000000000000000000..63dba2b4b10949050c3622a8eadcb639d4bb1b9f --- /dev/null +++ b/binutils-gold-mismatched-section-flags.patch @@ -0,0 +1,19 @@ +diff -rup binutils.orig/gold/layout.cc binutils-2.32/gold/layout.cc +--- binutils.orig/gold/layout.cc 2019-06-24 14:37:36.013086899 +0100 ++++ binutils-2.32/gold/layout.cc 2019-06-24 14:41:40.054517479 +0100 +@@ -868,6 +868,7 @@ Layout::get_output_section(const char* n + && (same_name->flags() & elfcpp::SHF_TLS) == 0) + os = same_name; + } ++#if 0 /* BZ 1722715, PR 17556. */ + else if ((flags & elfcpp::SHF_TLS) == 0) + { + elfcpp::Elf_Xword zero_flags = 0; +@@ -878,6 +879,7 @@ Layout::get_output_section(const char* n + if (p != this->section_name_map_.end()) + os = p->second; + } ++#endif + } + + if (os == NULL) diff --git a/binutils-libtool-lib64.patch b/binutils-libtool-lib64.patch new file mode 100644 index 0000000000000000000000000000000000000000..142fc7e27422785c5f5236eca2f6393ee6fdefa0 --- /dev/null +++ b/binutils-libtool-lib64.patch @@ -0,0 +1,236 @@ +diff -rcp ../binutils-2.20.51.0.7.original/bfd/configure ./bfd/configure +--- a/bfd/configure 2010-04-08 14:53:48.000000000 +0100 ++++ b/bfd/configure 2010-04-08 14:56:50.000000000 +0100 +@@ -10762,10 +10762,34 @@ + # before this can be enabled. + hardcode_into_libs=yes + ++ # find out which ABI we are using ++ libsuff= ++ case "$host_cpu" in ++ x86_64*|s390*|powerpc*|ppc*|sparc*) ++ echo 'int i;' > conftest.$ac_ext ++ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 ++ (eval $ac_compile) 2>&5 ++ ac_status=$? ++ echo "$as_me:$LINENO: \$? = $ac_status" >&5 ++ (exit $ac_status); }; then ++ case `/usr/bin/file conftest.$ac_objext` in ++ *64-bit*) ++ libsuff=64 ++ if test x"$sys_lib_search_path_spec" = x"/lib /usr/lib /usr/local/lib"; then ++ sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}" ++ fi ++ sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff}" ++ ;; ++ esac ++ fi ++ rm -rf conftest* ++ ;; ++ esac ++ + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` +- sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" ++ sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff} $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on +diff -rcp ../binutils-2.20.51.0.7.original/binutils/configure ./binutils/configure +--- a/binutils/configure 2010-04-08 14:53:45.000000000 +0100 ++++ b/binutils/configure 2010-04-08 14:56:21.000000000 +0100 +@@ -10560,10 +10560,34 @@ + # before this can be enabled. + hardcode_into_libs=yes + ++ # find out which ABI we are using ++ libsuff= ++ case "$host_cpu" in ++ x86_64*|s390*|powerpc*|ppc*|sparc*) ++ echo 'int i;' > conftest.$ac_ext ++ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 ++ (eval $ac_compile) 2>&5 ++ ac_status=$? ++ echo "$as_me:$LINENO: \$? = $ac_status" >&5 ++ (exit $ac_status); }; then ++ case `/usr/bin/file conftest.$ac_objext` in ++ *64-bit*) ++ libsuff=64 ++ if test x"$sys_lib_search_path_spec" = x"/lib /usr/lib /usr/local/lib"; then ++ sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}" ++ fi ++ sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff}" ++ ;; ++ esac ++ fi ++ rm -rf conftest* ++ ;; ++ esac ++ + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` +- sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" ++ sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff} $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on +diff -rcp ../binutils-2.20.51.0.7.original/gas/configure ./gas/configure +--- a/gas/configure 2010-04-08 14:53:47.000000000 +0100 ++++ b/gas/configure 2010-04-08 14:57:24.000000000 +0100 +@@ -10547,10 +10547,34 @@ + # before this can be enabled. + hardcode_into_libs=yes + ++ # find out which ABI we are using ++ libsuff= ++ case "$host_cpu" in ++ x86_64*|s390*|powerpc*|ppc*|sparc*) ++ echo 'int i;' > conftest.$ac_ext ++ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 ++ (eval $ac_compile) 2>&5 ++ ac_status=$? ++ echo "$as_me:$LINENO: \$? = $ac_status" >&5 ++ (exit $ac_status); }; then ++ case `/usr/bin/file conftest.$ac_objext` in ++ *64-bit*) ++ libsuff=64 ++ if test x"$sys_lib_search_path_spec" = x"/lib /usr/lib /usr/local/lib"; then ++ sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}" ++ fi ++ sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff}" ++ ;; ++ esac ++ fi ++ rm -rf conftest* ++ ;; ++ esac ++ + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` +- sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" ++ sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff} $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on +diff -rcp ../binutils-2.20.51.0.7.original/gprof/configure ./gprof/configure +--- a/gprof/configure 2010-04-08 14:53:45.000000000 +0100 ++++ b/gprof/configure 2010-04-08 14:57:50.000000000 +0100 +@@ -10485,10 +10485,34 @@ + # before this can be enabled. + hardcode_into_libs=yes + ++ # find out which ABI we are using ++ libsuff= ++ case "$host_cpu" in ++ x86_64*|s390*|powerpc*|ppc*|sparc*) ++ echo 'int i;' > conftest.$ac_ext ++ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 ++ (eval $ac_compile) 2>&5 ++ ac_status=$? ++ echo "$as_me:$LINENO: \$? = $ac_status" >&5 ++ (exit $ac_status); }; then ++ case `/usr/bin/file conftest.$ac_objext` in ++ *64-bit*) ++ libsuff=64 ++ if test x"$sys_lib_search_path_spec" = x"/lib /usr/lib /usr/local/lib"; then ++ sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}" ++ fi ++ sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff}" ++ ;; ++ esac ++ fi ++ rm -rf conftest* ++ ;; ++ esac ++ + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` +- sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" ++ sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff} $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on +diff -rcp ../binutils-2.20.51.0.7.original/ld/configure ./ld/configure +--- a/ld/configure 2010-04-08 14:53:44.000000000 +0100 ++++ b/ld/configure 2010-04-08 14:58:21.000000000 +0100 +@@ -10966,10 +10966,34 @@ + # before this can be enabled. + hardcode_into_libs=yes + ++ # find out which ABI we are using ++ libsuff= ++ case "$host_cpu" in ++ x86_64*|s390*|powerpc*|ppc*|sparc*) ++ echo 'int i;' > conftest.$ac_ext ++ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 ++ (eval $ac_compile) 2>&5 ++ ac_status=$? ++ echo "$as_me:$LINENO: \$? = $ac_status" >&5 ++ (exit $ac_status); }; then ++ case `/usr/bin/file conftest.$ac_objext` in ++ *64-bit*) ++ libsuff=64 ++ if test x"$sys_lib_search_path_spec" = x"/lib /usr/lib /usr/local/lib"; then ++ sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}" ++ fi ++ sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff}" ++ ;; ++ esac ++ fi ++ rm -rf conftest* ++ ;; ++ esac ++ + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` +- sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" ++ sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff} $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on +Only in .: .#libtool.m4 +Only in .: #libtool.m4# +diff -rcp ../binutils-2.20.51.0.7.original/opcodes/configure ./opcodes/configure +--- a/opcodes/configure 2010-04-08 14:53:45.000000000 +0100 ++++ b/opcodes/configure 2010-04-08 14:59:10.000000000 +0100 +@@ -10496,10 +10496,34 @@ + # before this can be enabled. + hardcode_into_libs=yes + ++ # find out which ABI we are using ++ libsuff= ++ case "$host_cpu" in ++ x86_64*|s390*|powerpc*|ppc*|sparc*) ++ echo 'int i;' > conftest.$ac_ext ++ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 ++ (eval $ac_compile) 2>&5 ++ ac_status=$? ++ echo "$as_me:$LINENO: \$? = $ac_status" >&5 ++ (exit $ac_status); }; then ++ case `/usr/bin/file conftest.$ac_objext` in ++ *64-bit*) ++ libsuff=64 ++ if test x"$sys_lib_search_path_spec" = x"/lib /usr/lib /usr/local/lib"; then ++ sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}" ++ fi ++ sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff}" ++ ;; ++ esac ++ fi ++ rm -rf conftest* ++ ;; ++ esac ++ + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` +- sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" ++ sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff} $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on diff --git a/binutils-no-config-h-check.patch b/binutils-no-config-h-check.patch new file mode 100644 index 0000000000000000000000000000000000000000..c89195a5b281de7b60e30ab5d795822978def42c --- /dev/null +++ b/binutils-no-config-h-check.patch @@ -0,0 +1,28 @@ +--- a/bfd/bfd-in.h 2012-08-02 10:56:34.561769686 +0100 ++++ b/bfd/bfd-in.h 2012-08-02 11:13:27.134797755 +0100 +@@ -25,11 +25,6 @@ + #ifndef __BFD_H_SEEN__ + #define __BFD_H_SEEN__ + +-/* PR 14072: Ensure that config.h is included first. */ +-#if !defined PACKAGE && !defined PACKAGE_VERSION +-#error config.h must be included before this header +-#endif +- + #ifdef __cplusplus + extern "C" { + #endif +--- a/bfd/bfd-in2.h 2012-08-02 10:56:34.349769680 +0100 ++++ b/bfd/bfd-in2.h 2012-08-02 11:13:40.015798113 +0100 +@@ -32,11 +32,6 @@ + #ifndef __BFD_H_SEEN__ + #define __BFD_H_SEEN__ + +-/* PR 14072: Ensure that config.h is included first. */ +-#if !defined PACKAGE && !defined PACKAGE_VERSION +-#error config.h must be included before this header +-#endif +- + #ifdef __cplusplus + extern "C" { + #endif diff --git a/binutils-special-sections-in-groups.patch b/binutils-special-sections-in-groups.patch new file mode 100644 index 0000000000000000000000000000000000000000..7de5a93f6164492be280ea08453181213e3ba5fd --- /dev/null +++ b/binutils-special-sections-in-groups.patch @@ -0,0 +1,27 @@ +--- binutils.orig/bfd/elf.c 2018-10-19 11:42:10.107277490 +0100 ++++ binutils-2.31.1/bfd/elf.c 2018-10-19 11:44:33.607105801 +0100 +@@ -830,7 +830,13 @@ setup_group (bfd *abfd, Elf_Internal_Shd + } + } + +- if (elf_group_name (newsect) == NULL) ++ if (elf_group_name (newsect) == NULL ++ /* OS specific sections might be in a group (eg ARM's ARM_EXIDX section) ++ but they will not have been added to the group because they do not ++ have contents that the ELF code in the BFD library knows how to ++ process. This is OK though - we rely upon the target backends to ++ handle these sections for us. */ ++ && hdr->sh_type < SHT_LOOS) + { + /* xgettext:c-format */ + _bfd_error_handler (_("%pB: no group info for section '%pA'"), +@@ -936,7 +942,8 @@ _bfd_elf_setup_sections (bfd *abfd) + else if (idx->shdr->bfd_section) + elf_sec_group (idx->shdr->bfd_section) = shdr->bfd_section; + else if (idx->shdr->sh_type != SHT_RELA +- && idx->shdr->sh_type != SHT_REL) ++ && idx->shdr->sh_type != SHT_REL ++ && idx->shdr->sh_type < SHT_LOOS) + { + /* There are some unknown sections in the group. */ + _bfd_error_handler diff --git a/binutils-update-linker-manual.patch b/binutils-update-linker-manual.patch new file mode 100644 index 0000000000000000000000000000000000000000..c7b6270fbbe27a00a3896ca942f4629ae1a7106d --- /dev/null +++ b/binutils-update-linker-manual.patch @@ -0,0 +1,36 @@ +diff -rup binutils.orig/ld/ld.1 binutils-2.41/ld/ld.1 +--- binutils.orig/ld/ld.1 2023-08-03 12:47:14.427004953 +0100 ++++ binutils-2.41/ld/ld.1 2023-08-03 12:49:10.672145873 +0100 +@@ -2669,7 +2669,7 @@ systems may not understand them. If you + \&\fB\-\-enable\-new\-dtags\fR, the new dynamic tags will be created as needed + and older dynamic tags will be omitted. + If you specify \fB\-\-disable\-new\-dtags\fR, no new dynamic tags will be +-created. By default, the new dynamic tags are not created. Note that ++created. By default, the new dynamic tags are created. Note that + those options are only available for ELF systems. + .IP \fB\-\-hash\-size=\fR\fInumber\fR 4 + .IX Item "--hash-size=number" +diff -rup binutils.orig/ld/ld.info binutils-2.41/ld/ld.info +--- binutils.orig/ld/ld.info 2023-08-03 12:47:14.427004953 +0100 ++++ binutils-2.41/ld/ld.info 2023-08-03 12:49:58.829204257 +0100 +@@ -2366,7 +2366,7 @@ GNU linker: + ‘--enable-new-dtags’, the new dynamic tags will be created as + needed and older dynamic tags will be omitted. If you specify + ‘--disable-new-dtags’, no new dynamic tags will be created. By +- default, the new dynamic tags are not created. Note that those ++ default, the new dynamic tags are created. Note that those + options are only available for ELF systems. + + ‘--hash-size=NUMBER’ +diff -rup binutils.orig/ld/ld.texi binutils-2.41/ld/ld.texi +--- binutils.orig/ld/ld.texi 2023-08-03 12:50:58.176276215 +0100 ++++ binutils-2.41/ld/ld.texi 2023-08-03 12:41:11.902610960 +0100 +@@ -2946,7 +2946,7 @@ systems may not understand them. If you + @option{--enable-new-dtags}, the new dynamic tags will be created as needed + and older dynamic tags will be omitted. + If you specify @option{--disable-new-dtags}, no new dynamic tags will be +-created. By default, the new dynamic tags are not created. Note that ++created. By default, the new dynamic tags are created. Note that + those options are only available for ELF systems. + + @kindex --hash-size=@var{number}