#include "output-file.h"
#include "sb.h"
#include "macro.h"
+#ifndef HAVE_ITBL_CPU
+#define itbl_parse(itbl_file) 1
+#define itbl_init()
+#endif
#ifdef HAVE_SBRK
#ifdef NEED_DECLARATION_SBRK
#endif
#endif
+static void show_usage PARAMS ((FILE *));
+static void parse_args PARAMS ((int *, char ***));
+static void dump_statistics PARAMS ((void));
static void perform_an_assembly_pass PARAMS ((int argc, char **argv));
static int macro_expr PARAMS ((const char *, int, sb *, int *));
static char *listing_filename = NULL; /* Name of listing file. */
+/* Type of debugging to generate. */
+
+enum debug_info_type debug_type = DEBUG_NONE;
+
/* Maximum level of macro nesting. */
int max_macro_nest = 100;
return;
printed = 1;
- fprintf (stderr, "GNU assembler version %s (%s)", GAS_VERSION, TARGET_ALIAS);
+ fprintf (stderr, "GNU assembler version %s (%s)", VERSION, TARGET_ALIAS);
#ifdef BFD_ASSEMBLER
fprintf (stderr, ", using BFD version %s", BFD_VERSION);
#endif
fprintf (stderr, "\n");
}
-void
+static void
show_usage (stream)
FILE *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\
-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\
-L keep local symbols (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\
--version print assembler version number and exit\n\
-W suppress warnings\n\
--t,--itbl INSTTBL extend instruction set to include instrictions\n\
+--itbl INSTTBL extend instruction set to include instructions\n\
matching the specifications defined in file INSTTBL\n\
-w ignored\n\
-X ignored\n\
extern struct emulation mipsbelf, mipslelf, mipself;
extern struct emulation mipsbecoff, mipslecoff, mipsecoff;
+extern struct emulation i386coff, i386elf;
static struct emulation *const emulations[] = { EMULATIONS };
static const int n_emulations = sizeof (emulations) / sizeof (emulations[0]);
+static void select_emulation_mode PARAMS ((int, char **));
+
static void
select_emulation_mode (argc, argv)
int argc;
* md_parse_option definitions in config/tc-*.c
*/
-void
+static void
parse_args (pargc, pargv)
int *pargc;
char ***pargv;
'v',
#endif
'w', 'X',
- /* New option for extending instruction set (see also --itbl below) */
- 't',
+ /* New option for extending instruction set (see also --itbl below) */
+ 't', ':',
'\0'
};
struct option *longopts;
{"defsym", required_argument, NULL, OPTION_DEFSYM},
#define OPTION_INSTTBL (OPTION_STD_BASE + 8)
/* New option for extending instruction set (see also -t above).
- * The "-t file" or "--itbl file" option extends the basic set
- * of valid instructions by reading "file", a text file containing
- * a list of instruction formats. The additional opcodes and their
- * formats are added to the built-in set of instructions, and
- * mnemonics for new registers may also be defined. */
- {"itbl", required_argument, NULL, OPTION_INSTTBL}
+ The "-t file" or "--itbl file" option extends the basic set of
+ valid instructions by reading "file", a text file containing a
+ list of instruction formats. The additional opcodes and their
+ formats are added to the built-in set of instructions, and
+ mnemonics for new registers may also be defined. */
+ {"itbl", required_argument, NULL, OPTION_INSTTBL},
+#define OPTION_DEPFILE (OPTION_STD_BASE + 9)
+ {"MD", required_argument, NULL, OPTION_DEPFILE},
+#define OPTION_GSTABS (OPTION_STD_BASE + 10)
+ {"gstabs", no_argument, NULL, OPTION_GSTABS}
};
/* 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", GAS_VERSION);
- printf ("Copyright 1996 Free Software Foundation, Inc.\n");
+ printf ("GNU assembler %s\n", VERSION);
+ printf ("Copyright 1997 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");
formats, opcodes, register names, etc. */
struct itbl_file_list *n;
+ if (optarg == NULL)
+ {
+ as_warn ( "No file name following -t option\n" );
+ break;
+ }
+
n = (struct itbl_file_list *) xmalloc (sizeof *n);
n->next = itbl_files;
n->name = optarg;
information from this table gets appended onto the existing
internal table. */
itbl_files->name = xstrdup (optarg);
- if (itbl_parse(itbl_files->name) != 0)
- {
- fprintf (stderr, "Failed to read instruction table %s\n",
- itbl_files->name);
- exit (EXIT_SUCCESS);
- }
+ if (itbl_parse (itbl_files->name) != 0)
+ {
+ fprintf (stderr, "Failed to read instruction table %s\n",
+ itbl_files->name);
+ exit (EXIT_SUCCESS);
+ }
}
break;
+ case OPTION_DEPFILE:
+ start_dependencies (optarg);
+ break;
+
+ case OPTION_GSTABS:
+ debug_type = DEBUG_STABS;
+ break;
+
case 'J':
flag_signed_overflow_ok = 1;
break;
{
switch (*optarg)
{
+ case 'c':
+ listing |= LISTING_NOCOND;
+ break;
case 'd':
listing |= LISTING_NODEBUG;
break;
*pargv = new_argv;
}
-static void dump_statistics ();
static long start_time;
int
perform_an_assembly_pass (argc, argv); /* Assemble it. */
+ cond_finish_check (-1);
+
#ifdef md_end
md_end ();
#endif
may not place the same interpretation on the value given. */
if (had_errors () > 0)
xexit (EXIT_FAILURE);
+
+ /* Only generate dependency file if assembler was successful. */
+ print_dependencies ();
+
xexit (EXIT_SUCCESS);
}