summaryrefslogtreecommitdiffstats
path: root/toolchain/binutils/patches/2.17/501-avr32-sreldyn-fix.patch
diff options
context:
space:
mode:
Diffstat (limited to 'toolchain/binutils/patches/2.17/501-avr32-sreldyn-fix.patch')
-rw-r--r--toolchain/binutils/patches/2.17/501-avr32-sreldyn-fix.patch103
1 files changed, 103 insertions, 0 deletions
diff --git a/toolchain/binutils/patches/2.17/501-avr32-sreldyn-fix.patch b/toolchain/binutils/patches/2.17/501-avr32-sreldyn-fix.patch
new file mode 100644
index 0000000000..4331cb0fe0
--- /dev/null
+++ b/toolchain/binutils/patches/2.17/501-avr32-sreldyn-fix.patch
@@ -0,0 +1,103 @@
+Index: binutils/bfd/elf32-avr32.c
+===================================================================
+--- binutils/bfd/elf32-avr32.c (revision 8769)
++++ binutils/bfd/elf32-avr32.c (working copy)
+@@ -298,7 +298,7 @@
+ /* Shortcuts to get to dynamic linker sections. */
+ asection *sgot;
+ asection *srelgot;
+- asection *sreldyn;
++ /* asection *sreldyn; */
+ asection *sstub;
+
+ /* We use a variation of Pigeonhole Sort to sort the GOT. After the
+@@ -506,14 +506,14 @@
+ if (!avr32_elf_create_got_section (dynobj, info))
+ return FALSE;
+
+- if (!htab->sreldyn)
++ /* if (!htab->sreldyn)
+ htab->sreldyn = create_dynamic_section(dynobj, ".rela.dyn",
+- flags | SEC_READONLY, 2);
++ flags | SEC_READONLY, 2); */
+ if (!htab->sstub)
+ htab->sstub = create_dynamic_section(dynobj, ".stub",
+ flags | SEC_READONLY | SEC_CODE, 2);
+
+- if (!htab->sreldyn || !htab->sstub)
++ if (/* !htab->sreldyn || */ !htab->sstub)
+ return FALSE;
+
+ return TRUE;
+@@ -669,12 +669,12 @@
+ if ((info->shared || h != NULL)
+ && (sec->flags & SEC_ALLOC))
+ {
+- if (htab->sreldyn == NULL)
++ if (htab->srelgot == NULL)
+ {
+- htab->sreldyn = create_dynamic_section(dynobj, ".rela.dyn",
++ htab->srelgot = create_dynamic_section(dynobj, ".rela.got",
+ bed->dynamic_sec_flags
+ | SEC_READONLY, 2);
+- if (htab->sreldyn == NULL)
++ if (htab->srelgot == NULL)
+ return FALSE;
+ }
+
+@@ -1062,7 +1062,7 @@
+ {
+ pr_debug("Allocating %d dynamic reloc against symbol %s...\n",
+ havr->possibly_dynamic_relocs, h->root.root.string);
+- htab->sreldyn->size += (havr->possibly_dynamic_relocs
++ htab->srelgot->size += (havr->possibly_dynamic_relocs
+ * sizeof(Elf32_External_Rela));
+ }
+
+@@ -1156,7 +1156,7 @@
+ /* Allocate space for local sym dynamic relocs */
+ BFD_ASSERT(htab->local_dynamic_relocs == 0 || info->shared);
+ if (htab->local_dynamic_relocs)
+- htab->sreldyn->size += (htab->local_dynamic_relocs
++ htab->srelgot->size += (htab->local_dynamic_relocs
+ * sizeof(Elf32_External_Rela));
+
+ /* We now have determined the sizes of the various dynamic
+@@ -3191,7 +3191,6 @@
+ struct got_entry **local_got_ents;
+ asection *sgot;
+ asection *srelgot;
+- asection *sreldyn;
+
+ pr_debug("(6) relocate section %s:<%s> (size 0x%lx)\n",
+ input_bfd->filename, input_section->name, input_section->size);
+@@ -3207,7 +3206,6 @@
+ local_got_ents = elf_local_got_ents(input_bfd);
+ sgot = htab->sgot;
+ srelgot = htab->srelgot;
+- sreldyn = htab->sreldyn;
+
+ relend = relocs + input_section->reloc_count;
+ for (rel = relocs; rel < relend; rel++)
+@@ -3444,15 +3442,15 @@
+ }
+ }
+
+- pr_debug("sreldyn reloc_count: %d, size %lu\n",
+- sreldyn->reloc_count, sreldyn->size);
++ pr_debug("srelgot reloc_count: %d, size %lu\n",
++ srelgot->reloc_count, srelgot->size);
+
+- loc = sreldyn->contents;
+- loc += sreldyn->reloc_count++ * sizeof(Elf32_External_Rela);
++ loc = srelgot->contents;
++ loc += srelgot->reloc_count++ * sizeof(Elf32_External_Rela);
+ bfd_elf32_swap_reloca_out(output_bfd, &outrel, loc);
+
+- BFD_ASSERT(sreldyn->reloc_count * sizeof(Elf32_External_Rela)
+- <= sreldyn->size);
++ BFD_ASSERT(srelgot->reloc_count * sizeof(Elf32_External_Rela)
++ <= srelgot->size);
+
+ if (!relocate)
+ continue;