summaryrefslogtreecommitdiffstats
path: root/import-layers/yocto-poky/meta/recipes-devtools/binutils/binutils/0014-Correct-nios2-_gp-address-computation.patch
diff options
context:
space:
mode:
Diffstat (limited to 'import-layers/yocto-poky/meta/recipes-devtools/binutils/binutils/0014-Correct-nios2-_gp-address-computation.patch')
-rw-r--r--import-layers/yocto-poky/meta/recipes-devtools/binutils/binutils/0014-Correct-nios2-_gp-address-computation.patch106
1 files changed, 106 insertions, 0 deletions
diff --git a/import-layers/yocto-poky/meta/recipes-devtools/binutils/binutils/0014-Correct-nios2-_gp-address-computation.patch b/import-layers/yocto-poky/meta/recipes-devtools/binutils/binutils/0014-Correct-nios2-_gp-address-computation.patch
new file mode 100644
index 000000000..86eeded6e
--- /dev/null
+++ b/import-layers/yocto-poky/meta/recipes-devtools/binutils/binutils/0014-Correct-nios2-_gp-address-computation.patch
@@ -0,0 +1,106 @@
+From 27f155fd0ab4ba954366643dbfdc3c7104933794 Mon Sep 17 00:00:00 2001
+From: Sandra Loosemore <sandra@codesourcery.com>
+Date: Sun, 27 Dec 2015 12:30:26 -0800
+Subject: [PATCH 14/14] Correct nios2 _gp address computation.
+
+2015-12-27 Sandra Loosemore <sandra@codesourcery.com>
+
+ bfd/
+ * elf32-nios2.c (nios2_elf_assign_gp): Correct computation of _gp
+ address.
+ (nios2_elf32_relocate_section): Tidy code for R_NIOS2_GPREL error
+ messages.
+
+Signed-off-by: Marek Vasut <marex@denx.de>
+Upstream-Status: Backport
+---
+ bfd/elf32-nios2.c | 31 +++++++++++++++++++++----------
+ 1 file changed, 21 insertions(+), 10 deletions(-)
+
+diff --git a/bfd/elf32-nios2.c b/bfd/elf32-nios2.c
+index 1c54320..babecf3 100644
+--- a/bfd/elf32-nios2.c
++++ b/bfd/elf32-nios2.c
+@@ -3086,7 +3086,15 @@ lookup:
+ case bfd_link_hash_defined:
+ case bfd_link_hash_defweak:
+ gp_found = TRUE;
+- *pgp = lh->u.def.value;
++ {
++ asection *sym_sec = lh->u.def.section;
++ bfd_vma sym_value = lh->u.def.value;
++
++ if (sym_sec->output_section)
++ sym_value = (sym_value + sym_sec->output_offset
++ + sym_sec->output_section->vma);
++ *pgp = sym_value;
++ }
+ break;
+ case bfd_link_hash_indirect:
+ case bfd_link_hash_warning:
+@@ -3719,7 +3727,6 @@ nios2_elf32_relocate_section (bfd *output_bfd,
+ struct elf32_nios2_link_hash_entry *eh;
+ bfd_vma relocation;
+ bfd_vma gp;
+- bfd_vma reloc_address;
+ bfd_reloc_status_type r = bfd_reloc_ok;
+ const char *name = NULL;
+ int r_type;
+@@ -3762,12 +3769,6 @@ nios2_elf32_relocate_section (bfd *output_bfd,
+ if (bfd_link_relocatable (info))
+ continue;
+
+- if (sec && sec->output_section)
+- reloc_address = (sec->output_section->vma + sec->output_offset
+- + rel->r_offset);
+- else
+- reloc_address = 0;
+-
+ if (howto)
+ {
+ switch (howto->type)
+@@ -3816,6 +3817,15 @@ nios2_elf32_relocate_section (bfd *output_bfd,
+ /* Turns an absolute address into a gp-relative address. */
+ if (!nios2_elf_assign_gp (output_bfd, &gp, info))
+ {
++ bfd_vma reloc_address;
++
++ if (sec && sec->output_section)
++ reloc_address = (sec->output_section->vma
++ + sec->output_offset
++ + rel->r_offset);
++ else
++ reloc_address = 0;
++
+ format = _("global pointer relative relocation at address "
+ "0x%08x when _gp not defined\n");
+ sprintf (msgbuf, format, reloc_address);
+@@ -3825,7 +3835,7 @@ nios2_elf32_relocate_section (bfd *output_bfd,
+ else
+ {
+ bfd_vma symbol_address = rel->r_addend + relocation;
+- relocation = relocation + rel->r_addend - gp;
++ relocation = symbol_address - gp;
+ rel->r_addend = 0;
+ if (((signed) relocation < -32768
+ || (signed) relocation > 32767)
+@@ -3833,6 +3843,8 @@ nios2_elf32_relocate_section (bfd *output_bfd,
+ || h->root.type == bfd_link_hash_defined
+ || h->root.type == bfd_link_hash_defweak))
+ {
++ if (h)
++ name = h->root.root.string;
+ format = _("Unable to reach %s (at 0x%08x) from the "
+ "global pointer (at 0x%08x) because the "
+ "offset (%d) is out of the allowed range, "
+@@ -3848,7 +3860,6 @@ nios2_elf32_relocate_section (bfd *output_bfd,
+ rel->r_offset, relocation,
+ rel->r_addend);
+ }
+-
+ break;
+ case R_NIOS2_UJMP:
+ r = nios2_elf32_do_ujmp_relocate (input_bfd, howto,
+--
+2.7.1
+
OpenPOWER on IntegriCloud