Rebase on FSF binutils 2.29.1 release.

- Retire: binutils-2.29-ppc64-plt-localentry0-disable.patch
- Retire: binutils-2.29-non-elf-orphan-skip.patch
This commit is contained in:
Nick Clifton 2017-09-26 11:51:07 +01:00
parent f9311f0bfc
commit 2ed6d815cc
5 changed files with 69 additions and 330 deletions

View File

@ -572,8 +572,8 @@ diff -rup binutils-2.26.orig/ld/emultempl/avrelf.em binutils-2.26/ld/emultempl/a
--- binutils-2.26.orig/ld/emultempl/avrelf.em 2016-02-19 09:35:36.698003274 +0000
+++ binutils-2.26/ld/emultempl/avrelf.em 2016-02-19 09:35:54.915106577 +0000
@@ -209,7 +209,7 @@ avr_finish (void)
else
elf_elfheader (abfd)->e_flags &= ~EF_AVR_LINKRELAX_PREPARED;
elf_elfheader (abfd)->e_flags &= ~EF_AVR_LINKRELAX_PREPARED;
}
- finish_default ();
+ gld${EMULATION_NAME}_finish ();
@ -592,7 +592,7 @@ diff -rup binutils-2.26.orig/ld/emultempl/elf32.em binutils-2.26/ld/emultempl/el
if [ "x${USE_LIBPATH}" = xyes ] ; then
@@ -1795,6 +1796,8 @@ output_rel_find (asection *sec, int isdy
return last;
in->owner, in);
}
+static int orphan_init_done = 0;

View File

