diff options
author | Nick Clifton <nickc@redhat.com> | 2015-10-29 10:45:10 +0000 |
---|---|---|
committer | Nick Clifton <nickc@redhat.com> | 2015-10-29 10:45:10 +0000 |
commit | f82aa1657b7254ab634bfcce7354770478c31686 (patch) | |
tree | 69a7404e42eebab9bcfac5346d12bfffba4a0e93 /ld | |
parent | 936384714fa8b0f7ca8cc3b5637394461bc998c8 (diff) | |
download | gdb-f82aa1657b7254ab634bfcce7354770478c31686.zip gdb-f82aa1657b7254ab634bfcce7354770478c31686.tar.gz 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/ChangeLog | 7 | ||||
-rw-r--r-- | ld/lexsup.c | 29 |
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': |