2000-05-14 H.J. Lu (hjl@gnu.org)
authorH.J. Lu <hjl.tools@gmail.com>
Sun, 14 May 2000 17:13:16 +0000 (17:13 +0000)
committerH.J. Lu <hjl.tools@gmail.com>
Sun, 14 May 2000 17:13:16 +0000 (17:13 +0000)
* objcopy.c (filter_symbols): Don't strip global symbols in
relocatable object files.

binutils/ChangeLog
binutils/objcopy.c

index 0403f87fd307eae2eb84bb686ddc097dfdbe498d..7ee94d4ae743673acf6500f59d20bdc53cff19c4 100644 (file)
@@ -1,3 +1,8 @@
+2000-05-14  H.J. Lu  (hjl@gnu.org)
+
+       * objcopy.c (filter_symbols): Don't strip global symbols in
+       relocatable object files.
+
 2000-05-14  Alan Modra  <alan@linuxcare.com.au>
 
        * size.c (usage): Associate short options with corresponding long
index 0d778a36c65249141aef329d7dcea8be8ae77199..36d5f4c76e3b45c5654fbd07fb651f38a646f24d 100644 (file)
@@ -556,6 +556,8 @@ filter_symbols (abfd, obfd, osyms, isyms, symcount)
 {
   register asymbol **from = isyms, **to = osyms;
   long src_count = 0, dst_count = 0;
+  int relocatable = (abfd->flags & (HAS_RELOC | EXEC_P | DYNAMIC))
+                   == HAS_RELOC;
 
   for (; src_count < symcount; src_count++)
     {
@@ -610,6 +612,9 @@ filter_symbols (abfd, obfd, osyms, isyms, symcount)
                   && ((*bfd_get_section (sym)->symbol_ptr_ptr)->flags
                       & BSF_KEEP) != 0))
        keep = 1;
+      else if (relocatable                     /* Relocatable file. */
+              && (flags & (BSF_GLOBAL | BSF_WEAK)) != 0)
+       keep = 1;
       else if ((flags & BSF_GLOBAL) != 0       /* Global symbol.  */
               || (flags & BSF_WEAK) != 0
               || bfd_is_und_section (bfd_get_section (sym))