/* as.c - GAS main program.
- Copyright (C) 1987, 90, 91, 92, 93, 94, 95, 96, 97, 98, 1999
+ Copyright (C) 1987, 1990, 91, 92, 93, 94, 95, 96, 97, 98, 99, 2000
Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
static struct itbl_file_list *itbl_files;
\f
-void
-print_version_id ()
-{
- static int printed;
- if (printed)
- return;
- printed = 1;
-
-#ifdef BFD_ASSEMBLER
- fprintf (stderr, _("GNU assembler version %s (%s) using BFD version %s"),
- VERSION, TARGET_ALIAS, BFD_VERSION);
-#else
- fprintf (stderr, _("GNU assembler version %s (%s)"), VERSION, TARGET_ALIAS);
-#endif
- fprintf (stderr, "\n");
-}
-
-static void
-show_usage (stream)
- FILE *stream;
-{
- fprintf (stream, _("Usage: %s [option...] [asmfile...]\n"), myname);
-
- fprintf (stream, _("\
-Options:\n\
- -a[sub-option...] turn on listings\n\
- Sub-options [default hls]:\n\
- c omit false conditionals\n\
- d omit debugging directives\n\
- h include high-level source\n\
- l include assembly\n\
- m include macro expansions\n\
- n omit forms processing\n\
- s include symbols\n\
- L include line debug statistics (if applicable)\n\
- =file set listing file name (must be last sub-option)\n"));
-
- fprintf (stream, _("\
- -D produce assembler debugging messages\n\
- --defsym SYM=VAL define symbol SYM to given value\n\
- -f skip whitespace and comment preprocessing\n\
- --gstabs generate stabs debugging information\n\
- --help show this message and exit\n\
- -I DIR add DIR to search list for .include directives\n\
- -J don't warn about signed overflow\n\
- -K warn when differences altered for long displacements\n\
- -L,--keep-locals keep local symbols (e.g. starting with `L')\n"));
-
- fprintf (stream, _("\
- -M,--mri assemble in MRI compatibility mode\n\
- --MD FILE write dependency information in FILE (default none)\n\
- -nocpp ignored\n\
- -o OBJFILE name the object-file output OBJFILE (default a.out)\n\
- -R fold data section into text section\n\
- --statistics print various measured statistics from execution\n\
- --strip-local-absolute strip local absolute symbols\n\
- --traditional-format Use same format as native assembler when possible\n\
- --version print assembler version number and exit\n\
- -W suppress warnings\n\
- --itbl INSTTBL extend instruction set to include instructions\n\
- matching the specifications defined in file INSTTBL\n\
- -w ignored\n\
- -X ignored\n\
- -Z generate object file even after errors\n"));
-
- fprintf (stream, _("\
- --listing-lhs-width set the width in words of the output data column of\n\
- the listing\n\
- --listing-lhs-width2 set the width in words of the continuation lines\n\
- of the output data column; ignored if smaller than\n\
- the width of the first line\n\
- --listing-rhs-width set the max width in characters of the lines from\n\
- the source file\n\
- --listing-cont-lines set the maximum number of continuation lines used\n\
- for the output data column of the listing\n"));
-
- md_show_usage (stream);
-
- fprintf (stream, _("\nReport bugs to bug-gnu-utils@gnu.org\n"));
-}
-
#ifdef USE_EMULATIONS
#define EMULATION_ENVIRON "AS_EMULATION"
extern struct emulation mipsbelf, mipslelf, mipself;
extern struct emulation mipsbecoff, mipslecoff, mipsecoff;
-extern struct emulation i386coff, i386elf;
+extern struct emulation i386coff, i386elf, i386aout;
static struct emulation *const emulations[] = { EMULATIONS };
static const int n_emulations = sizeof (emulations) / sizeof (emulations[0]);
}
#endif
+void
+print_version_id ()
+{
+ static int printed;
+ if (printed)
+ return;
+ printed = 1;
+
+#ifdef BFD_ASSEMBLER
+ fprintf (stderr, _("GNU assembler version %s (%s) using BFD version %s"),
+ VERSION, TARGET_ALIAS, BFD_VERSION);
+#else
+ fprintf (stderr, _("GNU assembler version %s (%s)"), VERSION, TARGET_ALIAS);
+#endif
+ fprintf (stderr, "\n");
+}
+
+static void
+show_usage (stream)
+ FILE *stream;
+{
+ fprintf (stream, _("Usage: %s [option...] [asmfile...]\n"), myname);
+
+ fprintf (stream, _("\
+Options:\n\
+ -a[sub-option...] turn on listings\n\
+ Sub-options [default hls]:\n\
+ c omit false conditionals\n\
+ d omit debugging directives\n\
+ h include high-level source\n\
+ l include assembly\n\
+ m include macro expansions\n\
+ n omit forms processing\n\
+ s include symbols\n\
+ L include line debug statistics (if applicable)\n\
+ =FILE list to FILE (must be last sub-option)\n"));
+
+ fprintf (stream, _("\
+ -D produce assembler debugging messages\n"));
+ fprintf (stream, _("\
+ --defsym SYM=VAL define symbol SYM to given value\n"));
+#ifdef USE_EMULATIONS
+ {
+ int i;
+ char *def_em;
+
+ fprintf (stream, "\
+ --em=[");
+ for (i = 0; i < n_emulations-1; i++)
+ fprintf (stream, "%s | ", emulations[i]->name);
+ fprintf (stream, "%s]\n", emulations[i]->name);
+
+ def_em = getenv (EMULATION_ENVIRON);
+ if (!def_em)
+ def_em = DEFAULT_EMULATION;
+ fprintf (stream, _("\
+ emulate output (default %s)\n"), def_em);
+ }
+#endif
+ fprintf (stream, _("\
+ -f skip whitespace and comment preprocessing\n"));
+ fprintf (stream, _("\
+ --gstabs generate stabs debugging information\n"));
+ fprintf (stream, _("\
+ --gdwarf2 generate DWARF2 debugging information\n"));
+ fprintf (stream, _("\
+ --help show this message and exit\n"));
+ fprintf (stream, _("\
+ -I DIR add DIR to search list for .include directives\n"));
+ fprintf (stream, _("\
+ -J don't warn about signed overflow\n"));
+ fprintf (stream, _("\
+ -K warn when differences altered for long displacements\n"));
+ fprintf (stream, _("\
+ -L,--keep-locals keep local symbols (e.g. starting with `L')\n"));
+ fprintf (stream, _("\
+ -M,--mri assemble in MRI compatibility mode\n"));
+ fprintf (stream, _("\
+ --MD FILE write dependency information in FILE (default none)\n"));
+ fprintf (stream, _("\
+ -nocpp ignored\n"));
+ fprintf (stream, _("\
+ -o OBJFILE name the object-file output OBJFILE (default a.out)\n"));
+ fprintf (stream, _("\
+ -R fold data section into text section\n"));
+ fprintf (stream, _("\
+ --statistics print various measured statistics from execution\n"));
+ fprintf (stream, _("\
+ --strip-local-absolute strip local absolute symbols\n"));
+ fprintf (stream, _("\
+ --traditional-format Use same format as native assembler when possible\n"));
+ fprintf (stream, _("\
+ --version print assembler version number and exit\n"));
+ fprintf (stream, _("\
+ -W --no-warn suppress warnings\n"));
+ fprintf (stream, _("\
+ --warn don't suppress warnings\n"));
+ fprintf (stream, _("\
+ --fatal-warnings treat warnings as errors\n"));
+ fprintf (stream, _("\
+ --itbl INSTTBL extend instruction set to include instructions\n\
+ matching the specifications defined in file INSTTBL\n"));
+ fprintf (stream, _("\
+ -w ignored\n"));
+ fprintf (stream, _("\
+ -X ignored\n"));
+ fprintf (stream, _("\
+ -Z generate object file even after errors\n"));
+ fprintf (stream, _("\
+ --listing-lhs-width set the width in words of the output data column of\n\
+ the listing\n"));
+ fprintf (stream, _("\
+ --listing-lhs-width2 set the width in words of the continuation lines\n\
+ of the output data column; ignored if smaller than\n\
+ the width of the first line\n"));
+ fprintf (stream, _("\
+ --listing-rhs-width set the max width in characters of the lines from\n\
+ the source file\n"));
+ fprintf (stream, _("\
+ --listing-cont-lines set the maximum number of continuation lines used\n\
+ for the output data column of the listing\n"));
+
+ md_show_usage (stream);
+
+ fputc ('\n', stream);
+ fprintf (stream, _("Report bugs to %s\n"), REPORT_BUGS_TO);
+}
+
/*
* Since it is easy to do here we interpret the special arg "-"
* to mean "use stdin" and we set that argv[] pointing to "".
#define OPTION_TRADITIONAL_FORMAT (OPTION_STD_BASE + 16)
{"traditional-format", no_argument, NULL, OPTION_TRADITIONAL_FORMAT},
#define OPTION_GDWARF2 (OPTION_STD_BASE + 17)
- {"gdwarf2", no_argument, NULL, OPTION_GDWARF2}
+ {"gdwarf2", no_argument, NULL, OPTION_GDWARF2},
+ {"no-warn", no_argument, NULL, 'W'},
+#define OPTION_WARN (OPTION_STD_BASE + 18)
+ {"warn", no_argument, NULL, OPTION_WARN},
+#define OPTION_WARN_FATAL (OPTION_STD_BASE + 19)
+ {"fatal-warnings", no_argument, NULL, OPTION_WARN_FATAL}
};
/* Construct the option lists from the standard list and the
case OPTION_VERSION:
/* This output is intended to follow the GNU standards document. */
printf (_("GNU assembler %s\n"), VERSION);
- printf (_("Copyright 1997 Free Software Foundation, Inc.\n"));
+ printf (_("Copyright 2000 Free Software Foundation, Inc.\n"));
printf (_("\
This program is free software; you may redistribute it under the terms of\n\
the GNU General Public License. This program has absolutely no warranty.\n"));
case OPTION_DEFSYM:
{
char *s;
- long i;
+ valueT i;
struct defsym_list *n;
for (s = optarg; *s != '\0' && *s != '='; s++)
if (*s == '\0')
as_fatal (_("bad defsym; format is --defsym name=value"));
*s++ = '\0';
+#ifdef BFD_ASSEMBLER
+ i = bfd_scan_vma (s, (const char **) NULL, 0);
+#else
i = strtol (s, (char **) NULL, 0);
+#endif
n = (struct defsym_list *) xmalloc (sizeof *n);
n->next = defsyms;
n->name = optarg;
flag_no_warnings = 1;
break;
+ case OPTION_WARN:
+ flag_no_warnings = 0;
+ flag_fatal_warnings = 0;
+ break;
+
+ case OPTION_WARN_FATAL:
+ flag_no_warnings = 0;
+ flag_fatal_warnings = 1;
+ break;
+
case 'Z':
flag_always_generate_output = 1;
break;
case 'a':
if (optarg)
{
+ if (md_parse_option (optc, optarg) != 0)
+ break;
+
while (*optarg)
{
switch (*optarg)
output_file_close (out_file_name);
#endif
+ if (flag_fatal_warnings && had_warnings() > 0 && had_errors () == 0)
+ as_bad (_("%d warnings, treating warnings as errors"), had_warnings());
+
if (had_errors () > 0 && ! flag_always_generate_output)
keep_it = 0;
bfd_set_section_flags (stdoutput, text_section,
applicable & (SEC_ALLOC | SEC_LOAD | SEC_RELOC
| SEC_CODE | SEC_READONLY));
- /* @@ FIXME -- SEC_CODE seems to mean code only, rather than code possibly.*/
bfd_set_section_flags (stdoutput, data_section,
- applicable & (SEC_ALLOC | SEC_LOAD | SEC_RELOC));
+ applicable & (SEC_ALLOC | SEC_LOAD | SEC_RELOC
+ | SEC_DATA));
bfd_set_section_flags (stdoutput, bss_section, applicable & SEC_ALLOC);
seg_info (bss_section)->bss = 1;
subseg_new (BFD_ABS_SECTION_NAME, 0);