2007-07-10 H.J. Lu <hongjiu.lu@intel.com>
authorH.J. Lu <hjl.tools@gmail.com>
Tue, 10 Jul 2007 13:49:04 +0000 (13:49 +0000)
committerH.J. Lu <hjl.tools@gmail.com>
Tue, 10 Jul 2007 13:49:04 +0000 (13:49 +0000)
PR binutils/4756
* simple.c (bfd_simple_get_relocated_section_content): Don't
apply relocation on executable and shared library.

bfd/ChangeLog
bfd/simple.c

index 104e425588827c989403d3a9789ba15e191ce1ad..267213edd6c259a7ec4245ea40bc3a953808b614 100644 (file)
@@ -1,3 +1,9 @@
+2007-07-10  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR binutils/4756
+       * simple.c (bfd_simple_get_relocated_section_content): Don't
+       apply relocation on executable and shared library.
+
 2007-07-10  Nathan Sidwell  <nathan@codesourcery.com>
 
        * elf32-ppc.c (ppc_elf_adjust_dynamic_symbol): Don't eliminate
index 452486834ab93c5ed786a8f6c11900a5a18612db..1b92a05791c0741e30106417b5f753a1c1155464 100644 (file)
@@ -162,7 +162,10 @@ bfd_simple_get_relocated_section_contents (bfd *abfd,
   int storage_needed;
   void *saved_offsets;
 
-  if (! (sec->flags & SEC_RELOC))
+  /* Don't apply relocation on executable and shared library.  See
+     PR 4756.  */
+  if ((abfd->flags & (HAS_RELOC | EXEC_P | DYNAMIC)) != HAS_RELOC
+      || ! (sec->flags & SEC_RELOC))
     {
       bfd_size_type amt = sec->rawsize > sec->size ? sec->rawsize : sec->size;
       bfd_size_type size = sec->rawsize ? sec->rawsize : sec->size;