@ -1,147 +0,0 @@
--- binutils.orig/ld/emultempl/elf32.em 2017-09-14 15:35:45.971100712 +0100
+++ binutils-2.29/ld/emultempl/elf32.em 2017-09-14 15:40:30.315782167 +0100
@@ -2011,6 +2011,29 @@ output_rel_find (asection *sec, int isdy
static int orphan_init_done = 0;
+/* Return whether IN is suitable to be part of OUT. */
+
+static bfd_boolean
+elf_orphan_compatible (asection *in, asection *out)
+{
+ /* Non-zero sh_info implies a section with SHF_INFO_LINK with
+ unknown semantics for the generic linker, or a SHT_REL/SHT_RELA
+ section where sh_info specifies a symbol table. (We won't see
+ SHT_GROUP, SHT_SYMTAB or SHT_DYNSYM sections here.) We clearly
+ can't merge SHT_REL/SHT_RELA using differing symbol tables, and
+ shouldn't merge sections with differing unknown semantics. */
+ if (elf_section_data (out)->this_hdr.sh_info
+ != elf_section_data (in)->this_hdr.sh_info)
+ return FALSE;
+ /* We can't merge two sections with differing SHF_EXCLUDE when doing
+ a relocatable link. */
+ if (bfd_link_relocatable (&link_info)
+ && ((elf_section_flags (out) ^ elf_section_flags (in)) & SHF_EXCLUDE) != 0)
+ return FALSE;
+ return _bfd_elf_match_sections_by_type (link_info.output_bfd, out,
+ in->owner, in);
+}
+
/* Place an orphan section. We use this to put random SHF_ALLOC
sections in the right segment. */
@@ -2067,8 +2090,9 @@ gld${EMULATION_NAME}_place_orphan (asect
lang_output_section_statement_type *os;
lang_output_section_statement_type *match_by_name = NULL;
int isdyn = 0;
- int iself = s->owner->xvec->flavour == bfd_target_elf_flavour;
- unsigned int sh_type = iself ? elf_section_type (s) : SHT_NULL;
+ int elfinput = s->owner->xvec->flavour == bfd_target_elf_flavour;
+ int elfoutput = link_info.output_bfd->xvec->flavour == bfd_target_elf_flavour;
+ unsigned int sh_type = elfinput ? elf_section_type (s) : SHT_NULL;
flagword flags;
asection *nexts;
@@ -2076,7 +2100,7 @@ gld${EMULATION_NAME}_place_orphan (asect
&& link_info.combreloc
&& (s->flags & SEC_ALLOC))
{
- if (iself)
+ if (elfinput)
switch (sh_type)
{
case SHT_RELA:
@@ -2098,6 +2122,8 @@ gld${EMULATION_NAME}_place_orphan (asect
}
if (!bfd_link_relocatable (&link_info)
+ && elfinput
+ && elfoutput
&& (s->flags & SEC_ALLOC) != 0
&& (elf_section_flags (s) & SHF_GNU_MBIND) != 0)
{
@@ -2148,23 +2174,18 @@ gld${EMULATION_NAME}_place_orphan (asect
lang_insert_orphan to create a new output section. */
constraint = SPECIAL;
- /* SEC_EXCLUDE is cleared when doing a relocatable link. But
- we can't merge 2 input sections with the same name when only
- one of them has SHF_EXCLUDE. Don't merge 2 sections with
- different sh_info. */
+ /* Check to see if we already have an output section statement
+ with this name, and its bfd section has compatible flags.
+ If the section already exists but does not have any flags
+ set, then it has been created by the linker, possibly as a
+ result of a --section-start command line switch. */
if (os->bfd_section != NULL
- && (elf_section_data (os->bfd_section)->this_hdr.sh_info
- == elf_section_data (s)->this_hdr.sh_info)
&& (os->bfd_section->flags == 0
- || ((!bfd_link_relocatable (&link_info)
- || (iself && (((elf_section_flags (s)
- ^ elf_section_flags (os->bfd_section))
- & SHF_EXCLUDE) == 0)))
- && ((s->flags ^ os->bfd_section->flags)
+ || (((s->flags ^ os->bfd_section->flags)
& (SEC_LOAD | SEC_ALLOC)) == 0
- && _bfd_elf_match_sections_by_type (link_info.output_bfd,
- os->bfd_section,
- s->owner, s))))
+ && (!elfinput
+ || !elfoutput
+ || elf_orphan_compatible (s, os->bfd_section)))))
{
/* We already have an output section statement with this
name, and its bfd section has compatible flags.
@@ -2253,8 +2274,8 @@ gld${EMULATION_NAME}_place_orphan (asect
else if ((flags & SEC_ALLOC) == 0)
;
else if ((flags & SEC_LOAD) != 0
- && ((iself && sh_type == SHT_NOTE)
- || (!iself && CONST_STRNEQ (secname, ".note"))))
+ && ((elfinput && sh_type == SHT_NOTE)
+ || (!elfinput && CONST_STRNEQ (secname, ".note"))))
place = &hold[orphan_interp];
else if ((flags & (SEC_LOAD | SEC_HAS_CONTENTS | SEC_THREAD_LOCAL)) == 0)
place = &hold[orphan_bss];
@@ -2264,8 +2285,8 @@ gld${EMULATION_NAME}_place_orphan (asect
place = &hold[orphan_tdata];
else if ((flags & SEC_READONLY) == 0)
place = &hold[orphan_data];
- else if (((iself && (sh_type == SHT_RELA || sh_type == SHT_REL))
- || (!iself && CONST_STRNEQ (secname, ".rel")))
+ else if (((elfinput && (sh_type == SHT_RELA || sh_type == SHT_REL))
+ || (!elfinput && CONST_STRNEQ (secname, ".rel")))
&& (flags & SEC_LOAD) != 0)
place = &hold[orphan_rel];
else if ((flags & SEC_CODE) == 0)
diff -rup binutils.orig/bfd/elf32-i386.c binutils-2.29/bfd/elf32-i386.c
--- binutils.orig/bfd/elf32-i386.c 2017-09-15 10:27:16.828950825 +0100
+++ binutils-2.29/bfd/elf32-i386.c 2017-09-15 10:27:38.962692771 +0100
@@ -6921,8 +6921,9 @@ elf_i386_link_setup_gnu_properties (stru
for (abfd = info->input_bfds;
abfd != NULL;
abfd = abfd->link.next)
- if ((abfd->flags
- & (DYNAMIC | BFD_LINKER_CREATED | BFD_PLUGIN)) == 0)
+ if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
+ && (abfd->flags
+ & (DYNAMIC | BFD_LINKER_CREATED | BFD_PLUGIN)) == 0)
{
htab->elf.dynobj = abfd;
dynobj = abfd;
diff -rup binutils.orig/bfd/elf64-x86-64.c binutils-2.29/bfd/elf64-x86-64.c
--- binutils.orig/bfd/elf64-x86-64.c 2017-09-15 10:27:16.820950918 +0100
+++ binutils-2.29/bfd/elf64-x86-64.c 2017-09-15 10:28:02.621416935 +0100
@@ -7466,8 +7466,9 @@ error_alignment:
for (abfd = info->input_bfds;
abfd != NULL;
abfd = abfd->link.next)
- if ((abfd->flags
- & (DYNAMIC | BFD_LINKER_CREATED | BFD_PLUGIN)) == 0)
+ if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
+ && (abfd->flags
+ & (DYNAMIC | BFD_LINKER_CREATED | BFD_PLUGIN)) == 0)
{
htab->elf.dynobj = abfd;
dynobj = abfd;

View File

@ -1,116 +0,0 @@
diff -rup binutils.orig/bfd/elf64-ppc.c binutils-2.29/bfd/elf64-ppc.c
--- binutils.orig/bfd/elf64-ppc.c 2017-07-31 10:48:13.642980052 +0100
+++ binutils-2.29/bfd/elf64-ppc.c 2017-07-31 10:48:37.386711582 +0100
@@ -4010,6 +4010,10 @@ struct ppc_link_hash_entry
with non-standard calling convention. */
unsigned int save_res:1;
+ /* Set if a duplicate symbol with non-zero localentry is detected,
+ even when the duplicate symbol does not provide a definition. */
+ unsigned int non_zero_localentry:1;
+
/* Contexts in which symbol is used in the GOT (or TOC).
TLS_GD .. TLS_EXPLICIT bits are or'd into the mask as the
corresponding relocs are encountered during check_relocs.
@@ -5018,7 +5022,7 @@ ppc64_elf_merge_symbol_attribute (struct
static bfd_boolean
ppc64_elf_merge_symbol (struct elf_link_hash_entry *h,
- const Elf_Internal_Sym *isym ATTRIBUTE_UNUSED,
+ const Elf_Internal_Sym *isym,
asection **psec ATTRIBUTE_UNUSED,
bfd_boolean newdef ATTRIBUTE_UNUSED,
bfd_boolean olddef ATTRIBUTE_UNUSED,
@@ -5026,6 +5030,8 @@ ppc64_elf_merge_symbol (struct elf_link_
const asection *oldsec ATTRIBUTE_UNUSED)
{
((struct ppc_link_hash_entry *) h)->fake = 0;
+ if ((STO_PPC64_LOCAL_MASK & isym->st_other) != 0)
+ ((struct ppc_link_hash_entry *) h)->non_zero_localentry = 1;
return TRUE;
}
@@ -6332,6 +6338,7 @@ is_elfv2_localentry0 (struct elf_link_ha
&& h->type == STT_FUNC
&& h->root.type == bfd_link_hash_defined
&& (STO_PPC64_LOCAL_MASK & h->other) == 0
+ && !((struct ppc_link_hash_entry *) h)->non_zero_localentry
&& is_ppc64_elf (h->root.u.def.section->owner)
&& abiversion (h->root.u.def.section->owner) >= 2);
}
@@ -8346,10 +8353,28 @@ ppc64_elf_tls_setup (struct bfd_link_inf
else if (!htab->do_multi_toc)
htab->params->no_multi_toc = 1;
+ /* Default to --no-plt-localentry, as this option can cause problems
+ with symbol interposition. For example, glibc libpthread.so and
+ libc.so duplicate many pthread symbols, with a fallback
+ implementation in libc.so. In some cases the fallback does more
+ work than the pthread implementation. __pthread_condattr_destroy
+ is one such symbol: the libpthread.so implementation is
+ localentry:0 while the libc.so implementation is localentry:8.
+ An app that "cleverly" uses dlopen to only load necessary
+ libraries at runtime may omit loading libpthread.so when not
+ running multi-threaded, which then results in the libc.so
+ fallback symbols being used and ld.so complaining. Now there
+ are workarounds in ld (see non_zero_localentry) to detect the
+ pthread situation, but that may not be the only case where
+ --plt-localentry can cause trouble. */
if (htab->params->plt_localentry0 < 0)
- htab->params->plt_localentry0
- = elf_link_hash_lookup (&htab->elf, "GLIBC_2.26",
- FALSE, FALSE, FALSE) != NULL;
+ htab->params->plt_localentry0 = 0;
+ if (htab->params->plt_localentry0
+ && elf_link_hash_lookup (&htab->elf, "GLIBC_2.26",
+ FALSE, FALSE, FALSE) == NULL)
+ info->callbacks->einfo
+ (_("%P: warning: --plt-localentry is especially dangerous without "
+ "ld.so support to detect ABI violations.\n"));
htab->tls_get_addr = ((struct ppc_link_hash_entry *)
elf_link_hash_lookup (&htab->elf, ".__tls_get_addr",
diff -rup binutils.orig/gold/powerpc.cc binutils-2.29/gold/powerpc.cc
--- binutils.orig/gold/powerpc.cc 2017-07-31 10:48:13.621980289 +0100
+++ binutils-2.29/gold/powerpc.cc 2017-07-31 10:48:37.387711571 +0100
@@ -7660,8 +7660,10 @@ Target_powerpc<size, big_endian>::scan_r
{
if (parameters->options().user_set_plt_localentry())
plt_localentry0 = parameters->options().plt_localentry();
- else
- plt_localentry0 = symtab->lookup("GLIBC_2.26", NULL) != NULL;
+ if (plt_localentry0
+ && symtab->lookup("GLIBC_2.26", NULL) == NULL)
+ gold_warning(_("--plt-localentry is especially dangerous without "
+ "ld.so support to detect ABI violations"));
}
this->plt_localentry0_ = plt_localentry0;
this->plt_localentry0_init_ = true;
diff -rup binutils.orig/ld/ld.texinfo binutils-2.29/ld/ld.texinfo
--- binutils.orig/ld/ld.texinfo 2017-07-31 10:48:13.601980515 +0100
+++ binutils-2.29/ld/ld.texinfo 2017-07-31 10:48:37.388711559 +0100
@@ -7600,6 +7600,24 @@ barrier in the call stub, or use LD_BIND
looks for calls to commonly used functions that create threads, and if
seen, adds the necessary barriers. Use these options to change the
default behaviour.
+
+@cindex PowerPC64 ELFv2 PLT localentry optimization
+@kindex --plt-localentry
+@kindex --no-plt-localentry
+@item --plt-localentry
+@itemx --no-localentry
+ELFv2 functions with localentry:0 are those with a single entry point,
+ie. global entry == local entry, and that have no requirement on r2
+(the TOC/GOT pointer) or r12, and guarantee r2 is unchanged on return.
+Such an external function can be called via the PLT without saving r2
+or restoring it on return, avoiding a common load-hit-store for small
+functions. The optimization is attractive, with up to 40% reduction
+in execution time for a small function, but can result in symbol
+interposition failures. Also, minor changes in a shared library,
+including system libraries, can cause a function that was localentry:0
+to become localentry:8. This will result in a dynamic loader
+complaint and failure to run. The option is experimental, use with
+care. @option{--no-plt-localentry} is the default.
@end table
@ifclear GENERIC

BIN
binutils-2.29.1.tar.xz Normal file

Binary file not shown.

View File

@ -7,7 +7,7 @@
# --without=testsuite: Do not run the testsuite. Default is to run it.
# --with=testsuite: Run the testsuite. Default when --with=debug is not to run it.
#---Start of Configure Options-----------------------------------------------------------------------
#---Start of Configure Options-----------------------------------------------
# BZ 1124342: Provide a way to enable deterministic archives.
# BZ 1195883: But do not do this by default.
@ -37,7 +37,7 @@
%undefine with_testsuite
%endif
#----End of Configure Options-----------------------------------------------------------------------
#----End of Configure Options------------------------------------------------
%if 0%{!?binutils_target:1}
%define binutils_target %{_target_platform}
@ -49,12 +49,12 @@
%define enable_shared 0
%endif
#---------------------------------------------------------------------------------
#----------------------------------------------------------------------------
Summary: A GNU collection of binary utilities
Name: %{?cross}binutils%{?_with_debug:-debug}
Version: 2.29
Release: 9%{?dist}
Version: 2.29.1
Release: 1%{?dist}
License: GPLv3+
Group: Development/Tools
URL: http://sources.redhat.com/binutils
@ -67,65 +67,62 @@ Source: http://ftp.gnu.org/gnu/binutils/binutils-%{version}.tar.xz
Source2: binutils-2.19.50.0.1-output-format.sed
# Purpose: Use /lib64 and /usr/lib64 instead of /lib and /usr/lib in the
# default library search path of 64-bit targets.
# 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).
# 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).
Patch01: binutils-2.20.51.0.2-libtool-lib64.patch
# Purpose: Appends a RHEL or Fedora release string to the generic binutils version string.
# Purpose: Appends a RHEL or Fedora release string to the generic binutils
# version string.
# Lifetime: Permanent. This is a RHEL/Fedora specific patch.
Patch02: binutils-2.25-version.patch
# Purpose: Prevent a seg-fault when attempting to pad a section with a NULL padding pointer.
# Purpose: Prevent a seg-fault when attempting to pad a section with a NULL
# padding pointer.
# Lifetime: Permanent - but should be contributed upstream and fixed.
# FIXME: Need a test case to reproduce the potential bug so
# FIXME: Need a test case to reproduce the potential bug so
# that the patch can be contributes.
Patch04: binutils-2.20.51.0.10-sec-merge-emit.patch
Patch03: binutils-2.20.51.0.10-sec-merge-emit.patch
# Purpose: Exports the demangle.h header file (associated with the libiberty sources) with
# the binutils-devel rpm.
# Purpose: Exports the demangle.h header file (associated with the libiberty
# sources) with the binutils-devel rpm.
# Lifetime: Permanent. This is a RHEL/Fedora specific patch.
Patch06: binutils-2.22.52.0.1-export-demangle.h.patch
Patch04: binutils-2.22.52.0.1-export-demangle.h.patch
# Purpose: Disables the check in the BFD library's 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 he order of inclusion is important.
# FIXME: It would be better if the packages using the BFD header were fixed so
# that they do include the header files in the correct order. It may also be
# necessary to add a way for a package to tell the bfd.h header that this check
# is not necessary.
Patch07: binutils-2.22.52.0.4-no-config-h-check.patch
# Purpose: Disables the check in the BFD library's 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 header were
# fixed so that they do include the header files in the correct
# order. It may also be necessary to add a way for a package to
# tell the bfd.h header that this check is not necessary.
Patch05: binutils-2.22.52.0.4-no-config-h-check.patch
# Purpose: Import H.J.Lu's Kernel LTO patch.
# Lifetime: Permanent, but needs continual updating.
# FIXME: Try removing....
Patch11: binutils-2.26-lto.patch
# FIXME: Try removing....
Patch06: binutils-2.26-lto.patch
# Purpose: Skip PR14918 linker test for ARM native targets.
# Lifetime: Permanent - but it should not be.
# FIXME: This patch should be contributed upstream.
Patch12: binutils-2.29-skip-rp14918-test-for-arm.patch
# FIXME: This patch should be contributed upstream.
Patch07: binutils-2.29-skip-rp14918-test-for-arm.patch
# Purpose: Include the filename concerned in readelf error messages.
# Lifetime: Permanent. This patch changes the format of readelf's output, making it
# better (IMHO) but also potentially breaking tools that depend upon readelf's
# current format. Hence it remains a local patch.
Patch13: binutils-2.29-filename-in-error-messages.patch
# Lifetime: Permanent. This patch changes the format of readelf's output,
# making it better (IMHO) but also potentially breaking tools that
# depend upon readelf's current format. Hence it remains a local
# patch.
Patch08: binutils-2.29-filename-in-error-messages.patch
# Purpose: Do not enable the PPC64 plt-localentry0 linker optimization by default.
# Lifetime: Fixed in 2.29.1.
Patch15: binutils-2.29-ppc64-plt-localentry0-disable.patch
# Purpose: Prevent a seg-fault in the linker by not attempting to place orphan ELF
# sections into a non-ELF output section.
# Lifetime: Fixed in 2.29.1.
Patch16: binutils-2.29-non-elf-orphan-skip.patch
#---------------------------------------------------------------------------------
#----------------------------------------------------------------------------
Provides: bundled(libiberty)
@ -200,7 +197,7 @@ Requires(preun): %{_sbindir}/alternatives
%define _gnu %{nil}
%endif
#---------------------------------------------------------------------------------
#----------------------------------------------------------------------------
%description
Binutils is a collection of binary utilities, including ar (for
@ -215,7 +212,7 @@ 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 devel
Summary: BFD and opcodes static and dynamic libraries and header files
@ -244,20 +241,18 @@ dynamic libraries.
Developers starting new projects are strongly encouraged to consider
using libelf instead of BFD.
#---------------------------------------------------------------------------------
#----------------------------------------------------------------------------
%prep
%setup -q -n binutils-%{version}
%patch01 -p1
%patch02 -p1
%patch03 -p1
%patch04 -p1
%patch06 -p1
%patch07 -p1
%patch11 -p1
%patch12 -p1
%patch13 -p1
%patch15 -p1
%patch16 -p1
%patch05 -p1
%patch06 -p1
%patch07 -p1
%patch08 -p1
# We cannot run autotools as there is an exact requirement of autoconf-2.59.
@ -295,7 +290,7 @@ touch */configure
%define _target_platform %{_arch}-%{_vendor}-%{_host_os}
%endif
#---------------------------------------------------------------------------------
#----------------------------------------------------------------------------
%build
echo target is %{binutils_target}
@ -415,7 +410,7 @@ uuencode binutils-%{_target_platform}.tar.bz2 binutils-%{_target_platform}.tar.b
rm -f binutils-%{_target_platform}.tar.bz2 binutils-%{_target_platform}-*.{sum,log}
%endif
#---------------------------------------------------------------------------------
#----------------------------------------------------------------------------
%install
rm -rf %{buildroot}
@ -539,12 +534,12 @@ if [ -x gold/ld-new ]; then
cat %{?cross}gold.lang >> %{?cross}binutils.lang
fi
#---------------------------------------------------------------------------------
#----------------------------------------------------------------------------
%clean
rm -rf %{buildroot}
#---------------------------------------------------------------------------------
#----------------------------------------------------------------------------
%post
%if "%{build_gold}" == "both"
@ -568,7 +563,7 @@ rm -rf %{buildroot}
exit 0
#---------------------------------------------------------------------------------
#----------------------------------------------------------------------------
%preun
%if "%{build_gold}" == "both"
@ -592,7 +587,7 @@ fi
exit 0
#---------------------------------------------------------------------------------
#----------------------------------------------------------------------------
%if %{isnative}
%postun
@ -606,7 +601,7 @@ exit 0
fi
%endif # isnative
#---------------------------------------------------------------------------------
#----------------------------------------------------------------------------
%files -f %{?cross}binutils.lang
%defattr(-,root,root,-)
@ -636,10 +631,11 @@ exit 0
%endif # enable_shared
%if %{isnative}
%if %{with docs}
%{_infodir}/[^b]*info*
%{_infodir}/binutils*info*
%endif
%endif # with docs
%files devel
%defattr(-,root,root,-)
@ -647,14 +643,20 @@ exit 0
%{_libdir}/lib*.a
%{_libdir}/libbfd.so
%{_libdir}/libopcodes.so
%if %{with docs}
%{_infodir}/bfd*info*
%endif # with docs
%endif # isnative
#---------------------------------------------------------------------------------
#----------------------------------------------------------------------------
%changelog
* Tue Sep 26 2017 Nick Clifton <nickc@redhat.com> 2.29.1-1
- Rebase on FSF binutils 2.29.1 release.
- Retire: binutils-2.29-ppc64-plt-localentry0-disable.patch
- Retire: binutils-2.29-non-elf-orphan-skip.patch
* Thu Sep 14 2017 Nick Clifton <nickc@redhat.com> 2.29-10
- Extend fix for PR 21884.
(#1491023)