[cross-binutils] Updated to binutils-2.23.51.0.3 and added support for aarch64

David Howells dhowells at fedoraproject.org
Fri Nov 2 15:04:14 UTC 2012


commit d08d987302b9699b2b810ee2cfa0afe9794bdd4e
Author: David Howells <dhowells at redhat.com>
Date:   Fri Nov 2 15:02:38 2012 +0000

    Updated to binutils-2.23.51.0.3 and added support for aarch64

 .gitignore                                        |   12 +-
 binutils-2.20.51.0.10-ppc64-pie.patch             |   30 +--
 binutils-2.22.52.0.3-fix-signedness-warning.patch |   20 --
 binutils-2.22.52.0.4-no-config-h-check.patch      |   32 +++
 binutils-2.23.51.0.1-gold-keep.patch              |  293 +++++++++++++++++++++
 binutils-2.23.51.0.3-arm-ldralt.patch             |  208 +++++++++++++++
 binutils-rh805974.patch                           |  121 +++++++++
 binutilscompare                                   |   70 +++++
 cross-binutils.spec                               |   23 ++-
 sources                                           |    2 +-
 10 files changed, 763 insertions(+), 48 deletions(-)
---
diff --git a/.gitignore b/.gitignore
index 2770e1a..d1e7eb7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,11 @@
-/binutils-2.22.52.0.3.tar.xz
+binutils-2.*/
+i386
+i686
+/binutils-*.tar.bz2
+.build-*
+*.src.rpm
+*.log
+HOWTO
+build-sources
+
+/binutils-2.23.51.0.3.tar.xz
diff --git a/binutils-2.20.51.0.10-ppc64-pie.patch b/binutils-2.20.51.0.10-ppc64-pie.patch
index f68b329..8862d18 100644
--- a/binutils-2.20.51.0.10-ppc64-pie.patch
+++ b/binutils-2.20.51.0.10-ppc64-pie.patch
@@ -1,24 +1,14 @@
-*** ../binutils-2.20.51.0.10.original/bfd/elf64-ppc.c	2010-08-10 14:58:09.000000000 +0100
---- bfd/elf64-ppc.c	2010-08-10 15:03:16.000000000 +0100
+*** ../binutils-2.23.51.0.2.orig/bfd/elf64-ppc.c	2012-09-11 12:13:00.637448573 +0100
+--- bfd/elf64-ppc.c	2012-09-11 12:13:17.922449052 +0100
 *************** ppc64_elf_relocate_section (bfd *output_
-*** 12757,12763 ****
-  	      else if (!SYMBOL_CALLS_LOCAL (info, &h->elf)
-  		       && !is_opd
-  		       && r_type != R_PPC64_TOC)
-! 		outrel.r_info = ELF64_R_INFO (h->elf.dynindx, r_type);
-  	      else
+*** 13523,13528 ****
+--- 13523,13531 ----
   		{
-  		  /* This symbol is local, or marked to become local,
---- 12757,12768 ----
-  	      else if (!SYMBOL_CALLS_LOCAL (info, &h->elf)
-  		       && !is_opd
-  		       && r_type != R_PPC64_TOC)
-! 		{
-! 		  outrel.r_info = ELF64_R_INFO (h->elf.dynindx, r_type);
-! 		  if (h->elf.dynindx == -1
-! 		      && h->elf.root.type == bfd_link_hash_undefweak)
-! 		    memset (&outrel, 0, sizeof outrel);
-! 		}
+  		  BFD_ASSERT (h->elf.dynindx != -1);
+  		  outrel.r_info = ELF64_R_INFO (h->elf.dynindx, r_type);
++ 		  if (h->elf.dynindx == -1
++ 		      && h->elf.root.type == bfd_link_hash_undefweak)
++ 		    memset (&outrel, 0, sizeof outrel);
+  		}
   	      else
   		{
-  		  /* This symbol is local, or marked to become local,
diff --git a/binutils-2.22.52.0.4-no-config-h-check.patch b/binutils-2.22.52.0.4-no-config-h-check.patch
new file mode 100644
index 0000000..2fc32e3
--- /dev/null
+++ b/binutils-2.22.52.0.4-no-config-h-check.patch
@@ -0,0 +1,32 @@
+*** ../binutils-2.22.52.0.4.orig/bfd/bfd-in.h	2012-08-02 10:56:34.561769686 +0100
+--- bfd/bfd-in.h	2012-08-02 11:13:27.134797755 +0100
+***************
+*** 25,35 ****
+  #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
+--- 25,30 ----
+*** ../binutils-2.22.52.0.4.orig/bfd/bfd-in2.h	2012-08-02 10:56:34.349769680 +0100
+--- bfd/bfd-in2.h	2012-08-02 11:13:40.015798113 +0100
+***************
+*** 32,42 ****
+  #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
+--- 32,37 ----
diff --git a/binutils-2.23.51.0.1-gold-keep.patch b/binutils-2.23.51.0.1-gold-keep.patch
new file mode 100644
index 0000000..e8570a0
--- /dev/null
+++ b/binutils-2.23.51.0.1-gold-keep.patch
@@ -0,0 +1,293 @@
+diff -rcp ../binutils-2.22.52.0.4.orig/gold/layout.cc gold/layout.cc
+*** ../binutils-2.22.52.0.4.orig/gold/layout.cc	2012-08-14 09:38:36.359409453 +0100
+--- gold/layout.cc	2012-08-14 09:39:16.393410563 +0100
+*************** Layout::get_output_section(const char* n
+*** 749,754 ****
+--- 749,774 ----
+      }
+  }
+  
++ // Returns TRUE iff NAME (an input section from RELOBJ) will
++ // be mapped to an output section that should be KEPT.
++ 
++ bool
++ Layout::keep_input_section(const Relobj* relobj, const char* name)
++ {
++   if (! this->script_options_->saw_sections_clause())
++     return false;
++ 
++   Script_sections* ss = this->script_options_->script_sections();
++   const char* file_name = relobj == NULL ? NULL : relobj->name().c_str();
++   Output_section** output_section_slot;
++   Script_sections::Section_type script_section_type;
++   bool keep;
++ 
++   name = ss->output_section_name(file_name, name, &output_section_slot,
++ 				 &script_section_type, &keep);
++   return name != NULL && keep;
++ }
++ 
+  // Pick the output section to use for section NAME, in input file
+  // RELOBJ, with type TYPE and flags FLAGS.  RELOBJ may be NULL for a
+  // linker created section.  IS_INPUT_SECTION is true if we are
+*************** Layout::choose_output_section(const Relo
+*** 789,796 ****
+        Output_section** output_section_slot;
+        Script_sections::Section_type script_section_type;
+        const char* orig_name = name;
+        name = ss->output_section_name(file_name, name, &output_section_slot,
+! 				     &script_section_type);
+        if (name == NULL)
+  	{
+  	  gold_debug(DEBUG_SCRIPT, _("Unable to create output section '%s' "
+--- 809,818 ----
+        Output_section** output_section_slot;
+        Script_sections::Section_type script_section_type;
+        const char* orig_name = name;
++       bool keep;
+        name = ss->output_section_name(file_name, name, &output_section_slot,
+! 				     &script_section_type, &keep);
+! 
+        if (name == NULL)
+  	{
+  	  gold_debug(DEBUG_SCRIPT, _("Unable to create output section '%s' "
+diff -rcp ../binutils-2.22.52.0.4.orig/gold/layout.h gold/layout.h
+*** ../binutils-2.22.52.0.4.orig/gold/layout.h	2012-08-14 09:38:52.579409903 +0100
+--- gold/layout.h	2012-08-14 09:39:16.403410563 +0100
+*************** class Layout
+*** 920,925 ****
+--- 920,930 ----
+    section_list() const
+    { return this->section_list_; }
+  
++   // Returns TRUE iff NAME (an input section from RELOBJ) will
++   // be mapped to an output section that should be KEPT.
++   bool
++   keep_input_section(const Relobj*, const char*);
++   
+   private:
+    Layout(const Layout&);
+    Layout& operator=(const Layout&);
+diff -rcp ../binutils-2.22.52.0.4.orig/gold/object.cc gold/object.cc
+*** ../binutils-2.22.52.0.4.orig/gold/object.cc	2012-08-14 09:38:43.151409641 +0100
+--- gold/object.cc	2012-08-14 09:39:16.412410563 +0100
+*************** Sized_relobj_file<size, big_endian>::do_
+*** 1437,1442 ****
+--- 1437,1443 ----
+        if (is_gc_pass_one && parameters->options().gc_sections())
+  	{
+  	  if (this->is_section_name_included(name)
++ 	      || layout->keep_input_section (this, name)
+  	      || shdr.get_sh_type() == elfcpp::SHT_INIT_ARRAY
+  	      || shdr.get_sh_type() == elfcpp::SHT_FINI_ARRAY)
+  	    {
+diff -rcp ../binutils-2.22.52.0.4.orig/gold/script-sections.cc gold/script-sections.cc
+*** ../binutils-2.22.52.0.4.orig/gold/script-sections.cc	2012-08-14 09:38:49.437409815 +0100
+--- gold/script-sections.cc	2012-08-14 09:39:16.413410563 +0100
+*************** class Sections_element
+*** 582,588 ****
+    // Output_section_definition.
+    virtual const char*
+    output_section_name(const char*, const char*, Output_section***,
+! 		      Script_sections::Section_type*)
+    { return NULL; }
+  
+    // Initialize OSP with an output section.
+--- 582,588 ----
+    // Output_section_definition.
+    virtual const char*
+    output_section_name(const char*, const char*, Output_section***,
+! 		      Script_sections::Section_type*, bool*)
+    { return NULL; }
+  
+    // Initialize OSP with an output section.
+*************** class Output_section_element
+*** 800,806 ****
+    // Return whether this element matches FILE_NAME and SECTION_NAME.
+    // The only real implementation is in Output_section_element_input.
+    virtual bool
+!   match_name(const char*, const char*) const
+    { return false; }
+  
+    // Set section addresses.  This includes applying assignments if the
+--- 800,806 ----
+    // Return whether this element matches FILE_NAME and SECTION_NAME.
+    // The only real implementation is in Output_section_element_input.
+    virtual bool
+!   match_name(const char*, const char*, bool *) const
+    { return false; }
+  
+    // Set section addresses.  This includes applying assignments if the
+*************** class Output_section_element_input : pub
+*** 1238,1247 ****
+      *dot_section = this->final_dot_section_;
+    }
+  
+!   // See whether we match FILE_NAME and SECTION_NAME as an input
+!   // section.
+    bool
+!   match_name(const char* file_name, const char* section_name) const;
+  
+    // Set the section address.
+    void
+--- 1238,1247 ----
+      *dot_section = this->final_dot_section_;
+    }
+  
+!   // See whether we match FILE_NAME and SECTION_NAME as an input section.
+!   // If we do then also indicate whether the section should be KEPT.
+    bool
+!   match_name(const char* file_name, const char* section_name, bool* keep) const;
+  
+    // Set the section address.
+    void
+*************** Output_section_element_input::match_file
+*** 1393,1407 ****
+    return true;
+  }
+  
+! // See whether we match FILE_NAME and SECTION_NAME.
+  
+  bool
+  Output_section_element_input::match_name(const char* file_name,
+! 					 const char* section_name) const
+  {
+    if (!this->match_file_name(file_name))
+      return false;
+  
+    // If there are no section name patterns, then we match.
+    if (this->input_section_patterns_.empty())
+      return true;
+--- 1393,1411 ----
+    return true;
+  }
+  
+! // See whether we match FILE_NAME and SECTION_NAME.  If we do then
+! // KEEP indicates whether the section should survive garbage collection.
+  
+  bool
+  Output_section_element_input::match_name(const char* file_name,
+! 					 const char* section_name,
+! 					 bool *keep) const
+  {
+    if (!this->match_file_name(file_name))
+      return false;
+  
++   *keep = this->keep_;
++ 
+    // If there are no section name patterns, then we match.
+    if (this->input_section_patterns_.empty())
+      return true;
+*************** class Output_section_definition : public
+*** 1861,1867 ****
+    // section name.
+    const char*
+    output_section_name(const char* file_name, const char* section_name,
+! 		      Output_section***, Script_sections::Section_type*);
+  
+    // Initialize OSP with an output section.
+    void
+--- 1865,1872 ----
+    // section name.
+    const char*
+    output_section_name(const char* file_name, const char* section_name,
+! 		      Output_section***, Script_sections::Section_type*,
+! 		      bool*);
+  
+    // Initialize OSP with an output section.
+    void
+*************** Output_section_definition::output_sectio
+*** 2146,2159 ****
+      const char* file_name,
+      const char* section_name,
+      Output_section*** slot,
+!     Script_sections::Section_type* psection_type)
+  {
+    // Ask each element whether it matches NAME.
+    for (Output_section_elements::const_iterator p = this->elements_.begin();
+         p != this->elements_.end();
+         ++p)
+      {
+!       if ((*p)->match_name(file_name, section_name))
+  	{
+  	  // We found a match for NAME, which means that it should go
+  	  // into this output section.
+--- 2151,2165 ----
+      const char* file_name,
+      const char* section_name,
+      Output_section*** slot,
+!     Script_sections::Section_type* psection_type,
+!     bool* keep)
+  {
+    // Ask each element whether it matches NAME.
+    for (Output_section_elements::const_iterator p = this->elements_.begin();
+         p != this->elements_.end();
+         ++p)
+      {
+!       if ((*p)->match_name(file_name, section_name, keep))
+  	{
+  	  // We found a match for NAME, which means that it should go
+  	  // into this output section.
+*************** Script_sections::output_section_name(
+*** 3365,3371 ****
+      const char* file_name,
+      const char* section_name,
+      Output_section*** output_section_slot,
+!     Script_sections::Section_type* psection_type)
+  {
+    for (Sections_elements::const_iterator p = this->sections_elements_->begin();
+         p != this->sections_elements_->end();
+--- 3371,3378 ----
+      const char* file_name,
+      const char* section_name,
+      Output_section*** output_section_slot,
+!     Script_sections::Section_type* psection_type,
+!     bool* keep)
+  {
+    for (Sections_elements::const_iterator p = this->sections_elements_->begin();
+         p != this->sections_elements_->end();
+*************** Script_sections::output_section_name(
+*** 3373,3379 ****
+      {
+        const char* ret = (*p)->output_section_name(file_name, section_name,
+  						  output_section_slot,
+! 						  psection_type);
+  
+        if (ret != NULL)
+  	{
+--- 3380,3386 ----
+      {
+        const char* ret = (*p)->output_section_name(file_name, section_name,
+  						  output_section_slot,
+! 						  psection_type, keep);
+  
+        if (ret != NULL)
+  	{
+diff -rcp ../binutils-2.22.52.0.4.orig/gold/script-sections.h gold/script-sections.h
+*** ../binutils-2.22.52.0.4.orig/gold/script-sections.h	2012-08-14 09:38:41.679409601 +0100
+--- gold/script-sections.h	2012-08-14 09:39:16.421410563 +0100
+*************** class Script_sections
+*** 163,172 ****
+    // PSCRIPT_SECTION_TYPE points to a location for returning the section
+    // type specified in script.  This can be SCRIPT_SECTION_TYPE_NONE if
+    // no type is specified.
+    const char*
+    output_section_name(const char* file_name, const char* section_name,
+  		      Output_section*** output_section_slot,
+! 		      Section_type* pscript_section_type);
+  
+    // Place a marker for an orphan output section into the SECTIONS
+    // clause.
+--- 163,174 ----
+    // PSCRIPT_SECTION_TYPE points to a location for returning the section
+    // type specified in script.  This can be SCRIPT_SECTION_TYPE_NONE if
+    // no type is specified.
++   // *KEEP indicates whether the section should survive garbage collection.
+    const char*
+    output_section_name(const char* file_name, const char* section_name,
+  		      Output_section*** output_section_slot,
+! 		      Section_type* pscript_section_type,
+! 		      bool* keep);
+  
+    // Place a marker for an orphan output section into the SECTIONS
+    // clause.
diff --git a/binutils-2.23.51.0.3-arm-ldralt.patch b/binutils-2.23.51.0.3-arm-ldralt.patch
new file mode 100644
index 0000000..4a0f9ca
--- /dev/null
+++ b/binutils-2.23.51.0.3-arm-ldralt.patch
@@ -0,0 +1,208 @@
+diff -rcp ../binutils-2.23.51.0.3.orig/gas/ChangeLog ./gas/ChangeLog
+*** ../binutils-2.23.51.0.3.orig/gas/ChangeLog	2012-10-23 10:15:13.038870720 +0100
+--- ./gas/ChangeLog	2012-10-23 10:17:56.688907041 +0100
+***************
+*** 1,3 ****
+--- 1,8 ----
++ 2012-09-18  Kyrylo Tkachov  <kyrylo.tkachov at arm.com>
++ 
++ 	* config/tc-arm.c: Changed ldra and strl-form mnemonics
++ 	to lda and stl-form for armv8.
++ 
+  2012-09-17  Yufeng Zhang  <yufeng.zhang at arm.com>
+  
+  	* config/tc-aarch64.c (aarch64_archs): Rename 'armv8' to 'armv8-a'.
+diff -rcp ../binutils-2.23.51.0.3.orig/gas/config/tc-arm.c ./gas/config/tc-arm.c
+*** ../binutils-2.23.51.0.3.orig/gas/config/tc-arm.c	2012-10-23 10:15:13.379871049 +0100
+--- ./gas/config/tc-arm.c	2012-10-23 10:16:50.892897421 +0100
+*************** do_strexd (void)
+*** 8738,8744 ****
+  
+  /* ARM V8 STRL.  */
+  static void
+! do_strlex (void)
+  {
+    constraint (inst.operands[0].reg == inst.operands[1].reg
+  	      || inst.operands[0].reg == inst.operands[2].reg, BAD_OVERLAP);
+--- 8738,8744 ----
+  
+  /* ARM V8 STRL.  */
+  static void
+! do_stlex (void)
+  {
+    constraint (inst.operands[0].reg == inst.operands[1].reg
+  	      || inst.operands[0].reg == inst.operands[2].reg, BAD_OVERLAP);
+*************** do_strlex (void)
+*** 8747,8753 ****
+  }
+  
+  static void
+! do_t_strlex (void)
+  {
+    constraint (inst.operands[0].reg == inst.operands[1].reg
+  	      || inst.operands[0].reg == inst.operands[2].reg, BAD_OVERLAP);
+--- 8747,8753 ----
+  }
+  
+  static void
+! do_t_stlex (void)
+  {
+    constraint (inst.operands[0].reg == inst.operands[1].reg
+  	      || inst.operands[0].reg == inst.operands[2].reg, BAD_OVERLAP);
+*************** static const struct asm_opcode insns[] =
+*** 18476,18500 ****
+  
+   tCE("sevl",	320f005, _sevl,    0, (),		noargs,	t_hint),
+   TUE("hlt",	1000070, ba80,     1, (oIffffb),	bkpt,	t_hlt),
+!  TCE("ldraex",	1900e9f, e8d00fef, 2, (RRnpc, RRnpcb),	rd_rn,	rd_rn),
+!  TCE("ldraexd",	1b00e9f, e8d000ff, 3, (RRnpc, oRRnpc, RRnpcb),
+  							ldrexd, t_ldrexd),
+!  TCE("ldraexb",	1d00e9f, e8d00fcf, 2, (RRnpc,RRnpcb),	rd_rn,  rd_rn),
+!  TCE("ldraexh",	1f00e9f, e8d00fdf, 2, (RRnpc, RRnpcb),	rd_rn,  rd_rn),
+!  TCE("strlex",	1800e90, e8c00fe0, 3, (RRnpc, RRnpc, RRnpcb),
+! 							strlex,  t_strlex),
+!  TCE("strlexd",	1a00e90, e8c000f0, 4, (RRnpc, RRnpc, oRRnpc, RRnpcb),
+  							strexd, t_strexd),
+!  TCE("strlexb",	1c00e90, e8c00fc0, 3, (RRnpc, RRnpc, RRnpcb),
+! 							strlex, t_strlex),
+!  TCE("strlexh",	1e00e90, e8c00fd0, 3, (RRnpc, RRnpc, RRnpcb),
+! 							strlex, t_strlex),
+!  TCE("ldra",	1900c9f, e8d00faf, 2, (RRnpc, RRnpcb),	rd_rn,	rd_rn),
+!  TCE("ldrab",	1d00c9f, e8d00f8f, 2, (RRnpc, RRnpcb),	rd_rn,  rd_rn),
+!  TCE("ldrah",	1f00c9f, e8d00f9f, 2, (RRnpc, RRnpcb),	rd_rn,  rd_rn),
+!  TCE("strl",	180fc90, e8c00faf, 2, (RRnpc, RRnpcb),	rm_rn,  rd_rn),
+!  TCE("strlb",	1c0fc90, e8c00f8f, 2, (RRnpc, RRnpcb),	rm_rn,  rd_rn),
+!  TCE("strlh",	1e0fc90, e8c00f9f, 2, (RRnpc, RRnpcb),	rm_rn,  rd_rn),
+  
+   /* ARMv8 T32 only.  */
+  #undef ARM_VARIANT
+--- 18476,18500 ----
+  
+   tCE("sevl",	320f005, _sevl,    0, (),		noargs,	t_hint),
+   TUE("hlt",	1000070, ba80,     1, (oIffffb),	bkpt,	t_hlt),
+!  TCE("ldaex",	1900e9f, e8d00fef, 2, (RRnpc, RRnpcb),	rd_rn,	rd_rn),
+!  TCE("ldaexd",	1b00e9f, e8d000ff, 3, (RRnpc, oRRnpc, RRnpcb),
+  							ldrexd, t_ldrexd),
+!  TCE("ldaexb",	1d00e9f, e8d00fcf, 2, (RRnpc,RRnpcb),	rd_rn,  rd_rn),
+!  TCE("ldaexh",	1f00e9f, e8d00fdf, 2, (RRnpc, RRnpcb),	rd_rn,  rd_rn),
+!  TCE("stlex",	1800e90, e8c00fe0, 3, (RRnpc, RRnpc, RRnpcb),
+! 							stlex,  t_stlex),
+!  TCE("stlexd",	1a00e90, e8c000f0, 4, (RRnpc, RRnpc, oRRnpc, RRnpcb),
+  							strexd, t_strexd),
+!  TCE("stlexb",	1c00e90, e8c00fc0, 3, (RRnpc, RRnpc, RRnpcb),
+! 							stlex, t_stlex),
+!  TCE("stlexh",	1e00e90, e8c00fd0, 3, (RRnpc, RRnpc, RRnpcb),
+! 							stlex, t_stlex),
+!  TCE("lda",	1900c9f, e8d00faf, 2, (RRnpc, RRnpcb),	rd_rn,	rd_rn),
+!  TCE("ldab",	1d00c9f, e8d00f8f, 2, (RRnpc, RRnpcb),	rd_rn,  rd_rn),
+!  TCE("ldah",	1f00c9f, e8d00f9f, 2, (RRnpc, RRnpcb),	rd_rn,  rd_rn),
+!  TCE("stl",	180fc90, e8c00faf, 2, (RRnpc, RRnpcb),	rm_rn,  rd_rn),
+!  TCE("stlb",	1c0fc90, e8c00f8f, 2, (RRnpc, RRnpcb),	rm_rn,  rd_rn),
+!  TCE("stlh",	1e0fc90, e8c00f9f, 2, (RRnpc, RRnpcb),	rm_rn,  rd_rn),
+  
+   /* ARMv8 T32 only.  */
+  #undef ARM_VARIANT
+diff -rcp ../binutils-2.23.51.0.3.orig/opcodes/arm-dis.c ./opcodes/arm-dis.c
+*** ../binutils-2.23.51.0.3.orig/opcodes/arm-dis.c	2012-10-23 10:15:16.976873621 +0100
+--- ./opcodes/arm-dis.c	2012-10-23 10:16:34.204894516 +0100
+*************** static const struct opcode32 arm_opcodes
+*** 889,908 ****
+    /* V8 instructions.  */
+    {ARM_EXT_V8,   0x0320f005, 0x0fffffff, "sevl"},
+    {ARM_EXT_V8,   0xe1000070, 0xfff000f0, "hlt\t0x%16-19X%12-15X%8-11X%0-3X"},
+!   {ARM_EXT_V8,	 0x01800e90, 0x0ff00ff0, "strlex%c\t%12-15r, %0-3r, [%16-19R]"},
+!   {ARM_EXT_V8,	 0x01900e9f, 0x0ff00fff, "ldraex%c\t%12-15r, [%16-19R]"},
+!   {ARM_EXT_V8,	 0x01a00e90, 0x0ff00ff0, "strlexd%c\t%12-15r, %0-3r, %0-3T, [%16-19R]"},
+!   {ARM_EXT_V8,	 0x01b00e9f, 0x0ff00fff, "ldraexd%c\t%12-15r, %12-15T, [%16-19R]"},
+!   {ARM_EXT_V8,	 0x01c00e90, 0x0ff00ff0, "strlexb%c\t%12-15r, %0-3r, [%16-19R]"},
+!   {ARM_EXT_V8,	 0x01d00e9f, 0x0ff00fff, "ldraexb%c\t%12-15r, [%16-19R]"},
+!   {ARM_EXT_V8,	 0x01e00e90, 0x0ff00ff0, "strlexh%c\t%12-15r, %0-3r, [%16-19R]"},
+!   {ARM_EXT_V8,	 0x01f00e9f, 0x0ff00fff, "ldraexh%c\t%12-15r, [%16-19R]"},
+!   {ARM_EXT_V8,	 0x0180fc90, 0x0ff0fff0, "strl%c\t%0-3r, [%16-19R]"},
+!   {ARM_EXT_V8,	 0x01900c9f, 0x0ff00fff, "ldra%c\t%12-15r, [%16-19R]"},
+!   {ARM_EXT_V8,	 0x01c0fc90, 0x0ff0fff0, "strlb%c\t%0-3r, [%16-19R]"},
+!   {ARM_EXT_V8,	 0x01d00c9f, 0x0ff00fff, "ldrab%c\t%12-15r, [%16-19R]"},
+!   {ARM_EXT_V8,	 0x01e0fc90, 0x0ff0fff0, "strlh%c\t%0-3r, [%16-19R]"},
+!   {ARM_EXT_V8,	 0x01f00c9f, 0x0ff00fff, "ldraexh%c\t%12-15r, [%16-19R]"},
+  
+    /* Virtualization Extension instructions.  */
+    {ARM_EXT_VIRT, 0x0160006e, 0x0fffffff, "eret%c"},
+--- 889,908 ----
+    /* V8 instructions.  */
+    {ARM_EXT_V8,   0x0320f005, 0x0fffffff, "sevl"},
+    {ARM_EXT_V8,   0xe1000070, 0xfff000f0, "hlt\t0x%16-19X%12-15X%8-11X%0-3X"},
+!   {ARM_EXT_V8,	 0x01800e90, 0x0ff00ff0, "stlex%c\t%12-15r, %0-3r, [%16-19R]"},
+!   {ARM_EXT_V8,	 0x01900e9f, 0x0ff00fff, "ldaex%c\t%12-15r, [%16-19R]"},
+!   {ARM_EXT_V8,	 0x01a00e90, 0x0ff00ff0, "stlexd%c\t%12-15r, %0-3r, %0-3T, [%16-19R]"},
+!   {ARM_EXT_V8,	 0x01b00e9f, 0x0ff00fff, "ldaexd%c\t%12-15r, %12-15T, [%16-19R]"},
+!   {ARM_EXT_V8,	 0x01c00e90, 0x0ff00ff0, "stlexb%c\t%12-15r, %0-3r, [%16-19R]"},
+!   {ARM_EXT_V8,	 0x01d00e9f, 0x0ff00fff, "ldaexb%c\t%12-15r, [%16-19R]"},
+!   {ARM_EXT_V8,	 0x01e00e90, 0x0ff00ff0, "stlexh%c\t%12-15r, %0-3r, [%16-19R]"},
+!   {ARM_EXT_V8,	 0x01f00e9f, 0x0ff00fff, "ldaexh%c\t%12-15r, [%16-19R]"},
+!   {ARM_EXT_V8,	 0x0180fc90, 0x0ff0fff0, "stl%c\t%0-3r, [%16-19R]"},
+!   {ARM_EXT_V8,	 0x01900c9f, 0x0ff00fff, "lda%c\t%12-15r, [%16-19R]"},
+!   {ARM_EXT_V8,	 0x01c0fc90, 0x0ff0fff0, "stlb%c\t%0-3r, [%16-19R]"},
+!   {ARM_EXT_V8,	 0x01d00c9f, 0x0ff00fff, "ldab%c\t%12-15r, [%16-19R]"},
+!   {ARM_EXT_V8,	 0x01e0fc90, 0x0ff0fff0, "stlh%c\t%0-3r, [%16-19R]"},
+!   {ARM_EXT_V8,	 0x01f00c9f, 0x0ff00fff, "ldaexh%c\t%12-15r, [%16-19R]"},
+  
+    /* Virtualization Extension instructions.  */
+    {ARM_EXT_VIRT, 0x0160006e, 0x0fffffff, "eret%c"},
+*************** static const struct opcode32 thumb32_opc
+*** 1475,1494 ****
+    /* V8 instructions.  */
+    {ARM_EXT_V8, 0xf3af8005, 0xffffffff, "sevl%c.w"},
+    {ARM_EXT_V8, 0xf78f8000, 0xfffffffc, "dcps%0-1d"},
+!   {ARM_EXT_V8, 0xe8c00f8f, 0xfff00fff, "strlb%c\t%12-15r, [%16-19R]"},
+!   {ARM_EXT_V8, 0xe8c00f9f, 0xfff00fff, "strlh%c\t%12-15r, [%16-19R]"},
+!   {ARM_EXT_V8, 0xe8c00faf, 0xfff00fff, "strl%c\t%12-15r, [%16-19R]"},
+!   {ARM_EXT_V8, 0xe8c00fc0, 0xfff00ff0, "strlexb%c\t%0-3r, %12-15r, [%16-19R]"},
+!   {ARM_EXT_V8, 0xe8c00fd0, 0xfff00ff0, "strlexh%c\t%0-3r, %12-15r, [%16-19R]"},
+!   {ARM_EXT_V8, 0xe8c00fe0, 0xfff00ff0, "strlex%c\t%0-3r, %12-15r, [%16-19R]"},
+!   {ARM_EXT_V8, 0xe8c000f0, 0xfff000f0, "strlexd%c\t%0-3r, %12-15r, %8-11r, [%16-19R]"},
+!   {ARM_EXT_V8, 0xe8d00f8f, 0xfff00fff, "ldrab%c\t%12-15r, [%16-19R]"},
+!   {ARM_EXT_V8, 0xe8d00f9f, 0xfff00fff, "ldrah%c\t%12-15r, [%16-19R]"},
+!   {ARM_EXT_V8, 0xe8d00faf, 0xfff00fff, "ldra%c\t%12-15r, [%16-19R]"},
+!   {ARM_EXT_V8, 0xe8d00fcf, 0xfff00fff, "ldraexb%c\t%12-15r, [%16-19R]"},
+!   {ARM_EXT_V8, 0xe8d00fdf, 0xfff00fff, "ldraexh%c\t%12-15r, [%16-19R]"},
+!   {ARM_EXT_V8, 0xe8d00fef, 0xfff00fff, "ldraex%c\t%12-15r, [%16-19R]"},
+!   {ARM_EXT_V8, 0xe8d000ff, 0xfff000ff, "ldraexd%c\t%12-15r, %8-11r, [%16-19R]"},
+  
+    /* V7 instructions.  */
+    {ARM_EXT_V7, 0xf910f000, 0xff70f000, "pli%c\t%a"},
+--- 1475,1494 ----
+    /* V8 instructions.  */
+    {ARM_EXT_V8, 0xf3af8005, 0xffffffff, "sevl%c.w"},
+    {ARM_EXT_V8, 0xf78f8000, 0xfffffffc, "dcps%0-1d"},
+!   {ARM_EXT_V8, 0xe8c00f8f, 0xfff00fff, "stlb%c\t%12-15r, [%16-19R]"},
+!   {ARM_EXT_V8, 0xe8c00f9f, 0xfff00fff, "stlh%c\t%12-15r, [%16-19R]"},
+!   {ARM_EXT_V8, 0xe8c00faf, 0xfff00fff, "stl%c\t%12-15r, [%16-19R]"},
+!   {ARM_EXT_V8, 0xe8c00fc0, 0xfff00ff0, "stlexb%c\t%0-3r, %12-15r, [%16-19R]"},
+!   {ARM_EXT_V8, 0xe8c00fd0, 0xfff00ff0, "stlexh%c\t%0-3r, %12-15r, [%16-19R]"},
+!   {ARM_EXT_V8, 0xe8c00fe0, 0xfff00ff0, "stlex%c\t%0-3r, %12-15r, [%16-19R]"},
+!   {ARM_EXT_V8, 0xe8c000f0, 0xfff000f0, "stlexd%c\t%0-3r, %12-15r, %8-11r, [%16-19R]"},
+!   {ARM_EXT_V8, 0xe8d00f8f, 0xfff00fff, "ldab%c\t%12-15r, [%16-19R]"},
+!   {ARM_EXT_V8, 0xe8d00f9f, 0xfff00fff, "ldah%c\t%12-15r, [%16-19R]"},
+!   {ARM_EXT_V8, 0xe8d00faf, 0xfff00fff, "lda%c\t%12-15r, [%16-19R]"},
+!   {ARM_EXT_V8, 0xe8d00fcf, 0xfff00fff, "ldaexb%c\t%12-15r, [%16-19R]"},
+!   {ARM_EXT_V8, 0xe8d00fdf, 0xfff00fff, "ldaexh%c\t%12-15r, [%16-19R]"},
+!   {ARM_EXT_V8, 0xe8d00fef, 0xfff00fff, "ldaex%c\t%12-15r, [%16-19R]"},
+!   {ARM_EXT_V8, 0xe8d000ff, 0xfff000ff, "ldaexd%c\t%12-15r, %8-11r, [%16-19R]"},
+  
+    /* V7 instructions.  */
+    {ARM_EXT_V7, 0xf910f000, 0xff70f000, "pli%c\t%a"},
+diff -rcp ../binutils-2.23.51.0.3.orig/opcodes/ChangeLog ./opcodes/ChangeLog
+*** ../binutils-2.23.51.0.3.orig/opcodes/ChangeLog	2012-10-23 10:15:17.783874153 +0100
+--- ./opcodes/ChangeLog	2012-10-23 10:18:43.593915807 +0100
+***************
+*** 1,3 ****
+--- 1,8 ----
++ 2012-09-18  Kyrylo Tkachov  <kyrylo.tkachov at arm.com>
++ 
++ 	* arm-dis.c: Changed ldra and strl-form mnemonics
++ 	to lda and stl-form.
++ 
+  2012-09-17  Yufeng Zhang  <yufeng.zhang at arm.com>
+  
+  	* aarch64-asm.c (aarch64_ins_imm_half): Remove ATTRIBUTE_UNUSED from
+
diff --git a/binutils-rh805974.patch b/binutils-rh805974.patch
new file mode 100644
index 0000000..bfbb160
--- /dev/null
+++ b/binutils-rh805974.patch
@@ -0,0 +1,121 @@
+From binutils-return-76960-listarch-binutils=sources dot redhat dot com at sourceware dot org Mon Sep 03 12:05:02 2012
+Return-Path: <binutils-return-76960-listarch-binutils=sources dot redhat dot com at sourceware dot org>
+Delivered-To: listarch-binutils at sources dot redhat dot com
+Received: (qmail 24023 invoked by alias); 3 Sep 2012 12:05:00 -0000
+Received: (qmail 24010 invoked by uid 22791); 3 Sep 2012 12:05:00 -0000
+X-SWARE-Spam-Status: No, hits=-3.6 required=5.0	tests=AWL,BAYES_00,KHOP_RCVD_UNTRUST,RCVD_IN_HOSTKARMA_W,RCVD_IN_HOSTKARMA_WL,RP_MATCHES_RCVD
+X-Spam-Check-By: sourceware.org
+Received: from e06smtp15.uk.ibm.com (HELO e06smtp15.uk.ibm.com) (195.75.94.111)    by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 03 Sep 2012 12:04:46 +0000
+Received: from /spool/local	by e06smtp15.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted	for <binutils at sourceware.org> from <andreas at de.ibm.com>;	Mon, 3 Sep 2012 13:04:44 +0100
+Received: from b06cxnps4076.portsmouth.uk.ibm.com (9.149.109.198)	by e06smtp15.uk.ibm.com (192.168.101.145) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted;	Mon, 3 Sep 2012 13:04:41 +0100
+Received: from d06av09.portsmouth.uk.ibm.com (d06av09.portsmouth.uk.ibm.com [9.149.37.250])	by b06cxnps4076.portsmouth.uk.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id q83C4YZx40435740	for <binutils at sourceware.org>; Mon, 3 Sep 2012 12:04:34 GMT
+Received: from d06av09.portsmouth.uk.ibm.com (loopback [127.0.0.1])	by d06av09.portsmouth.uk.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id q83C4eFA012810	for <binutils at sourceware.org>; Mon, 3 Sep 2012 06:04:40 -0600
+Received: from bart (dyn-9-152-212-238.boeblingen.de.ibm.com [9.152.212.238])	by d06av09.portsmouth.uk.ibm.com (8.14.4/8.13.1/NCO v10.0 AVin) with SMTP id q83C4dDC012768	for <binutils at sourceware.org>; Mon, 3 Sep 2012 06:04:39 -0600
+Received: by bart (sSMTP sendmail emulation); Mon, 03 Sep 2012 14:04:39 +0200
+From: "Andreas Krebbel" <andreas at de dot ibm dot com>
+Date: Mon, 3 Sep 2012 14:04:39 +0200
+To: binutils at sourceware dot org
+Subject: [Committed] S/390: Handle PLTOFF for IFUNC symbols correctly
+Message-ID: <20120903120439.GA10593 at bart>
+MIME-Version: 1.0
+Content-Type: text/plain; charset=us-ascii
+Content-Disposition: inline
+User-Agent: Mutt/1.5.21 (2010-09-15)
+x-cbid: 12090312-0342-0000-0000-000002BC4237
+Mailing-List: contact binutils-help at sourceware dot org; run by ezmlm
+Precedence: bulk
+List-Id: <binutils.sourceware.org>
+List-Subscribe: <mailto:binutils-subscribe at sourceware dot org>
+List-Archive: <http://sourceware.org/ml/binutils/>
+List-Post: <mailto:binutils at sourceware dot org>
+List-Help: <mailto:binutils-help at sourceware dot org>, <http://sourceware dot org/ml/#faqs>
+Sender: binutils-owner at sourceware dot org
+Delivered-To: mailing list binutils at sourceware dot org
+
+Hi,
+
+the s390 IFUNC support so far didn't deal correctly with PLTOFF
+relocs.  Fixed with the attached patch.
+
+Committed.
+
+Bye,
+
+-Andreas-
+
+2012-09-03  Andreas Krebbel  <Andreas.Krebbel at de.ibm.com>
+
+	* elf32-s390.c (elf_s390_relocate_section): Handle PLTOFF for
+	local and global ifunc symbols.
+	* elf64-s390.c (elf_s390_relocate_section): Likewise.
+
+---
+ bfd/elf32-s390.c |    8 ++++++--
+ bfd/elf64-s390.c |   11 ++++++++---
+ 2 files changed, 14 insertions(+), 5 deletions(-)
+
+Index: binutils/bfd/elf32-s390.c
+===================================================================
+--- binutils.orig/bfd/elf32-s390.c
++++ binutils/bfd/elf32-s390.c
+@@ -2349,6 +2349,10 @@ elf_s390_relocate_section (bfd *output_b
+ 
+ 	      switch (r_type)
+ 		{
++		case R_390_PLTOFF16:
++		case R_390_PLTOFF32:
++		  relocation -= htab->elf.sgot->output_section->vma;
++		  break;
+ 		case R_390_GOTPLT12:
+ 		case R_390_GOTPLT16:
+ 		case R_390_GOTPLT20:
+@@ -2625,9 +2629,9 @@ elf_s390_relocate_section (bfd *output_b
+ 
+ 	  /* For local symbols or if we didn't make a PLT entry for
+ 	     this symbol resolve the symbol directly.  */
+-	  if (   h == NULL
++	  if (h == NULL
+ 	      || h->plt.offset == (bfd_vma) -1
+-	      || htab->elf.splt == NULL)
++	      || (htab->elf.splt == NULL && !s390_is_ifunc_symbol_p (h)))
+ 	    {
+ 	      relocation -= htab->elf.sgot->output_section->vma;
+ 	      break;
+Index: binutils/bfd/elf64-s390.c
+===================================================================
+--- binutils.orig/bfd/elf64-s390.c
++++ binutils/bfd/elf64-s390.c
+@@ -2306,6 +2306,11 @@ elf_s390_relocate_section (bfd *output_b
+ 
+ 	      switch (r_type)
+ 		{
++		case R_390_PLTOFF16:
++		case R_390_PLTOFF32:
++		case R_390_PLTOFF64:
++		  relocation -= htab->elf.sgot->output_section->vma;
++		  break;
+ 		case R_390_GOTPLT12:
+ 		case R_390_GOTPLT16:
+ 		case R_390_GOTPLT20:
+@@ -2561,7 +2566,7 @@ elf_s390_relocate_section (bfd *output_b
+ 	    break;
+ 
+ 	  if (h->plt.offset == (bfd_vma) -1
+-	      || (htab->elf.splt == NULL && htab->elf.iplt == NULL))
++	      || (htab->elf.splt == NULL && !s390_is_ifunc_symbol_p (h)))
+ 	    {
+ 	      /* We didn't make a PLT entry for this symbol.  This
+ 		 happens when statically linking PIC code, or when
+@@ -2587,9 +2592,9 @@ elf_s390_relocate_section (bfd *output_b
+ 
+ 	  /* For local symbols or if we didn't make a PLT entry for
+ 	     this symbol resolve the symbol directly.  */
+-	  if (   h == NULL
++	  if (h == NULL
+ 	      || h->plt.offset == (bfd_vma) -1
+-	      || htab->elf.splt == NULL)
++	      || (htab->elf.splt == NULL && !s390_is_ifunc_symbol_p (h)))
+ 	    {
+ 	      relocation -= htab->elf.sgot->output_section->vma;
+ 	      break;
+
diff --git a/binutilscompare b/binutilscompare
new file mode 100755
index 0000000..3f436e2
--- /dev/null
+++ b/binutilscompare
@@ -0,0 +1,70 @@
+#! /usr/bin/perl
+# Compare build logs for the testsuite results regressions.
+# $Id$
+
+use strict;
+use warnings;
+use Data::Dumper;
+
+my $reverse=shift @ARGV if ($ARGV[0]||"") eq "-r";
+
+sub readfile($)
+{
+my($filename)=@_;
+
+	local *F;
+	open F,$filename or die "open \"$filename\": $!";
+	my $F=do { local $/; <F>; };
+	close F or die "close \"$filename\": $!";
+	return $F;
+}
+
+sub writefile($$)
+{
+my($filename,$content)=@_;
+
+	local *F;
+	open F,">$filename" or die "create \"$filename\": $!";
+	print F $content or die "write \"$filename\": $!";
+	close F or die "close \"$filename\": $!";
+}
+
+local *DIR;
+opendir DIR,"tests" or die "opendir: $!";
+my %arch;
+for my $name (sort readdir(DIR)) {
+	next if $name!~/-([^-]*)[.]log$/o;
+	my $arch=$1;
+	(my $sum=$name)=~s/log$/sum/ or die;
+	my $i=readfile "tests/$name";
+	my $o="";
+	while ($i=~/\n(Native configuration is.*?Summary ===\n.*?\n)make\Q[\E/gs) {
+		$o.=$1;
+	}
+	# Version string differs.
+	$o=~s{/builddir/build/BUILD/binutils-[^/]*/+}{}g;
+	$o=~s{^(Version .*) 20\d{6}$}{$1}mg;
+	$o=~s{^(\Q../as-new\E) 20\d{6}$}{$1}mg;
+	$o=~s{^(build-[^/]*/ld/ld-new) 20\d{6}$}{$1}mg;
+	writefile "tests/$sum",$o;
+	push @{$arch{$arch}},$sum;
+}
+closedir DIR or die "closedir: $!";
+
+for (values(%arch)) {
+	next if 2==@$_;
+	warn "Single element: ".${$_}[0]."\n" if 1==@$_;
+	die "Not 2 elements:\n".Dumper($_) if 1!=@$_;
+}
+
+system("rm -f tests/gdbcompare-*.diff") and die;
+
+for my $arch (sort keys(%arch)) {
+	next if 2!=@{$arch{$arch}};
+	# sub trans { return {"."=>0,"-"=>1}->{($_[0]=~/([-.])[^-.]+[.]\w+$/)[0]}.$_[0]; };
+	sub trans { return $_[0]; };
+	my @sorted=sort { my $a1=trans $a; my $b1=trans $b; ($b1 cmp $a1) * ($reverse ? -1 : +1); } @{$arch{$arch}};
+	do { system $_ and die $_; } for "diff -u tests/'".$sorted[1]."' tests/'".$sorted[0]."' >tests/gdbcompare-'$arch'.sum.diff;true";
+}
+
+system("vim tests/gdbcompare-*.sum.diff");
diff --git a/cross-binutils.spec b/cross-binutils.spec
index 1117b41..e0b316c 100644
--- a/cross-binutils.spec
+++ b/cross-binutils.spec
@@ -2,6 +2,7 @@
 %define build_all 1
 %define build_alpha %{build_all}
 %define build_arm %{build_all}
+%define build_aarch64 %{build_all}
 %define build_avr32 %{build_all}
 %define build_blackfin %{build_all}
 %define build_c6x %{build_all}
@@ -41,8 +42,8 @@
 
 Summary: A GNU collection of cross-compilation binary utilities
 Name: cross-binutils
-Version: 2.22.52.0.3
-Release: 4%{?dist}
+Version: 2.23.51.0.3
+Release: 1%{?dist}
 License: GPLv3+
 Group: Development/Tools
 URL: http://sources.redhat.com/binutils
@@ -63,8 +64,10 @@ Patch07: binutils-2.20.51.0.10-sec-merge-emit.patch
 Patch08: binutils-2.22.52.0.1-relro-on-by-default.patch
 # Local patch - export demangle.h with the binutils-devel rpm.
 Patch09: binutils-2.22.52.0.1-export-demangle.h.patch
-
-Patch100: binutils-2.22.52.0.3-fix-signedness-warning.patch
+# Disable checks that config.h has been included before system headers.  BZ #845084
+Patch10: binutils-2.22.52.0.4-no-config-h-check.patch
+# Renames ARM LDRALT insn to LDALT.  BZ# 869025
+Patch11: binutils-2.23.51.0.3-arm-ldralt.patch
 
 Buildroot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
 BuildRequires: texinfo >= 4.0, gettext, flex, bison, zlib-devel
@@ -109,6 +112,7 @@ Cross-build binary image generation, manipulation and query tools. \
 
 %do_package alpha-linux-gnu	%{build_alpha}
 %do_package arm-linux-gnu	%{build_arm}
+%do_package aarch64-linux-gnu	%{build_aarch64}
 %do_package avr32-linux-gnu	%{build_avr32}
 %do_package bfin-linux-gnu	%{build_blackfin}
 %do_package c6x-linux-gnu	%{build_c6x}
@@ -170,8 +174,8 @@ cd %{srcdir}
 %patch08 -p0 -b .relro~
 %endif
 %patch09 -p0 -b .export-demangle-h~
-
-%patch100 -p0 -b .signedness~
+%patch10 -p0 -b .no-config-h-check~
+%patch11 -p0 -b .arm-ldralt~
 
 # We cannot run autotools as there is an exact requirement of autoconf-2.59.
 
@@ -210,6 +214,7 @@ cd ..
 (
     prep_target alpha-linux-gnu		%{build_alpha}
     prep_target arm-linux-gnu		%{build_arm}
+    prep_target aarch64-linux-gnu	%{build_aarch64}
     prep_target avr32-linux-gnu		%{build_avr32}
     prep_target bfin-linux-gnu		%{build_blackfin}
     prep_target c6x-linux-gnu		%{build_c6x}
@@ -270,6 +275,7 @@ function config_target () {
 
     case $arch in
 	arm-*)		target=arm-linux-gnueabi;;
+	aarch64-*)	target=aarch64-linux-gnu;;
 	avr32-*)	target=avr-linux;;
 	bfin-*)		target=bfin-uclinux;;
 	c6x-*)		target=c6x-uclinux;;
@@ -542,6 +548,7 @@ rm -rf %{buildroot}
 
 %do_files alpha-linux-gnu	%{build_alpha}
 %do_files arm-linux-gnu		%{build_arm}
+%do_files aarch64-linux-gnu	%{build_aarch64}
 %do_files avr32-linux-gnu	%{build_avr32}
 %do_files bfin-linux-gnu	%{build_blackfin}
 %do_files c6x-linux-gnu		%{build_c6x}
@@ -576,6 +583,10 @@ rm -rf %{buildroot}
 %do_files xtensa-linux-gnu	%{build_xtensa}
 
 %changelog
+* Fri Nov 2nd 2012 David Howells <dhowells at redhat.com> - 2.23.51.0.3-1
+- Update to binutils-2.23.51.0.3.
+- Added support for aarch64.
+
 * Mon Oct 15 2012 Jon Ciesla <limburgher at gmail.com> - 2.22.52.0.3-4
 - Provides: bundled(libiberty)
 
diff --git a/sources b/sources
index c92e8f9..8cd8a48 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-2126761790a7f00e3fb81a9764fa2fa5  binutils-2.22.52.0.3.tar.xz
+a2659f1113e4d4d5ccbf99df994d74b2  binutils-2.23.51.0.3.tar.xz


More information about the scm-commits mailing list