2004-02-24 Andrew Cagney <cagney@redhat.com>
[deliverable/binutils-gdb.git] / binutils / objcopy.c
index 1d71d9d9c50f2d8cae968d7bb0bd099f76697f37..96233986c3e01b5c1ed1e2f4439a0b2e4b619b7f 100644 (file)
@@ -28,6 +28,7 @@
 #include "budbg.h"
 #include "filenames.h"
 #include "fnmatch.h"
+#include "elf-bfd.h"
 #include <sys/stat.h>
 
 /* A list of symbols to explicitly strip out, or to keep.  A linked
@@ -776,7 +777,7 @@ is_strip_section (bfd *abfd ATTRIBUTE_UNUSED, asection *sec)
        return FALSE;
     }
 
-  return strip_symbols == STRIP_NONDEBUG ? TRUE : FALSE;
+  return FALSE;
 }
 
 /* Choose which symbol entries to copy; put the result in OSYMS.
@@ -1909,6 +1910,13 @@ setup_section (bfd *ibfd, sec_ptr isection, void *obfdarg)
 
   if (p != NULL && p->set_flags)
     flags = p->flags | (flags & (SEC_HAS_CONTENTS | SEC_RELOC));
+  else if (strip_symbols == STRIP_NONDEBUG && (flags & SEC_ALLOC) != 0)
+    {
+      flags &= ~(SEC_HAS_CONTENTS | SEC_LOAD);
+      if (obfd->xvec->flavour == bfd_target_elf_flavour)
+       elf_section_type (osection) = SHT_NOBITS;
+    }
+
   if (!bfd_set_section_flags (obfd, osection, flags))
     {
       err = _("flags");
@@ -2029,6 +2037,8 @@ copy_section (bfd *ibfd, sec_ptr isection, void *obfdarg)
        }
 
       bfd_set_reloc (obfd, osection, relcount == 0 ? NULL : relpp, relcount);
+      if (relcount == 0)
+       free (relpp);
     }
 
   isection->_cooked_size = isection->_raw_size;
@@ -2045,9 +2055,9 @@ copy_section (bfd *ibfd, sec_ptr isection, void *obfdarg)
       if (copy_byte >= 0)
        {
          /* Keep only every `copy_byte'th byte in MEMHUNK.  */
-         char *from = memhunk + copy_byte;
+         char *from = (char *) memhunk + copy_byte;
          char *to = memhunk;
-         char *end = memhunk + size;
+         char *end = (char *) memhunk + size;
 
          for (; from < end; from += interleave)
            *to++ = *from;
This page took 0.023813 seconds and 4 git commands to generate.