kumquat-buildroot/package/binutils/arc-2019.09-eng002/0002-Revert-ARC-Check-UNDEFWEAK_NO_DYNAMIC_RELOC.patch
Evgeniy Didin 0c4ae26894 package/binutils/arc-2019.09-eng002: fix glibc build with -fPIE
In Binutils rev arc-2019.09-eng002 there is a commit 182352753240
("[ARC] Check UNDEFWEAK_NO_DYNAMIC_RELOC") which caused glibc
build error  in case of BR2_PIC_PIE=y.
This commit adds reverting this commit patch to
package/binutils/arc-2019.09-eng002

These binutils changes will be a part of the next -eng00x or RCx
ARC toolchain but now we are making this commit to get known issue fixed.

Fixes:
	http://autobuild.buildroot.net/results/4bc/4bca850dbf966687bf85c2c23465be0da47b7997//

Signed-off-by: Evgeniy Didin <Evgeniy.Didin@synopsys.com>
Cc: Claudiu Zissulescu <claziss@synopsys.com>
Cc: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
Cc: arc-buildroot@synopsys.com
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
2019-11-04 23:05:50 +01:00

245 lines
6.7 KiB
Diff

From 0bd0ecc386b82ce4b61dc64fe6cdd6a851acc866 Mon Sep 17 00:00:00 2001
From: Claudiu Zissulescu <claziss@gmail.com>
Date: Thu, 31 Oct 2019 10:39:07 +0100
Subject: [PATCH] Revert "[ARC] Check UNDEFWEAK_NO_DYNAMIC_RELOC"
Gives errors when -fPIE used.
Signed-off-by: Claudiu Zissulescu <claziss@synopsys.com>
This reverts commit 1823527532407648f3061b130c55f2138496b2aa.
---
bfd/elf32-arc.c | 120 +++++++++++++------------------
ld/testsuite/ld-arc/weakhid.s | 13 ----
ld/testsuite/ld-arc/weakhiddso.d | 29 --------
3 files changed, 50 insertions(+), 112 deletions(-)
delete mode 100644 ld/testsuite/ld-arc/weakhid.s
delete mode 100644 ld/testsuite/ld-arc/weakhiddso.d
diff --git a/bfd/elf32-arc.c b/bfd/elf32-arc.c
index b92b0b7501a..e9463bea04f 100644
--- a/bfd/elf32-arc.c
+++ b/bfd/elf32-arc.c
@@ -1462,7 +1462,6 @@ elf_arc_relocate_section (bfd * output_bfd,
struct elf_link_hash_entry * h2;
const char * msg;
bfd_boolean unresolved_reloc = FALSE;
- bfd_boolean resolved_to_zero;
struct arc_relocation_data reloc_data =
{
@@ -1604,8 +1603,6 @@ elf_arc_relocate_section (bfd * output_bfd,
continue;
}
- resolved_to_zero = (h != NULL && UNDEFWEAK_NO_DYNAMIC_RELOC (info, h));
-
if (r_symndx < symtab_hdr->sh_info) /* A local symbol. */
{
reloc_data.sym_value = sym->st_value;
@@ -1714,8 +1711,7 @@ elf_arc_relocate_section (bfd * output_bfd,
reloc_data.sym_section = htab->splt;
reloc_data.should_relocate = TRUE;
}
- /* See pr22269. */
- else if (!resolved_to_zero)
+ else
continue;
}
else
@@ -1787,26 +1783,24 @@ elf_arc_relocate_section (bfd * output_bfd,
switch (r_type)
{
- case R_ARC_32:
- case R_ARC_32_ME:
- case R_ARC_PC32:
- case R_ARC_32_PCREL:
- if (bfd_link_pic (info)
- && !resolved_to_zero
- && (input_section->flags & SEC_ALLOC) != 0
- && (!IS_ARC_PCREL_TYPE (r_type)
- || (h != NULL
- && h->dynindx != -1
- && !h->def_regular
- && (!info->symbolic || !h->def_regular))))
- {
- Elf_Internal_Rela outrel;
- bfd_byte *loc;
- bfd_boolean skip = FALSE;
- bfd_boolean relocate = FALSE;
- asection *sreloc = _bfd_elf_get_dynamic_reloc_section
- (input_bfd, input_section,
- /*RELA*/ TRUE);
+ case R_ARC_32:
+ case R_ARC_32_ME:
+ case R_ARC_PC32:
+ case R_ARC_32_PCREL:
+ if (bfd_link_pic (info)
+ && (!IS_ARC_PCREL_TYPE (r_type)
+ || (h != NULL
+ && h->dynindx != -1
+ && !h->def_regular
+ && (!info->symbolic || !h->def_regular))))
+ {
+ Elf_Internal_Rela outrel;
+ bfd_byte *loc;
+ bfd_boolean skip = FALSE;
+ bfd_boolean relocate = FALSE;
+ asection *sreloc = _bfd_elf_get_dynamic_reloc_section
+ (input_bfd, input_section,
+ /*RELA*/ TRUE);
BFD_ASSERT (sreloc != NULL);
@@ -2009,8 +2003,6 @@ elf_arc_check_relocs (bfd * abfd,
switch (r_type)
{
- case R_ARC_8:
- case R_ARC_16:
case R_ARC_32:
case R_ARC_32_ME:
/* During shared library creation, these relocs should not
@@ -2041,51 +2033,39 @@ elf_arc_check_relocs (bfd * abfd,
return FALSE;
}
- /* In some cases we are not setting the 'non_got_ref' flag,
- even though the relocations don't require a GOT access.
- We should extend the testing in this area to ensure that
- no significant cases are being missed. */
- if (h)
- h->non_got_ref = 1;
-
- /* We don't need to handle relocs into sections not going
- into the "real" output. */
- if ((sec->flags & SEC_ALLOC) == 0)
- break;
+ /* In some cases we are not setting the 'non_got_ref'
+ flag, even though the relocations don't require a GOT
+ access. We should extend the testing in this area to
+ ensure that no significant cases are being missed. */
+ if (h)
+ h->non_got_ref = 1;
+ /* FALLTHROUGH */
+ case R_ARC_PC32:
+ case R_ARC_32_PCREL:
+ if ((bfd_link_pic (info))
+ && ((r_type != R_ARC_PC32 && r_type != R_ARC_32_PCREL)
+ || (h != NULL
+ && (!info->symbolic || !h->def_regular))))
+ {
+ if (sreloc == NULL)
+ {
+ if (info->dynamic
+ && ! htab->dynamic_sections_created
+ && ! _bfd_elf_link_create_dynamic_sections (abfd, info))
+ return FALSE;
+ sreloc = _bfd_elf_make_dynamic_reloc_section (sec, dynobj,
+ 2, abfd,
+ /*rela*/
+ TRUE);
+
+ if (sreloc == NULL)
+ return FALSE;
+ }
+ sreloc->size += sizeof (Elf32_External_Rela);
- /* No need to do anything if we're not creating a shared
- object. */
- if (!bfd_link_pic (info)
- || (h != NULL
- && UNDEFWEAK_NO_DYNAMIC_RELOC (info, h)))
+ }
+ default:
break;
-
- /* FALLTHROUGH */
- case R_ARC_PC32:
- case R_ARC_32_PCREL:
- if ((bfd_link_pic (info))
- && ((r_type != R_ARC_PC32 && r_type != R_ARC_32_PCREL)
- || (h != NULL
- && (!info->symbolic || !h->def_regular))))
- {
- if (sreloc == NULL)
- {
- if (info->dynamic
- && ! htab->dynamic_sections_created
- && ! _bfd_elf_link_create_dynamic_sections (abfd, info))
- return FALSE;
- sreloc = _bfd_elf_make_dynamic_reloc_section (sec, dynobj,
- 2, abfd,
- /*rela*/
- TRUE);
-
- if (sreloc == NULL)
- return FALSE;
- }
- sreloc->size += sizeof (Elf32_External_Rela);
- }
- default:
- break;
}
if (is_reloc_for_PLT (howto))
diff --git a/ld/testsuite/ld-arc/weakhid.s b/ld/testsuite/ld-arc/weakhid.s
deleted file mode 100644
index a8c87da1a2d..00000000000
--- a/ld/testsuite/ld-arc/weakhid.s
+++ /dev/null
@@ -1,13 +0,0 @@
- .weak xweakobj
- .weak xweakhidobj
- .hidden xweakhidobj
-
- .data
- .global x
- .type x,@object
-x:
- .word xweakhidobj
- .word xweakobj
- .word xregobj
-.Lfe1:
- .size x,.Lfe1-x
diff --git a/ld/testsuite/ld-arc/weakhiddso.d b/ld/testsuite/ld-arc/weakhiddso.d
deleted file mode 100644
index f52f27fc048..00000000000
--- a/ld/testsuite/ld-arc/weakhiddso.d
+++ /dev/null
@@ -1,29 +0,0 @@
-#source: weakhid.s
-#ld: --shared -m arclinux -z nocombreloc --hash-style=sysv
-#objdump: -s -R -T
-
-# Check that .weak and .weak .hidden object references are handled
-# correctly when generating a DSO. Copied from CRIS port.
-
-.*: +file format .*arc.*
-
-DYNAMIC SYMBOL TABLE:
-0+2208 l d \.data 0+ \.data
-0+2208 g DO \.data 0+c x
-0+ D \*UND\* 0+ xregobj
-0+2214 g D \.data 0+ __bss_start
-0+ w D \*UND\* 0+ xweakobj
-0+2214 g D \.data 0+ _edata
-0+2214 g D \.data 0+ _end
-
-
-DYNAMIC RELOCATION RECORDS
-OFFSET TYPE VALUE
-0+2210 R_ARC_32 +xregobj
-0+ R_ARC_NONE +\*ABS\*
-
-Contents of section \.hash:
-#...
-Contents of section \.data:
- 2208 00000000 00000000 00000000 .*
-#...
\ No newline at end of file
--
2.17.2