You should have received a copy of the GNU General Public License
along with GAS; see the file COPYING. If not, write to the Free
Software Foundation, 59 Temple Place - Suite 330, Boston, MA
- 02111-1307, USA. */
+ 02111-1307, USA. */
-/*
- * Main program for AS; a 32-bit assembler of GNU.
+/* Main program for AS; a 32-bit assembler of GNU.
* Understands command arguments.
* Has a few routines that don't fit in other modules because they
* are shared.
*
- *
* bugs
*
* : initialisers
* Since no-one else says they will support them in future: I
* don't support them now.
- *
*/
#include "ansidecl.h"
static void perform_an_assembly_pass PARAMS ((int argc, char **argv));
static int macro_expr PARAMS ((const char *, int, sb *, int *));
-int listing; /* true if a listing is wanted */
+/* True if a listing is wanted. */
+int listing;
-static char *listing_filename = NULL; /* Name of listing file. */
+/* Name of listing file. */
+static char *listing_filename = NULL;
/* Type of debugging to generate. */
enum debug_info_type debug_type = DEBUG_NONE;
/* Maximum level of macro nesting. */
-
int max_macro_nest = 100;
-char *myname; /* argv[0] */
+/* argv[0] */
+char *myname;
#ifdef BFD_ASSEMBLER
segT reg_section, expr_section;
segT text_section, data_section, bss_section;
static struct defsym_list *defsyms;
-/* Keep a record of the itbl files we read in. */
+/* Keep a record of the itbl files we read in. */
struct itbl_file_list
{
if (p)
p++;
else
- p = argv[i+1];
+ p = argv[i + 1];
if (!p || !*p)
as_fatal (_("missing emulation mode name"));
fprintf (stream, "\
--em=[");
- for (i = 0; i < n_emulations-1; i++)
+ 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)
+ if (!def_em)
def_em = DEFAULT_EMULATION;
fprintf (stream, _("\
emulate output (default %s)\n"), def_em);
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 "".
- * After we have munged argv[], the only things left are source file
- * name(s) and ""(s) denoting stdin. These file names are used
- * (perhaps more than once) later.
- *
- * check for new machine-dep cmdline options in
- * md_parse_option definitions in config/tc-*.c
- */
+/* Since it is easy to do here we interpret the special arg "-"
+ to mean "use stdin" and we set that argv[] pointing to "".
+ After we have munged argv[], the only things left are source file
+ name(s) and ""(s) denoting stdin. These file names are used
+ (perhaps more than once) later.
+
+ check for new machine-dep cmdline options in
+ md_parse_option definitions in config/tc-*.c. */
static void
parse_args (pargc, pargv)
'v',
#endif
'w', 'X',
- /* New option for extending instruction set (see also --itbl below) */
+ /* New option for extending instruction set (see also --itbl below) */
't', ':',
'\0'
};
/* Construct the option lists from the standard list and the target
dependent list. Include space for an extra NULL option and
- always NULL terminate. */
+ always NULL terminate. */
shortopts = concat (std_shortopts, md_shortopts, (char *) NULL);
longopts = (struct option *) xmalloc (sizeof (std_longopts)
+ md_longopts_size
print_version_id ();
break;
}
- /*FALLTHRU*/
+ /* Fall through. */
case '?':
exit (EXIT_FAILURE);
case OPTION_INSTTBL:
case 't':
{
- /* optarg is the name of the file containing the instruction
- formats, opcodes, register names, etc. */
+ /* optarg is the name of the file containing the instruction
+ formats, opcodes, register names, etc. */
struct itbl_file_list *n;
if (optarg == NULL)
{
- as_warn ( _("No file name following -t option\n") );
+ 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;
itbl_files = n;
/* Parse the file and add the new instructions to our internal
- table. If multiple instruction tables are specified, the
- information from this table gets appended onto the existing
- internal table. */
+ table. If multiple instruction tables are specified, the
+ 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"),
+ fprintf (stderr, _("Failed to read instruction table %s\n"),
itbl_files->name);
exit (EXIT_SUCCESS);
}
case OPTION_GSTABS:
debug_type = DEBUG_STABS;
break;
-
+
case OPTION_GDWARF2:
debug_type = DEBUG_DWARF2;
break;
break;
case OPTION_LISTING_LHS_WIDTH:
- listing_lhs_width = atoi(optarg);
+ listing_lhs_width = atoi (optarg);
if (listing_lhs_width_second < listing_lhs_width)
listing_lhs_width_second = listing_lhs_width;
break;
case OPTION_LISTING_LHS_WIDTH2:
{
- int tmp = atoi(optarg);
+ int tmp = atoi (optarg);
if (tmp > listing_lhs_width)
listing_lhs_width_second = tmp;
}
break;
case OPTION_LISTING_RHS_WIDTH:
- listing_rhs_width = atoi(optarg);
+ listing_rhs_width = atoi (optarg);
break;
case OPTION_LISTING_CONT_LINES:
- listing_lhs_cont_lines = atoi(optarg);
+ listing_lhs_cont_lines = atoi (optarg);
break;
case 'M':
break;
case 'D':
- /* DEBUG is implemented: it debugs different */
- /* things from other people's assemblers. */
+ /* DEBUG is implemented: it debugs different
+ things from other people's assemblers. */
flag_debug = 1;
break;
break;
case 'I':
- { /* Include file directory */
+ { /* Include file directory. */
char *temp = xstrdup (optarg);
add_include_dir (temp);
break;
break;
case 'X':
- /* -X means treat warnings as errors */
+ /* -X means treat warnings as errors. */
break;
}
}
static long start_time;
-int
+int
main (argc, argv)
int argc;
char **argv;
symbol_begin ();
frag_init ();
subsegs_begin ();
- parse_args (&argc, &argv);
+ parse_args (&argc, &argv);
read_begin ();
input_scrub_begin ();
expr_begin ();
PROGRESS (1);
- perform_an_assembly_pass (argc, argv); /* Assemble it. */
+ /* Assemble it. */
+ perform_an_assembly_pass (argc, argv);
cond_finish_check (-1);
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 (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;
#endif
}
\f
+/* Here to attempt 1 pass over each input file.
+ We scan argv[*] looking for filenames or exactly "" which is
+ shorthand for stdin. Any argv that is NULL is not a file-name.
+ We set need_pass_2 TRUE if, after this, we still have unresolved
+ expressions of the form (unknown value)+-(unknown value).
-/* perform_an_assembly_pass()
- *
- * Here to attempt 1 pass over each input file.
- * We scan argv[*] looking for filenames or exactly "" which is
- * shorthand for stdin. Any argv that is NULL is not a file-name.
- * We set need_pass_2 TRUE if, after this, we still have unresolved
- * expressions of the form (unknown value)+-(unknown value).
- *
- * Note the un*x semantics: there is only 1 logical input file, but it
- * may be a catenation of many 'physical' input files.
- */
-static void
+ Note the un*x semantics: there is only 1 logical input file, but it
+ may be a catenation of many 'physical' input files. */
+
+static void
perform_an_assembly_pass (argc, argv)
int argc;
char **argv;
for (i = SEG_E0; i < SEG_UNKNOWN; i++)
segment_info[i].fix_root = 0;
}
- /* Create the three fixed ones */
+ /* Create the three fixed ones. */
{
segT seg;
data_section = subseg_new (DATA_SECTION_NAME, 0);
bss_section = subseg_new (BSS_SECTION_NAME, 0);
/* @@ FIXME -- we're setting the RELOC flag so that sections are assumed
- to have relocs, otherwise we don't find out in time. */
+ to have relocs, otherwise we don't find out in time. */
applicable = bfd_applicable_section_flags (stdoutput);
bfd_set_section_flags (stdoutput, text_section,
applicable & (SEC_ALLOC | SEC_LOAD | SEC_RELOC
obj_begin ();
#endif
- argv++; /* skip argv[0] */
- argc--; /* skip argv[0] */
+ /* Skip argv[0]. */
+ argv++;
+ argc--;
+
while (argc--)
{
if (*argv)
- { /* Is it a file-name argument? */
+ { /* Is it a file-name argument? */
PROGRESS (1);
saw_a_file++;
- /* argv->"" if stdin desired, else->filename */
+ /* argv->"" if stdin desired, else->filename */
read_a_source_file (*argv);
}
- argv++; /* completed that argv */
+ argv++; /* completed that argv */
}
if (!saw_a_file)
read_a_source_file ("");
-} /* perform_an_assembly_pass() */
+}
/* The interface between the macro code and gas expression handling. */
return idx;
}
-
-/* end of as.c */
#include "obstack.h"
-/* This is allocated to grow and shrink as .ifdef/.endif pairs are scanned. */
+/* This is allocated to grow and shrink as .ifdef/.endif pairs are
+ scanned. */
struct obstack cond_obstack;
struct file_line
static struct conditional_frame *current_cframe = NULL;
-void
+void
s_ifdef (arg)
int arg;
{
- register char *name; /* points to name of symbol */
- register symbolS *symbolP; /* Points to symbol */
+ /* Points to name of symbol. */
+ register char *name;
+ /* Points to symbol. */
+ register symbolS *symbolP;
struct conditional_frame cframe;
- SKIP_WHITESPACE (); /* Leading whitespace is part of operand. */
+ /* Leading whitespace is part of operand. */
+ SKIP_WHITESPACE ();
name = input_line_pointer;
if (!is_name_beginner (*name))
demand_empty_rest_of_line ();
} /* if a valid identifyer name */
-} /* s_ifdef() */
+}
-void
+void
s_if (arg)
int arg;
{
if (flag_mri)
stop = mri_comment_field (&stopc);
- SKIP_WHITESPACE (); /* Leading whitespace is part of operand. */
+ /* Leading whitespace is part of operand. */
+ SKIP_WHITESPACE ();
if (current_cframe != NULL && current_cframe->ignoring)
{
mri_comment_end (stop, stopc);
demand_empty_rest_of_line ();
-} /* s_if() */
+}
/* Get a string for the MRI IFC or IFNC pseudo-ops. */
demand_empty_rest_of_line ();
}
-void
+void
s_elseif (arg)
int arg;
{
} /* if not a dead tree */
} /* if error else do it */
-
- SKIP_WHITESPACE (); /* Leading whitespace is part of operand. */
+ /* Leading whitespace is part of operand. */
+ SKIP_WHITESPACE ();
if (current_cframe != NULL && current_cframe->ignoring)
{
if (operand.X_op != O_constant)
as_bad (_("non-constant expression in \".elseif\" statement"));
}
-
+
switch ((operatorT) arg)
{
case O_eq: t = operand.X_add_number == 0; break;
demand_empty_rest_of_line ();
}
-void
+void
s_endif (arg)
int arg ATTRIBUTE_UNUSED;
{
}
demand_empty_rest_of_line ();
-} /* s_endif() */
+}
-void
+void
s_else (arg)
int arg ATTRIBUTE_UNUSED;
{
}
demand_empty_rest_of_line ();
-} /* s_else() */
+}
-void
+void
s_ifeqs (arg)
int arg;
{
listing_list (2);
demand_empty_rest_of_line ();
-} /* s_ifeqs() */
+}
-int
+int
ignore_input ()
{
char *s;
return 0;
return (current_cframe != NULL) && (current_cframe->ignoring);
-} /* ignore_input() */
+}
-static void
+static void
initialize_cframe (cframe)
struct conditional_frame *cframe;
{
obstack_free (&cond_obstack, hold);
}
}
-
-/* end of cond.c */