--- /dev/null
+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
+