From: Andreas Jaeger Date: Mon, 1 Jul 2002 06:42:27 +0000 (+0000) Subject: * elf64-x86-64.c (elf64_x86_64_check_relocs): Certain relocations X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=1b71fb54e3e35320be7bab3268041064b38168cf;p=binutils-gdb.git * elf64-x86-64.c (elf64_x86_64_check_relocs): Certain relocations are not allowed in shared libs code, enforce -fPIC. --- diff --git a/bfd/ChangeLog b/bfd/ChangeLog index a72dffb1ceb..5e45aa53e57 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +2002-07-01 Andreas Jaeger + + * elf64-x86-64.c (elf64_x86_64_check_relocs): Certain relocations + are not allowed in shared libs code, enforce -fPIC. + 2002-06-29 Hans-Peter Nilsson * mmo.c (mmo_write_loc_chunk): Don't eliminate leading and diff --git a/bfd/elf64-x86-64.c b/bfd/elf64-x86-64.c index 0ec6392dffa..314b0703d94 100644 --- a/bfd/elf64-x86-64.c +++ b/bfd/elf64-x86-64.c @@ -660,11 +660,28 @@ elf64_x86_64_check_relocs (abfd, info, sec, relocs) case R_X86_64_8: case R_X86_64_16: case R_X86_64_32: - case R_X86_64_64: case R_X86_64_32S: + /* Let's help debug shared library creation. These relocs + cannot be used in shared libs. Don't error out for + sections we don't care about, such as debug sections or + non-constant sections. */ + if (info->shared + && (sec->flags & SEC_ALLOC) != 0 + && (sec->flags & SEC_READONLY) != 0) + { + (*_bfd_error_handler) + (_("%s: relocation %s can not be used when making a shared object; recompile with -fPIC"), + bfd_archive_filename (abfd), + x86_64_elf_howto_table[ELF64_R_TYPE (rel->r_info)].name); + bfd_set_error (bfd_error_bad_value); + return false; + } + /* Fall through. */ + case R_X86_64_PC8: case R_X86_64_PC16: case R_X86_64_PC32: + case R_X86_64_64: if (h != NULL && !info->shared) { /* If this reloc is in a read-only section, we might