From 1b8dd6432644c256ab294d205a8e00f6c6dc5073 Mon Sep 17 00:00:00 2001 From: Nick Clifton Date: Wed, 24 Apr 2019 17:44:31 +0100 Subject: [PATCH] Stop strip from merging notes when stripping debug or dwo information. * objcopy.c (strip_main): Do not enable note merging by default if just stripping debug or dwo information. * doc/binutils.texi (strip): Update documentation. --- binutils/ChangeLog | 6 ++++++ binutils/doc/binutils.texi | 2 +- binutils/objcopy.c | 15 +++++++++++++-- 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/binutils/ChangeLog b/binutils/ChangeLog index 9aa6bf9fca..8fbc761b6a 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,3 +1,9 @@ +2019-04-24 Nick Clifton + + * objcopy.c (strip_main): Do not enable note merging by default if + just stripping debug or dwo information. + * doc/binutils.texi (strip): Update documentation. + 2019-04-23 Nick Clifton * README-how-to-make-a-release: Add note to update the symbolic diff --git a/binutils/doc/binutils.texi b/binutils/doc/binutils.texi index 077cf0650d..502f68d5dd 100644 --- a/binutils/doc/binutils.texi +++ b/binutils/doc/binutils.texi @@ -3313,7 +3313,7 @@ normally be stripped. This option may be given more than once. @itemx --no-merge-notes For ELF files, attempt (or do not attempt) to reduce the size of any SHT_NOTE type sections by removing duplicate notes. The default is to -attempt this reduction. +attempt this reduction unless stripping debug or DWO information. @item -N @var{symbolname} @itemx --strip-symbol=@var{symbolname} diff --git a/binutils/objcopy.c b/binutils/objcopy.c index 330b93c1ad..673e1f640a 100644 --- a/binutils/objcopy.c +++ b/binutils/objcopy.c @@ -4410,8 +4410,7 @@ strip_main (int argc, char *argv[]) int c; int i; char *output_file = NULL; - - merge_notes = TRUE; + bfd_boolean merge_notes_set = FALSE; while ((c = getopt_long (argc, argv, "I:O:F:K:MN:R:o:sSpdgxXHhVvwDU", strip_options, (int *) 0)) != EOF) @@ -4452,9 +4451,11 @@ strip_main (int argc, char *argv[]) break; case 'M': merge_notes = TRUE; + merge_notes_set = TRUE; break; case OPTION_NO_MERGE_NOTES: merge_notes = FALSE; + merge_notes_set = TRUE; break; case 'N': add_specific_symbol (optarg, strip_specific_htab); @@ -4506,6 +4507,16 @@ strip_main (int argc, char *argv[]) } } + /* If the user has not expressly chosen to merge/not-merge ELF notes + then enable the merging unless we are stripping debug or dwo info. */ + if (! merge_notes_set + && (strip_symbols == STRIP_UNDEF + || strip_symbols == STRIP_ALL + || strip_symbols == STRIP_UNNEEDED + || strip_symbols == STRIP_NONDEBUG + || strip_symbols == STRIP_NONDWO)) + merge_notes = TRUE; + if (formats_info) { display_info (); -- 2.34.1