Update the BFD linker so that it deprecates grouped short options.
authorNick Clifton <nickc@redhat.com>
Mon, 5 Oct 2020 12:53:59 +0000 (13:53 +0100)
committerNick Clifton <nickc@redhat.com>
Mon, 5 Oct 2020 12:53:59 +0000 (13:53 +0100)
* lexsup.c (parse_args): Generate an error or warning message when
multiple short options are used together.

ld/ChangeLog
ld/lexsup.c

index a6beac08449a91583d4ddecf18f9a3474c2bcd33..0d5953a11b76d9e2dd99d0379bbefcbeae41e108 100644 (file)
@@ -1,3 +1,8 @@
+2020-10-05  Nick Clifton  <nickc@redhat.com>
+
+       * lexsup.c (parse_args): Generate an error or warning message when
+       multiple short options are used together.
+
 2020-10-01  H.J. Lu  <hongjiu.lu@intel.com>
 
        PR 26681
index b8f066745f374cb03a3d74c32eef340df0da9a0b..68943994846950839e213e16565020cc8f908a89 100644 (file)
@@ -735,6 +735,20 @@ parse_args (unsigned argc, char **argv)
          optind = last_optind;
          optc = getopt_long (argc, argv, "-", really_longopts, &longind);
        }
+      /* Attempt to detect grouped short options,  eg: "-non-start".
+        Accepting such options is error prone as it is not clear if the user
+        intended "-n -o n-start" or "--non-start".  */
+      else if (longind == 0  /* This is a short option.  */
+              && optc > 32  /* It is a valid option.  */
+        /* The character is not the second character of argv[last_optind].  */
+              && optc != argv[last_optind][1])
+       {
+         if (optarg)
+           einfo (_("%F%P: Error: unable to disambiguate: %s (did you mean -%s ?)\n"),
+                  argv[last_optind], argv[last_optind]);
+         else
+           einfo (_("%P: Warning: grouped short command line options are deprecated: %s\n"), argv[last_optind]);
+       }
 
       if (ldemul_handle_option (optc))
        continue;