From f0312d395b830bea0f17a279ad1a6d8009c46db0 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Tue, 13 Jan 2004 15:41:00 +0000 Subject: [PATCH] * 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/ChangeLog | 10 ++++++++++ binutils/objcopy.c | 12 +++++++++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/binutils/ChangeLog b/binutils/ChangeLog index 708682fd591..bd4883ad7e3 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,3 +1,13 @@ +2004-01-12 Jakub Jelinek + + * 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. + 2004-01-12 Ian Lance Taylor * stabs.c (parse_stab_argtypes): Handle g++ ABI version 3 names. diff --git a/binutils/objcopy.c b/binutils/objcopy.c index 1d71d9d9c50..d31eb8f153a 100644 --- a/binutils/objcopy.c +++ b/binutils/objcopy.c @@ -28,6 +28,7 @@ #include "budbg.h" #include "filenames.h" #include "fnmatch.h" +#include "elf-bfd.h" #include /* 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; -- 2.30.2