This is the mail archive of the binutils@sources.redhat.com mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] Add --only-keep-debug-and-symbols option to objcopy


On Sat, Jan 10, 2004 at 11:52:00AM -0500, Daniel Jacobowitz wrote:
> I suggested changing --only-keep-debug to keep the symtab, instead of
> adding the new option.  I can't tell if you're objecting to that, or
> objecting to something like eu-strip -f which combines
> --add-gnu-debuglink and --only-keep-debug-and-symbols.

Here is a patch which does that.

2004-01-11  Jakub Jelinek  <jakub@redhat.com>

	* objcopy.c: Include elf-bfd.h.
	(is_strip_section): Don't strip debugging sections if
	STRIP_NONDEBUG.
	(setup_section): If STRIP_NONDEBUG make SEC_ALLOC sections
	~(SEC_LOAD | SEC_HAS_CONTENTS) and on ELF targets also SHT_NOBITS.

	* objcopy.c (copy_section): Free relpp if relcount == 0.

--- binutils/objcopy.c.jj	2004-01-09 12:20:46.000000000 +0100
+++ binutils/objcopy.c	2004-01-11 20:25:08.000000000 +0100
@@ -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_UN
 	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 isecti
 
   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 isectio
 	}
 
       bfd_set_reloc (obfd, osection, relcount == 0 ? NULL : relpp, relcount);
+      if (relcount == 0)
+	free (relpp);
     }
 
   isection->_cooked_size = isection->_raw_size;


	Jakub


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]