* elf32-i386.c (elf_i386_relocate_section): When generating a
authorIan Lance Taylor <ian@airs.com>
Mon, 16 Jun 1997 19:24:23 +0000 (19:24 +0000)
committerIan Lance Taylor <ian@airs.com>
Mon, 16 Jun 1997 19:24:23 +0000 (19:24 +0000)
shared library, do the relocation if the input section is not
allocated in memory.

bfd/ChangeLog
bfd/elf32-i386.c

index f84f7425f2abb7233c5c01db6177ffea968f57ec..8c429e6cd81a48e9d34420d4f2cf03eb6e9ffff3 100644 (file)
@@ -12,6 +12,10 @@ Mon Jun 16 14:42:14 1997  H.J. Lu  <hjl@gnu.ai.mit.edu>
 
 Mon Jun 16 12:31:29 1997  Ian Lance Taylor  <ian@cygnus.com>
 
+       * elf32-i386.c (elf_i386_relocate_section): When generating a
+       shared library, do the relocation if the input section is not
+       allocated in memory.
+
        * elflink.h (NAME(bfd_elf,size_dynamic_sections)): Call
        elf_link_assign_sym_version before elf_adjust_dynamic_symbol.
        (elf_fix_symbol_flags): New static function, broken out of
index 91f0c5015e262861755286dc8e6696bb9446fb1f..4d5324a0a8838eb11631de868a2daded4db483f6 100644 (file)
@@ -1187,7 +1187,8 @@ elf_i386_relocate_section (output_bfd, info, input_bfd, input_section,
                          || (h->elf_link_hash_flags
                              & ELF_LINK_HASH_DEF_REGULAR) == 0)
                      && (r_type == R_386_32
-                         || r_type == R_386_PC32)))
+                         || r_type == R_386_PC32)
+                     && (input_section->flags & SEC_ALLOC) != 0))
                {
                  /* In these cases, we don't need the relocation
                      value.  We check specially because in some
@@ -1439,7 +1440,10 @@ elf_i386_relocate_section (output_bfd, info, input_bfd, input_section,
              else if (r_type == R_386_PC32)
                {
                  BFD_ASSERT (h != NULL && h->dynindx != -1);
-                 relocate = false;
+                 if ((input_section->flags & SEC_ALLOC) != 0)
+                   relocate = false;
+                 else
+                   relocate = true;
                  outrel.r_info = ELF32_R_INFO (h->dynindx, R_386_PC32);
                }
              else
@@ -1457,7 +1461,10 @@ elf_i386_relocate_section (output_bfd, info, input_bfd, input_section,
                  else
                    {
                      BFD_ASSERT (h->dynindx != -1);
-                     relocate = false;
+                     if ((input_section->flags & SEC_ALLOC) != 0)
+                       relocate = false;
+                     else
+                       relocate = true;
                      outrel.r_info = ELF32_R_INFO (h->dynindx, R_386_32);
                    }
                }