|
@@ -1,244 +0,0 @@
|
|
|
-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
|
|
|
-
|