aboutsummaryrefslogtreecommitdiff
path: root/ld
diff options
context:
space:
mode:
authorNick Clifton <nickc@redhat.com>2015-10-29 10:45:10 +0000
committerNick Clifton <nickc@redhat.com>2015-10-29 10:45:10 +0000
commitf82aa1657b7254ab634bfcce7354770478c31686 (patch)
tree69a7404e42eebab9bcfac5346d12bfffba4a0e93 /ld
parent936384714fa8b0f7ca8cc3b5637394461bc998c8 (diff)
downloadfsf-binutils-gdb-f82aa1657b7254ab634bfcce7354770478c31686.zip
fsf-binutils-gdb-f82aa1657b7254ab634bfcce7354770478c31686.tar.gz
fsf-binutils-gdb-f82aa1657b7254ab634bfcce7354770478c31686.tar.bz2
Fix reporting of command line options that need an argument, but which occur as the last option on the command line.
PR ld/19146 * lexsup.c (parse_args): Correct error message for an option that is missing its argument if that option is the last one on the command line.
Diffstat (limited to 'ld')
-rw-r--r--ld/ChangeLog7
-rw-r--r--ld/lexsup.c29
2 files changed, 32 insertions, 4 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog
index 69363e1..da2227c 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,3 +1,10 @@
+2015-10-29 Nick Clifton <nickc@redhat.com>
+
+ PR ld/19146
+ * lexsup.c (parse_args): Correct error message for an option that
+ is missing its argument if that option is the last one on the
+ command line.
+
2015-10-29 Alan Modra <amodra@gmail.com>
PR ld/19162
diff --git a/ld/lexsup.c b/ld/lexsup.c
index 1dcbf4c..4cad209 100644
--- a/ld/lexsup.c
+++ b/ld/lexsup.c
@@ -65,9 +65,9 @@ static void help (void);
enum control_enum {
/* Use one dash before long option name. */
- ONE_DASH,
+ ONE_DASH = 1,
/* Use two dashes before long option name. */
- TWO_DASHES,
+ TWO_DASHES = 2,
/* Only accept two dashes before the long option name.
This is an overloading of the use of this enum, since originally it
was only intended to tell the --help display function how to display
@@ -679,7 +679,28 @@ parse_args (unsigned argc, char **argv)
switch (optc)
{
case '?':
- einfo (_("%P: unrecognized option '%s'\n"), argv[last_optind]);
+ {
+ /* If the last word on the command line is an option that
+ requires an argument, getopt will refuse to recognise it.
+ Try to catch such options here and issue a more helpful
+ error message than just "unrecognized option". */
+ int opt;
+
+ for (opt = ARRAY_SIZE (ld_options); opt--;)
+ if (ld_options[opt].opt.has_arg == required_argument
+ /* FIXME: There are a few short options that do not
+ have long equivalents, but which require arguments.
+ We should handle them too. */
+ && ld_options[opt].opt.name != NULL
+ && strcmp (argv[last_optind] + ld_options[opt].control, ld_options[opt].opt.name) == 0)
+ {
+ einfo (_("%P: %s: missing argument\n"), argv[last_optind]);
+ break;
+ }
+
+ if (opt == -1)
+ einfo (_("%P: unrecognized option '%s'\n"), argv[last_optind]);
+ }
/* Fall through. */
default:
@@ -997,7 +1018,7 @@ parse_args (unsigned argc, char **argv)
break;
case OPTION_PLUGIN_OPT:
if (plugin_opt_plugin_arg (optarg))
- einfo(_("%P%F: bad -plugin-opt option\n"));
+ einfo (_("%P%F: bad -plugin-opt option\n"));
break;
#endif /* ENABLE_PLUGINS */
case 'q':