This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
[PATCH 3/4] pe/coff: Keep .build-id with --only-keep-debug
- From: Jon TURNEY <jon dot turney at dronecode dot org dot uk>
- To: binutils at sourceware dot org
- Cc: Jon TURNEY <jon dot turney at dronecode dot org dot uk>
- Date: Thu, 10 Apr 2014 18:45:07 +0100
- Subject: [PATCH 3/4] pe/coff: Keep .build-id with --only-keep-debug
- Authentication-results: sourceware.org; auth=none
- References: <1397151908-4336-1-git-send-email-jon dot turney at dronecode dot org dot uk>
Keep .build-id with --only-keep-debug (STRIP_NONDEBUG)
binutils/ChangeLog:
2014-04-10 Jon TURNEY <jon.turney@dronecode.org.uk>
* objcopy.c (is_nondebug_keep_contents_section): New function.
(setup_section): Use it.
Signed-off-by: Jon TURNEY <jon.turney@dronecode.org.uk>
---
binutils/objcopy.c | 22 ++++++++++++++++++++--
1 file changed, 20 insertions(+), 2 deletions(-)
diff --git a/binutils/objcopy.c b/binutils/objcopy.c
index 873908c..cf7da1b 100644
--- a/binutils/objcopy.c
+++ b/binutils/objcopy.c
@@ -1141,6 +1141,25 @@ is_strip_section (bfd *abfd ATTRIBUTE_UNUSED, asection *sec)
return FALSE;
}
+static bfd_boolean
+is_nondebug_keep_contents_section (bfd *ibfd, asection *isection)
+{
+ /* Always keep ELF note sections. */
+ if (ibfd->xvec->flavour == bfd_target_elf_flavour)
+ return (elf_section_type (isection) == SHT_NOTE);
+
+ /* Always keep the .build-id section for PE/COFF.
+
+ Strictly, this should be written "always keep the section storing the debug
+ directory", but that may be the .text section for objects produced by some
+ tools, which it is not sensible to keep.
+ */
+ if (ibfd->xvec->flavour == bfd_target_coff_flavour)
+ return (strcmp (bfd_get_section_name (ibfd, isection), ".build-id") == 0);
+
+ return FALSE;
+}
+
/* Return true if SYM is a hidden symbol. */
static bfd_boolean
@@ -2695,8 +2714,7 @@ setup_section (bfd *ibfd, sec_ptr isection, void *obfdarg)
flags = p->flags | (flags & (SEC_HAS_CONTENTS | SEC_RELOC));
else if (strip_symbols == STRIP_NONDEBUG
&& (flags & (SEC_ALLOC | SEC_GROUP)) != 0
- && !(ibfd->xvec->flavour == bfd_target_elf_flavour
- && elf_section_type (isection) == SHT_NOTE))
+ && !is_nondebug_keep_contents_section(ibfd, isection))
{
flags &= ~(SEC_HAS_CONTENTS | SEC_LOAD | SEC_GROUP);
if (obfd->xvec->flavour == bfd_target_elf_flavour)
--
1.8.3.4