diff options
author | Hans-Peter Nilsson <hp@bitrange.com> | 2017-01-27 01:50:06 +0100 |
---|---|---|
committer | Hans-Peter Nilsson <hp@bitrange.com> | 2017-01-27 01:50:06 +0100 |
commit | 1fbd05e16ebde966e44c1108dc77871f3fba329a (patch) | |
tree | 5261f0c088dd0097f9f61c6f3ce9fc698be00e55 /bfd | |
parent | b51e1e94d66af7f63cd9052a16881087da111ef1 (diff) | |
download | gdb-1fbd05e16ebde966e44c1108dc77871f3fba329a.zip gdb-1fbd05e16ebde966e44c1108dc77871f3fba329a.tar.gz gdb-1fbd05e16ebde966e44c1108dc77871f3fba329a.tar.bz2 |
Fix PR ld/20995 for cris-linux
PR ld/20995
* elf32-cris.c (elf_cris_size_dynamic_sections): Handle sdynrelro.
(elf_cris_adjust_dynamic_symbol): Place variables copied into the
executable from read-only sections into sdynrelro.
(elf_cris_finish_dynamic_symbol): Select sreldynrelro for
dynamic relocs in sdynrelro.
(elf_backend_want_dynrelro): Define.
Diffstat (limited to 'bfd')
-rw-r--r-- | bfd/ChangeLog | 10 | ||||
-rw-r--r-- | bfd/elf32-cris.c | 30 |
2 files changed, 31 insertions, 9 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index ab80064..d5fd77c 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,13 @@ +2017-01-27 Hans-Peter Nilsson <hp@axis.com> + + PR ld/20995 + * elf32-cris.c (elf_cris_size_dynamic_sections): Handle sdynrelro. + (elf_cris_adjust_dynamic_symbol): Place variables copied into the + executable from read-only sections into sdynrelro. + (elf_cris_finish_dynamic_symbol): Select sreldynrelro for + dynamic relocs in sdynrelro. + (elf_backend_want_dynrelro): Define. + 2017-01-25 Sebastian Huber <sebastian.huber@embedded-brains.de> * config.bfd (*-*-rtemsaout*): Mark as removed. diff --git a/bfd/elf32-cris.c b/bfd/elf32-cris.c index ba4e494..0c8945e 100644 --- a/bfd/elf32-cris.c +++ b/bfd/elf32-cris.c @@ -2278,8 +2278,10 @@ elf_cris_finish_dynamic_symbol (bfd *output_bfd, && (h->root.type == bfd_link_hash_defined || h->root.type == bfd_link_hash_defweak)); - s = bfd_get_linker_section (dynobj, ".rela.bss"); - BFD_ASSERT (s != NULL); + if ((h->root.u.def.section->flags & SEC_READONLY) != 0) + s = htab->root.sreldynrelro; + else + s = htab->root.srelbss; rela.r_offset = (h->root.u.def.value + h->root.u.def.section->output_section->vma @@ -2840,6 +2842,7 @@ elf_cris_adjust_dynamic_symbol (struct bfd_link_info *info, struct elf_cris_link_hash_table * htab; bfd *dynobj; asection *s; + asection *srel; bfd_size_type plt_entry_size; htab = elf_cris_hash_table (info); @@ -3027,23 +3030,30 @@ elf_cris_adjust_dynamic_symbol (struct bfd_link_info *info, both the dynamic object and the regular object will refer to the same memory location for the variable. */ - s = bfd_get_linker_section (dynobj, ".dynbss"); - BFD_ASSERT (s != NULL); - /* We must generate a R_CRIS_COPY reloc to tell the dynamic linker to copy the initial value out of the dynamic object and into the runtime process image. We need to remember the offset into the .rela.bss section we are going to use. */ + + if ((h->root.u.def.section->flags & SEC_READONLY) != 0) + { + s = htab->root.sdynrelro; + srel = htab->root.sreldynrelro; + } + else + { + s = htab->root.sdynbss; + srel = htab->root.srelbss; + } if ((h->root.u.def.section->flags & SEC_ALLOC) != 0 && h->size != 0) { - asection *srel; - - srel = bfd_get_linker_section (dynobj, ".rela.bss"); BFD_ASSERT (srel != NULL); srel->size += sizeof (Elf32_External_Rela); h->needs_copy = 1; } + BFD_ASSERT (s != NULL); + return _bfd_elf_adjust_dynamic_copy (info, h, s); } @@ -3787,7 +3797,8 @@ elf_cris_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, } } else if (! CONST_STRNEQ (name, ".got") - && strcmp (name, ".dynbss") != 0) + && strcmp (name, ".dynbss") != 0 + && s != htab->root.sdynrelro) { /* It's not one of our sections, so don't allocate space. */ continue; @@ -4325,6 +4336,7 @@ elf_cris_got_elt_size (bfd *abfd ATTRIBUTE_UNUSED, #define elf_backend_got_header_size 12 #define elf_backend_got_elt_size elf_cris_got_elt_size #define elf_backend_dtrel_excludes_plt 1 +#define elf_backend_want_dynrelro 1 /* Later, we my want to optimize RELA entries into REL entries for dynamic linking and libraries (if it's a win of any significance). Until then, |