2008-07-22 Simon Baldwin <simonb@google.com>
authorChris Demetriou <cgd@google.com>
Tue, 22 Jul 2008 04:58:33 +0000 (04:58 +0000)
committerChris Demetriou <cgd@google.com>
Tue, 22 Jul 2008 04:58:33 +0000 (04:58 +0000)
        * elflink.c (elf_link_output_extsym): Set st_size to zero for
        symbols from dynamic libraries.

bfd/ChangeLog
bfd/elflink.c

index b5967c95e5ddad126f966ce1b5374ae3c53b69fe..3616c0f5c181a4be83abd900372953723c5a0b6d 100644 (file)
@@ -1,3 +1,8 @@
+2008-07-22  Simon Baldwin  <simonb@google.com>
+
+       * elflink.c (elf_link_output_extsym): Set st_size to zero for
+       symbols from dynamic libraries.
+
 2008-07-21  H.J. Lu  <hongjiu.lu@intel.com>
 
        PR ld/4424
index 69a7c6945ce31376bb2d1a5f10233037a62d34a1..488f98afdb7aef2e00c16ef710e4347d10afb25a 100644 (file)
@@ -8619,6 +8619,15 @@ elf_link_output_extsym (struct elf_link_hash_entry *h, void *data)
       sym.st_info = ELF_ST_INFO (bindtype, ELF_ST_TYPE (sym.st_info));
     }
 
+  /* If this is a symbol defined in a dynamic library, don't use the
+     symbol size from the dynamic library.  Relinking an executable
+     against a new library may introduce gratuitous changes in the
+     executable's symbols if we keep the size.  */
+  if (sym.st_shndx == SHN_UNDEF
+      && !h->def_regular
+      && h->def_dynamic)
+    sym.st_size = 0;
+
   /* If a non-weak symbol with non-default visibility is not defined
      locally, it is a fatal error.  */
   if (! finfo->info->relocatable