From 3bf083ed23b1337341129b810ed5da29ba8207f9 Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Tue, 5 Dec 2017 10:03:03 +1030 Subject: dyn_relocs tidy Many targets define their own dyn_relocs struct when they could use struct elf_dyn_relocs. This patch tidies that, and uses readonly_dynrelocs in a few more places. The SH adjust_dynamic_symbol had some really weird code dating back to 2002 that looked over dynamic relocations for any in SEC_HAS_CONTENTS or SEC_READONLY sections, rather than just the usual SEC_READONLY sections. So basically any dynamic relocation. What's more, the SH relocate_section has no support for emitting dynamic relocations in non-PIC. In other words, SH has no support for avoiding copy relocs in non-PIC. I've made that more obvious by using "if (0 && ..)" in asjust_dynamic_symbol. Unfortunately, LM32, M32R, NDS32, and OR1K copied the bogus SH adjust_dynamic_symbol code. So none of those targets would have avoided copy relocs. LM32, M32R, NDS32 get the "if (0)" treatment too. (LM32 is even more broken in that non_got_ref is never set.) OR1K relocate_section looks like it might support dynamic relocs in non-PIC, so I've enabled the copy reloc avoidance code for that target. * elf32-hppa.c (struct elf32_hppa_dyn_reloc_entry): Delete. Use struct elf_dyn_relocs throughout file instead. (elf32_hppa_adjust_dynamic_symbol): Comment tidy. * elf32-lm32.c (struct elf_lm32_dyn_relocs): Delete. Use struct elf_dyn_relocs throughout file instead. (lm32_elf_adjust_dynamic_symbol): Use readonly_dynrelocs, but disable. Disable -z no-copyreloc too. * elf32-m32r.c (struct elf_m32r_dyn_relocs): Delete. Use struct elf_dyn_relocs throughout file instead. (m32r_elf_adjust_dynamic_symbol): Use readonly_dynrelocs, but disable. Disable -z no-copyreloc too. * elf32-metag.c (struct elf_metag_dyn_reloc_entry): Delete. Use struct elf_dyn_relocs throughout file instead. (elf_metag_adjust_dynamic_symbol): Use readonly_dynrelocs. * elf32-microblaze.c (struct elf32_mb_dyn_relocs): Delete. Use struct elf_dyn_relocs throughout file instead. (readonly_dynrelocs): New function. (microblaze_elf_adjust_dynamic_symbol): Use it. * elf32-nds32.c (struct elf_nds32_dyn_relocs): Delete. Use struct elf_dyn_relocs throughout file instead. (nds32_elf_adjust_dynamic_symbol): Use readonly_dynrelocs, but disable. Disable -z no-copyreloc too. * elf32-nios2.c (struct elf32_nios2_dyn_relocs): Delete. Use struct elf_dyn_relocs throughout file instead. * elf32-or1k.c (struct elf_or1k_dyn_relocs): Delete. Use struct elf_dyn_relocs throughout file instead. (or1k_elf_adjust_dynamic_symbol): Use readonly_dynrelocs. * elf32-sh.c (struct elf_sh_dyn_relocs): Delete. Use struct elf_dyn_relocs throughout file instead. (sh_elf_adjust_dynamic_symbol): Use readonly_dynrelocs, but disable. Disable -z no-copyreloc too. * elf32-tilepro.c (struct tilepro_elf_dyn_relocs): Delete. Use struct elf_dyn_relocs throughout file instead. (tilepro_elf_adjust_dynamic_symbol): Use readonly_dynrelocs. * elfnn-riscv.c (struct riscv_elf_dyn_relocs): Delete. Use struct elf_dyn_relocs throughout file instead. (riscv_elf_adjust_dynamic_symbol): Use readonly_dynrelocs. * elfxx-sparc.c (struct _bfd_sparc_elf_dyn_relocs): Delete. Use struct elf_dyn_relocs throughout file instead. (_bfd_sparc_elf_adjust_dynamic_symbol): Use readonly_dynrelocs. * elfxx-tilegx.c (struct tilegx_elf_dyn_relocs): Delete. Use struct elf_dyn_relocs throughout file instead. (tilegx_elf_adjust_dynamic_symbol): Use readonly_dynrelocs. * elf32-s390.c (elf_s390_adjust_dynamic_symbol): Use readonly_dynrelocs. * elf64-s390.c (elf_s390_adjust_dynamic_symbol): Use readonly_dynrelocs. --- bfd/ChangeLog | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) (limited to 'bfd/ChangeLog') diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 927a4b3..c588280 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,5 +1,52 @@ 2017-12-06 Alan Modra + * elf32-hppa.c (struct elf32_hppa_dyn_reloc_entry): Delete. Use + struct elf_dyn_relocs throughout file instead. + (elf32_hppa_adjust_dynamic_symbol): Comment tidy. + * elf32-lm32.c (struct elf_lm32_dyn_relocs): Delete. Use + struct elf_dyn_relocs throughout file instead. + (lm32_elf_adjust_dynamic_symbol): Use readonly_dynrelocs. + * elf32-m32r.c (struct elf_m32r_dyn_relocs): Delete. Use + struct elf_dyn_relocs throughout file instead. + (m32r_elf_adjust_dynamic_symbol): Use readonly_dynrelocs, but disable. + Disable -z no-copyreloc too. + * elf32-metag.c (struct elf_metag_dyn_reloc_entry): Delete. Use + struct elf_dyn_relocs throughout file instead. + (elf_metag_adjust_dynamic_symbol): Use readonly_dynrelocs. + * elf32-microblaze.c (struct elf32_mb_dyn_relocs): Delete. Use + struct elf_dyn_relocs throughout file instead. + (readonly_dynrelocs): New function. + (microblaze_elf_adjust_dynamic_symbol): Use it. + * elf32-nds32.c (struct elf_nds32_dyn_relocs): Delete. Use + struct elf_dyn_relocs throughout file instead. + (nds32_elf_adjust_dynamic_symbol): Use readonly_dynrelocs, but disable. + Disable -z no-copyreloc too. + * elf32-nios2.c (struct elf32_nios2_dyn_relocs): Delete. Use + struct elf_dyn_relocs throughout file instead. + * elf32-or1k.c (struct elf_or1k_dyn_relocs): Delete. Use + struct elf_dyn_relocs throughout file instead. + (or1k_elf_adjust_dynamic_symbol): Use readonly_dynrelocs. + * elf32-sh.c (struct elf_sh_dyn_relocs): Delete. Use + struct elf_dyn_relocs throughout file instead. + (sh_elf_adjust_dynamic_symbol): Use readonly_dynrelocs, but disable. + Disable -z no-copyreloc too. + * elf32-tilepro.c (struct tilepro_elf_dyn_relocs): Delete. Use + struct elf_dyn_relocs throughout file instead. + (tilepro_elf_adjust_dynamic_symbol): Use readonly_dynrelocs. + * elfnn-riscv.c (struct riscv_elf_dyn_relocs): Delete. Use + struct elf_dyn_relocs throughout file instead. + (riscv_elf_adjust_dynamic_symbol): Use readonly_dynrelocs. + * elfxx-sparc.c (struct _bfd_sparc_elf_dyn_relocs): Delete. Use + struct elf_dyn_relocs throughout file instead. + (_bfd_sparc_elf_adjust_dynamic_symbol): Use readonly_dynrelocs. + * elfxx-tilegx.c (struct tilegx_elf_dyn_relocs): Delete. Use + struct elf_dyn_relocs throughout file instead. + (tilegx_elf_adjust_dynamic_symbol): Use readonly_dynrelocs. + * elf32-s390.c (elf_s390_adjust_dynamic_symbol): Use readonly_dynrelocs. + * elf64-s390.c (elf_s390_adjust_dynamic_symbol): Use readonly_dynrelocs. + +2017-12-06 Alan Modra + * elf32-ppc.c (ppc_elf_adjust_dynamic_symbol): Comment tidy. * elf64-ppc.c (ppc64_elf_adjust_dynamic_symbol): Likewise. * elfnn-aarch64.c (elfNN_aarch64_adjust_dynamic_symbol): Likewise. -- cgit v1.1