diff options
author | H.J. Lu <hjl@lucon.org> | 2004-06-24 15:07:02 +0000 |
---|---|---|
committer | H.J. Lu <hjl@lucon.org> | 2004-06-24 15:07:02 +0000 |
commit | 4e270f51499cd4c44bd9efa0bf7d4f6ca8613043 (patch) | |
tree | d7bad341ee3f855517198d6807a771525c2a8319 /bfd/elf64-x86-64.c | |
parent | e4140d432a757c86ff12f366c85fe5d1b3185448 (diff) | |
download | gdb-4e270f51499cd4c44bd9efa0bf7d4f6ca8613043.tar.gz |
2004-06-24 H.J. Lu <hongjiu.lu@intel.com>
* elf64-x86-64.c (elf64_x86_64_check_relocs): Warn overflow
relocation symbol.
(elf64_x86_64_relocate_section): Issue an error for
R_X86_64_PC8, R_X86_64_PC16 and R_X86_64_PC32 relocations
against global symbols when building shared library.
Diffstat (limited to 'bfd/elf64-x86-64.c')
-rw-r--r-- | bfd/elf64-x86-64.c | 25 |
1 files changed, 21 insertions, 4 deletions
diff --git a/bfd/elf64-x86-64.c b/bfd/elf64-x86-64.c index a24616b7880..72b065281e8 100644 --- a/bfd/elf64-x86-64.c +++ b/bfd/elf64-x86-64.c @@ -663,9 +663,10 @@ elf64_x86_64_check_relocs (bfd *abfd, struct bfd_link_info *info, asection *sec, if (info->shared) { (*_bfd_error_handler) - (_("%s: relocation %s can not be used when making a shared object; recompile with -fPIC"), + (_("%s: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC"), bfd_archive_filename (abfd), - x86_64_elf_howto_table[r_type].name); + x86_64_elf_howto_table[r_type].name, + (h) ? h->root.root.string : "a local symbol"); bfd_set_error (bfd_error_bad_value); return FALSE; } @@ -788,9 +789,10 @@ elf64_x86_64_check_relocs (bfd *abfd, struct bfd_link_info *info, asection *sec, && (sec->flags & SEC_READONLY) != 0) { (*_bfd_error_handler) - (_("%s: relocation %s can not be used when making a shared object; recompile with -fPIC"), + (_("%s: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC"), bfd_archive_filename (abfd), - x86_64_elf_howto_table[r_type].name); + x86_64_elf_howto_table[r_type].name, + (h) ? h->root.root.string : "a local symbol"); bfd_set_error (bfd_error_bad_value); return FALSE; } @@ -1946,6 +1948,21 @@ elf64_x86_64_relocate_section (bfd *output_bfd, struct bfd_link_info *info, case R_X86_64_PC8: case R_X86_64_PC16: case R_X86_64_PC32: + if (info->shared + && !SYMBOL_REFERENCES_LOCAL (info, h) + && (sec->flags & SEC_ALLOC) != 0 + && (sec->flags & SEC_READONLY) != 0) + { + (*_bfd_error_handler) + (_("%s: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC"), + bfd_archive_filename (input_bfd), + x86_64_elf_howto_table[r_type].name, + (h) ? h->root.root.string : "a local symbol"); + bfd_set_error (bfd_error_bad_value); + return FALSE; + } + /* Fall through. */ + case R_X86_64_8: case R_X86_64_16: case R_X86_64_32: |