* lexsup.c (parse_args): Use symbolic numbers for long options.

Fix misunderstanding in -Y and -call_shared et al.
This commit is contained in:
David MacKenzie
1994-02-25 04:08:55 +00:00
parent b3cefbc393
commit d5b79a89b9
2 changed files with 77 additions and 51 deletions

View File

@ -10,6 +10,9 @@ Thu Feb 24 16:47:33 1994 Ian Lance Taylor (ian@cygnus.com)
Thu Feb 24 12:27:07 1994 David J. Mackenzie (djm@rtl.cygnus.com)
* lexsup.c (parse_args): Use symbolic numbers for long options.
Fix misunderstanding in -Y and -call_shared et al.
Use getopt instead of lex and yacc to parse the command line.
* ld.texinfo (Options): Document changes to option syntax.

View File

@ -50,38 +50,57 @@ parse_args (argc, argv)
the ordering of the two. We describe each non-option ARGV-element
as if it were the argument of an option with character code 1. */
const char *shortopts = "-A:B::b:cde:F::G:giL:l:Mm:NnO:o:R:rSsT:tu:VvXxy:";
const char *shortopts = "-A:B::b:cde:F::G:giL:l:Mm:NnO:o:R:rSsT:tu:VvXxY:y:";
static struct option longopts[] =
{
{"call_shared", no_argument, NULL, 158},
/* 150 isn't special; it's just an arbitrary non-ASCII char value. */
static struct option longopts[] = {
#define OPTION_CALL_SHARED 150
{"call_shared", no_argument, NULL, OPTION_CALL_SHARED},
{"dc", no_argument, NULL, 'd'},
{"defsym", required_argument, NULL, 160},
{"dn", no_argument, NULL, 158},
#define OPTION_DEFSYM 151
{"defsym", required_argument, NULL, OPTION_DEFSYM},
{"dn", no_argument, NULL, OPTION_CALL_SHARED},
{"dp", no_argument, NULL, 'd'},
{"EB", no_argument, NULL, 150},
{"EL", no_argument, NULL, 151},
#define OPTION_EB 152
{"EB", no_argument, NULL, OPTION_EB},
#define OPTION_EL 153
{"EL", no_argument, NULL, OPTION_EL},
{"format", required_argument, NULL, 'b'},
{"help", no_argument, NULL, 164},
{"Map", required_argument, NULL, 152},
{"no-keep-memory", no_argument, NULL, 168},
{"noinhibit-exec", no_argument, NULL, 169},
{"noinhibit_exec", no_argument, NULL, 169},
{"non_shared", no_argument, NULL, 158},
{"oformat", required_argument, NULL, 172},
{"Qy", no_argument, NULL, 158},
{"relax", no_argument, NULL, 173},
{"retain-symbols-file", no_argument, NULL, 174},
{"sort-common", no_argument, NULL, 175},
{"sort_common", no_argument, NULL, 175},
{"stats", no_argument, NULL, 176},
{"Tbss", required_argument, NULL, 154},
{"Tdata", required_argument, NULL, 155},
{"Ttext", required_argument, NULL, 156},
{"Ur", no_argument, NULL, 157},
{"version", no_argument, NULL, 178},
{"warn-common", no_argument, NULL, 177},
{"YP,", required_argument, NULL, 158},
#define OPTION_HELP 154
{"help", no_argument, NULL, OPTION_HELP},
#define OPTION_MAP 155
{"Map", required_argument, NULL, OPTION_MAP},
#define OPTION_NO_KEEP_MEMORY 156
{"no-keep-memory", no_argument, NULL, OPTION_NO_KEEP_MEMORY},
#define OPTION_NOINHIBIT_EXEC 157
{"noinhibit-exec", no_argument, NULL, OPTION_NOINHIBIT_EXEC},
{"noinhibit_exec", no_argument, NULL, OPTION_NOINHIBIT_EXEC},
{"non_shared", no_argument, NULL, OPTION_CALL_SHARED},
#define OPTION_OFORMAT 158
{"oformat", required_argument, NULL, OPTION_OFORMAT},
{"Qy", no_argument, NULL, OPTION_CALL_SHARED},
#define OPTION_RELAX 159
{"relax", no_argument, NULL, OPTION_RELAX},
#define OPTION_RETAIN_SYMBOLS_FILE 160
{"retain-symbols-file", no_argument, NULL, OPTION_RETAIN_SYMBOLS_FILE},
#define OPTION_SORT_COMMON 161
{"sort-common", no_argument, NULL, OPTION_SORT_COMMON},
{"sort_common", no_argument, NULL, OPTION_SORT_COMMON},
#define OPTION_STATS 162
{"stats", no_argument, NULL, OPTION_STATS},
#define OPTION_TBSS 163
{"Tbss", required_argument, NULL, OPTION_TBSS},
#define OPTION_TDATA 164
{"Tdata", required_argument, NULL, OPTION_TDATA},
#define OPTION_TTEXT 165
{"Ttext", required_argument, NULL, OPTION_TTEXT},
#define OPTION_UR 166
{"Ur", no_argument, NULL, OPTION_UR},
#define OPTION_VERSION 167
{"version", no_argument, NULL, OPTION_VERSION},
#define OPTION_WARN_COMMON 168
{"warn-common", no_argument, NULL, OPTION_WARN_COMMON},
{NULL, no_argument, NULL, 0}
};
@ -89,8 +108,9 @@ parse_args (argc, argv)
{
/* getopt_long_only is like getopt_long, but '-' as well as '--' can
indicate a long option. */
int optc = getopt_long_only (argc, argv, shortopts, longopts,
(int *) NULL);
int longind;
int optc = getopt_long_only (argc, argv, shortopts, longopts, &longind);
if (optc == -1)
break;
@ -117,23 +137,23 @@ parse_args (argc, argv)
parser_input = input_mri_script;
yyparse ();
break;
case 158: /* call_shared, dn, non_shared, Qy, YP */
set_default_dirlist (optarg);
case OPTION_CALL_SHARED:
set_default_dirlist ((char *) longopts[longind].name);
break;
case 'd':
command_line.force_common_definition = true;
break;
case 160: /* defsym */
case OPTION_DEFSYM:
lex_redirect (optarg);
parser_input = input_defsym;
yyparse ();
break;
case 150: /* EB */
case OPTION_EB:
/* FIXME: This is currently ignored. It means
``produce a big-endian object file''. It could
be used to select an output format. */
break;
case 151: /* EL */
case OPTION_EL:
/* FIXME: This is currently ignored. It means
``produce a little-endian object file''. It could
be used to select an output format. */
@ -155,7 +175,7 @@ parse_args (argc, argv)
case 'g':
/* Ignore. */
break;
case 164: /* help */
case OPTION_HELP:
help ();
xexit (0);
break;
@ -172,7 +192,7 @@ parse_args (argc, argv)
case 'm':
/* Ignore. Was handled in a pre-parse. */
break;
case 152: /* Map */
case OPTION_MAP:
write_map = true;
config.map_filename = optarg;
break;
@ -183,10 +203,10 @@ parse_args (argc, argv)
case 'n':
config.magic_demand_paged = false;
break;
case 168: /* no-keep-memory */
case OPTION_NO_KEEP_MEMORY:
link_info.keep_memory = false;
break;
case 169: /* noinhibit-exec */
case OPTION_NOINHIBIT_EXEC:
force_make_executable = true;
break;
case 'O':
@ -200,7 +220,7 @@ parse_args (argc, argv)
case 'o':
lang_add_output (optarg, 0);
break;
case 172: /* oformat */
case OPTION_OFORMAT:
lang_add_output_format (optarg, 0);
break;
case 'r':
@ -214,10 +234,10 @@ parse_args (argc, argv)
lang_input_file_is_symbols_only_enum,
(char *) NULL);
break;
case 173: /* relax */
case OPTION_RELAX:
command_line.relax = true;
break;
case 174: /* retain-symbols-file */
case OPTION_RETAIN_SYMBOLS_FILE:
add_keepsyms_file (optarg);
break;
case 'S':
@ -226,10 +246,10 @@ parse_args (argc, argv)
case 's':
link_info.strip = strip_all;
break;
case 175: /* sort-common */
case OPTION_SORT_COMMON:
config.sort_common = true;
break;
case 176: /* stats */
case OPTION_STATS:
config.stats = true;
break;
case 't':
@ -240,16 +260,16 @@ parse_args (argc, argv)
parser_input = input_script;
yyparse ();
break;
case 154: /* Tbss */
case OPTION_TBSS:
set_section_start (".bss", optarg);
break;
case 155: /* Tdata */
case OPTION_TDATA:
set_section_start (".data", optarg);
break;
case 156: /* Ttext */
case OPTION_TTEXT:
set_section_start (".text", optarg);
break;
case 157: /* Ur */
case OPTION_UR:
link_info.relocateable = true;
config.build_constructors = true;
config.magic_demand_paged = false;
@ -267,11 +287,11 @@ parse_args (argc, argv)
ldversion (0);
version_printed = true;
break;
case 178: /* version */
case OPTION_VERSION:
ldversion (0);
version_printed = true;
break;
case 177: /* warn-common */
case OPTION_WARN_COMMON:
config.warn_common = true;
break;
case 'X':
@ -280,6 +300,9 @@ parse_args (argc, argv)
case 'x':
link_info.discard = discard_all;
break;
case 'Y':
set_default_dirlist (optarg);
break;
case 'y':
add_ysym (optarg);
break;
@ -317,6 +340,6 @@ set_section_start (sect, valstr)
char *end;
unsigned long val = strtoul (valstr, &end, 16);
if (*end)
einfo ("%P%F: invalid hex number `%s'", valstr);
einfo ("%P%F: invalid hex number `%s'\n", valstr);
lang_section_start (sect, exp_intop (val));
}