2004-06-24 H.J. Lu <hongjiu.lu@intel.com>
authorH.J. Lu <hjl.tools@gmail.com>
Thu, 24 Jun 2004 15:07:02 +0000 (15:07 +0000)
committerH.J. Lu <hjl.tools@gmail.com>
Thu, 24 Jun 2004 15:07:02 +0000 (15:07 +0000)
* 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.

bfd/ChangeLog
bfd/elf64-x86-64.c

index 112d4c7b36b6123c9db42d8e30b4b8114818da6a..7aebb9f0deaad691dffa4549266583e4f7fa80d2 100644 (file)
@@ -1,3 +1,11 @@
+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.
+
 2004-06-24  Alan Modra  <amodra@bigpond.net.au>
 
        * section.c (struct sec): Rename "_cooked_size" to "size".
index a24616b7880fb82632c4aaeddbbf6560236af145..72b065281e883b97e9191d7790c6db11c386db57 100644 (file)
@@ -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: