aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJiong Wang <jiong.wang@arm.com>2017-06-09 12:02:05 +0100
committerJiong Wang <jiong.wang@arm.com>2017-06-09 12:04:44 +0100
commitdbb2bcd0059f8d91de5a792f8684c8908c316720 (patch)
tree4e5991d93fe69c0905e5a154d064305867edb951
parentfe7bb2d5ab1f47163f38d2070dc1e62c1920bb44 (diff)
Revert "[AArch64] Allow COPY relocation elimination"
This reverts commit bc327528fd2ccdc6c29ab6ae608085dddbad5cc8. This patch can only be committed after PC-relative relocation types support on copy relocation elimination is also completed.
-rw-r--r--bfd/ChangeLog11
-rw-r--r--bfd/elfnn-aarch64.c70
-rw-r--r--ld/ChangeLog6
-rw-r--r--ld/testsuite/ld-aarch64/aarch64-elf.exp2
-rw-r--r--ld/testsuite/ld-aarch64/copy-reloc-eliminate.d4
-rw-r--r--ld/testsuite/ld-aarch64/copy-reloc-exe-eliminate.s7
6 files changed, 8 insertions, 92 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index e99ca85b1e..d899df6cae 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -64,17 +64,6 @@
when generating R_X86_64_IRELATIVE relocation.
(elf_x86_64_finish_dynamic_symbol): Likewise.
-2017-06-08 Jiong Wang <jiong.wang@arm.com>
-
- PR ld/21532
- * elfnn-aarch64.c (ELIMINATE_COPY_RELOCS): Set to 1.
- (elfNN_aarch64_final_link_relocate): Also propagate relocations to
- runtime for copy relocation elimination cases.
- (alias_readonly_dynrelocs): New function.
- (elfNN_aarch64_adjust_dynamic_symbol): Keep the dynamic relocs instead
- of generating copy relocation if it is not against read-only sections.
- (elfNN_aarch64_check_relocs): Likewise.
-
2017-06-06 Jose E. Marchesi <jose.marchesi@oracle.com>
* elf.c (setup_group): Make sure BFD sections are created for all
diff --git a/bfd/elfnn-aarch64.c b/bfd/elfnn-aarch64.c
index 542c98a46f..1edf2a0bde 100644
--- a/bfd/elfnn-aarch64.c
+++ b/bfd/elfnn-aarch64.c
@@ -249,7 +249,7 @@
|| (R_TYPE) == BFD_RELOC_AARCH64_TLSDESC_OFF_G0_NC \
|| (R_TYPE) == BFD_RELOC_AARCH64_TLSDESC_OFF_G1)
-#define ELIMINATE_COPY_RELOCS 1
+#define ELIMINATE_COPY_RELOCS 0
/* Return size of a relocation entry. HTAB is the bfd's
elf_aarch64_link_hash_entry. */
@@ -5169,25 +5169,12 @@ elfNN_aarch64_final_link_relocate (reloc_howto_type *howto,
/* When generating a shared object or relocatable executable, these
relocations are copied into the output file to be resolved at
run time. */
- if (((bfd_link_pic (info)
- || globals->root.is_relocatable_executable)
- && (input_section->flags & SEC_ALLOC)
- && (h == NULL
- || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
- || h->root.type != bfd_link_hash_undefweak))
- /* Or we are creating an executable, we may need to keep relocations
- for symbols satisfied by a dynamic library if we manage to avoid
- copy relocs for the symbol. */
- || (ELIMINATE_COPY_RELOCS
- && !bfd_link_pic (info)
- && h != NULL
- && (input_section->flags & SEC_ALLOC)
- && h->dynindx != -1
- && !h->non_got_ref
- && ((h->def_dynamic
- && !h->def_regular)
- || h->root.type == bfd_link_hash_undefweak
- || h->root.type == bfd_link_hash_undefined)))
+ if ((bfd_link_pic (info)
+ || globals->root.is_relocatable_executable)
+ && (input_section->flags & SEC_ALLOC)
+ && (h == NULL
+ || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
+ || h->root.type != bfd_link_hash_undefweak))
{
Elf_Internal_Rela outrel;
bfd_byte *loc;
@@ -6882,25 +6869,6 @@ elfNN_aarch64_gc_sweep_hook (bfd *abfd,
return TRUE;
}
-/* Return true if we have dynamic relocs against EH or any of its weak
- aliases, that apply to read-only sections. */
-
-static bfd_boolean
-alias_readonly_dynrelocs (struct elf_aarch64_link_hash_entry *eh)
-{
- struct elf_dyn_relocs *p;
- asection *s;
-
- for (p = eh->dyn_relocs; p != NULL; p = p->next)
- {
- s = p->sec->output_section;
- if (s != NULL && (s->flags & SEC_READONLY) != 0)
- return TRUE;
- }
-
- return FALSE;
-}
-
/* Adjust a symbol defined by a dynamic object and referenced by a
regular object. The current definition is in some section of the
dynamic object, but we're not including those sections. We have to
@@ -6974,19 +6942,6 @@ elfNN_aarch64_adjust_dynamic_symbol (struct bfd_link_info *info,
return TRUE;
}
- if (ELIMINATE_COPY_RELOCS)
- {
- struct elf_aarch64_link_hash_entry *eh;
- /* If we didn't find any dynamic relocs in read-only sections, then
- we'll be keeping the dynamic relocs and avoiding the copy reloc. */
- eh = (struct elf_aarch64_link_hash_entry *) h;
- if (eh->dyn_relocs && !alias_readonly_dynrelocs (eh))
- {
- h->non_got_ref = 0;
- return TRUE;
- }
- }
-
/* We must allocate the symbol in our .dynbss section, which will
become part of the .bss section of the executable. There will be
an entry for this symbol in the .dynsym section. The dynamic
@@ -7259,16 +7214,7 @@ elfNN_aarch64_check_relocs (bfd *abfd, struct bfd_link_info *info,
/* No need to do anything if we're not creating a shared
object. */
- if (!(bfd_link_pic (info)
- /* If on the other hand, we are creating an executable, we
- may need to keep relocations for symbols satisfied by a
- dynamic library if we manage to avoid copy relocs for the
- symbol. */
- || (ELIMINATE_COPY_RELOCS
- && !bfd_link_pic (info)
- && h != NULL
- && (h->root.type == bfd_link_hash_defweak
- || !h->def_regular))))
+ if (! bfd_link_pic (info))
break;
{
diff --git a/ld/ChangeLog b/ld/ChangeLog
index 2cbe09d911..50c78132f4 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -12,12 +12,6 @@
* testsuite/ld-ifunc/ifunc-1-local-x86.map: New file.
* testsuite/ld-ifunc/ifunc-1-x86.map: Likewise.
-2017-06-08 Jiong Wang <jiong.wang@arm.com>
-
- * testsuite/ld-aarch64/copy-reloc-eliminate.d: New test.
- * testsuite/ld-aarch64/copy-reloc-exe-eliminate.s: New test source file.
- * testsuite/ld-aarch64/aarch64-elf.exp: Run new testcase.
-
2017-06-07 Alan Modra <amodra@gmail.com>
* testsuite/ld-unique/pr21529.d: xfail aarch64, arm, hppa, ia64,
diff --git a/ld/testsuite/ld-aarch64/aarch64-elf.exp b/ld/testsuite/ld-aarch64/aarch64-elf.exp
index 66e7e64696..ca21e171a1 100644
--- a/ld/testsuite/ld-aarch64/aarch64-elf.exp
+++ b/ld/testsuite/ld-aarch64/aarch64-elf.exp
@@ -335,8 +335,6 @@ set aarch64elflinktests {
{} "copy-reloc-so.so"}
{"ld-aarch64/exe with copy relocation" "-e0 tmpdir/copy-reloc-so.so" "" ""
{copy-reloc-exe.s} {{objdump -R copy-reloc.d}} "copy-reloc"}
- {"ld-aarch64/exe with copy relocation elimination" "-e0 tmpdir/copy-reloc-so.so" "" ""
- {copy-reloc-exe-eliminate.s} {{objdump -R copy-reloc-eliminate.d}} "copy-reloc-elimination"}
{"ld-aarch64/so with global func" "-shared" "" "" {func-in-so.s}
{} "func-in-so.so"}
{"ld-aarch64/func sym hash opt for exe"
diff --git a/ld/testsuite/ld-aarch64/copy-reloc-eliminate.d b/ld/testsuite/ld-aarch64/copy-reloc-eliminate.d
deleted file mode 100644
index 9657d65113..0000000000
--- a/ld/testsuite/ld-aarch64/copy-reloc-eliminate.d
+++ /dev/null
@@ -1,4 +0,0 @@
-.*
-DYNAMIC RELOCATION RECORDS
-OFFSET.*TYPE.*VALUE.*
-.*R_AARCH64_ABS64.*global_a
diff --git a/ld/testsuite/ld-aarch64/copy-reloc-exe-eliminate.s b/ld/testsuite/ld-aarch64/copy-reloc-exe-eliminate.s
deleted file mode 100644
index 33227aad3e..0000000000
--- a/ld/testsuite/ld-aarch64/copy-reloc-exe-eliminate.s
+++ /dev/null
@@ -1,7 +0,0 @@
- .global p
- .section .data.rel.ro,"aw",%progbits
- .align 3
- .type p, %object
- .size p, 8
-p:
- .xword global_a