Stop strip from merging notes when stripping debug or dwo information.
authorNick Clifton <nickc@redhat.com>
Wed, 24 Apr 2019 16:44:31 +0000 (17:44 +0100)
committerNick Clifton <nickc@redhat.com>
Wed, 24 Apr 2019 16:44:31 +0000 (17:44 +0100)
* 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
binutils/doc/binutils.texi
binutils/objcopy.c

index 9aa6bf9..8fbc761 100644 (file)
@@ -1,3 +1,9 @@
+2019-04-24  Nick Clifton  <nickc@redhat.com>
+
+       * 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  <nickc@redhat.com>
 
        * README-how-to-make-a-release: Add note to update the symbolic
index 077cf06..502f68d 100644 (file)
@@ -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}
index 330b93c..673e1f6 100644 (file)
@@ -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 ();