diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2011-04-23 01:16:31 +0000 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2011-04-23 01:16:31 +0000 |
commit | b70321a200b768e57b211fce3f6926b2b29dee7f (patch) | |
tree | 06aea802ab522c0722006e1063498025884f3271 | |
parent | d0c8589a6bb58649b31f62d2912f685695c81da1 (diff) | |
download | gdb-b70321a200b768e57b211fce3f6926b2b29dee7f.zip gdb-b70321a200b768e57b211fce3f6926b2b29dee7f.tar.gz gdb-b70321a200b768e57b211fce3f6926b2b29dee7f.tar.bz2 |
Warn relocation in readonly section in a shared object.
2011-04-22 H.J. Lu <hongjiu.lu@intel.com>
* elf32-i386.c (elf_i386_readonly_dynrelocs): Warn relocation
in readonly section in a shared object.
(elf_i386_size_dynamic_sections): Likewise.
* elf64-x86-64.c (elf_x86_64_readonly_dynrelocs): Likewise.
(elf_x86_64_size_dynamic_sections): Likewise.
-rw-r--r-- | bfd/ChangeLog | 8 | ||||
-rw-r--r-- | bfd/elf32-i386.c | 13 | ||||
-rw-r--r-- | bfd/elf64-x86-64.c | 13 |
3 files changed, 32 insertions, 2 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 4d98456..cc10c52 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,11 @@ +2011-04-22 H.J. Lu <hongjiu.lu@intel.com> + + * elf32-i386.c (elf_i386_readonly_dynrelocs): Warn relocation + in readonly section in a shared object. + (elf_i386_size_dynamic_sections): Likewise. + * elf64-x86-64.c (elf_x86_64_readonly_dynrelocs): Likewise. + (elf_x86_64_size_dynamic_sections): Likewise. + 2011-04-21 H.J. Lu <hongjiu.lu@intel.com> PR ld/12694 diff --git a/bfd/elf32-i386.c b/bfd/elf32-i386.c index bb79f89..e32ec83 100644 --- a/bfd/elf32-i386.c +++ b/bfd/elf32-i386.c @@ -2399,6 +2399,11 @@ elf_i386_readonly_dynrelocs (struct elf_link_hash_entry *h, void *inf) info->flags |= DF_TEXTREL; + if (info->warn_shared_textrel && info->shared) + info->callbacks->einfo (_("%P: %B: warning: relocation against `%s' in readonly section `%A'.\n"), + p->sec->owner, h->root.root.string, + p->sec); + /* Not an error, just cut short the traversal. */ return FALSE; } @@ -2482,7 +2487,13 @@ elf_i386_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, srel = elf_section_data (p->sec)->sreloc; srel->size += p->count * sizeof (Elf32_External_Rel); if ((p->sec->output_section->flags & SEC_READONLY) != 0) - info->flags |= DF_TEXTREL; + { + info->flags |= DF_TEXTREL; + if (info->warn_shared_textrel && info->shared) + info->callbacks->einfo (_("%P: %B: warning: relocation in readonly section `%A'.\n"), + p->sec->owner, p->sec); + break; + } } } } diff --git a/bfd/elf64-x86-64.c b/bfd/elf64-x86-64.c index 8d00edd..a02b3e8 100644 --- a/bfd/elf64-x86-64.c +++ b/bfd/elf64-x86-64.c @@ -2314,6 +2314,11 @@ elf_x86_64_readonly_dynrelocs (struct elf_link_hash_entry *h, info->flags |= DF_TEXTREL; + if (info->warn_shared_textrel && info->shared) + info->callbacks->einfo (_("%P: %B: warning: relocation against `%s' in readonly section `%A'.\n"), + p->sec->owner, h->root.root.string, + p->sec); + /* Not an error, just cut short the traversal. */ return FALSE; } @@ -2393,7 +2398,13 @@ elf_x86_64_size_dynamic_sections (bfd *output_bfd, srel = elf_section_data (p->sec)->sreloc; srel->size += p->count * bed->s->sizeof_rela; if ((p->sec->output_section->flags & SEC_READONLY) != 0) - info->flags |= DF_TEXTREL; + { + info->flags |= DF_TEXTREL; + if (info->warn_shared_textrel && info->shared) + info->callbacks->einfo (_("%P: %B: warning: relocation in readonly section `%A'.\n"), + p->sec->owner, p->sec); + break; + } } } } |