summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Howells <dhowells@redhat.com>2012-11-02 15:02:38 +0000
committerDavid Howells <dhowells@redhat.com>2012-11-02 15:03:34 +0000
commitd08d987302b9699b2b810ee2cfa0afe9794bdd4e (patch)
tree97e47daa6b6a2b0ffe5abb9c70493b28f2db5703
parent9fbe009ec0b5711be1208487a300820ec782429f (diff)
downloadcross-binutils-d08d987302b9699b2b810ee2cfa0afe9794bdd4e.tar.gz
cross-binutils-d08d987302b9699b2b810ee2cfa0afe9794bdd4e.tar.xz
cross-binutils-d08d987302b9699b2b810ee2cfa0afe9794bdd4e.zip
Updated to binutils-2.23.51.0.3 and added support for aarch64
-rw-r--r--.gitignore12
-rw-r--r--binutils-2.20.51.0.10-ppc64-pie.patch30
-rw-r--r--binutils-2.22.52.0.3-fix-signedness-warning.patch20
-rw-r--r--binutils-2.22.52.0.4-no-config-h-check.patch32
-rw-r--r--binutils-2.23.51.0.1-gold-keep.patch293
-rw-r--r--binutils-2.23.51.0.3-arm-ldralt.patch208
-rw-r--r--binutils-rh805974.patch121
-rwxr-xr-xbinutilscompare70
-rw-r--r--cross-binutils.spec23
-rw-r--r--sources2
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.3-fix-signedness-warning.patch b/binutils-2.22.52.0.3-fix-signedness-warning.patch
deleted file mode 100644
index 544be93..0000000
--- a/binutils-2.22.52.0.3-fix-signedness-warning.patch
+++ /dev/null
@@ -1,20 +0,0 @@
---- gas/config/tc-h8300.c.signedness~ 2012-05-07 18:08:33.000000000 +0100
-+++ gas/config/tc-h8300.c 2012-05-30 21:26:20.668415305 +0100
-@@ -359,7 +359,7 @@
- static char *skip_colonthing (char *, int *);
- static char *parse_exp (char *, struct h8_op *);
-
--static int constant_fits_width_p (struct h8_op *, unsigned int);
-+static int constant_fits_width_p (struct h8_op *, offsetT);
- static int constant_fits_size_p (struct h8_op *, int, int);
-
- /*
-@@ -561,7 +561,7 @@
- @@aa[:8] memory indirect. */
-
- static int
--constant_fits_width_p (struct h8_op *operand, unsigned int width)
-+constant_fits_width_p (struct h8_op *operand, offsetT width)
- {
- offsetT num;
-
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@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@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@arm.com>
++
++ * arm-dis.c: Changed ldra and strl-form mnemonics
++ to lda and stl-form.
++
+ 2012-09-17 Yufeng Zhang <yufeng.zhang@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@sourceware.org> from <andreas@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@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@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@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@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@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@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@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