1/* as.c - GAS main program.
2   Copyright (C) 1987-2020 Free Software Foundation, Inc.
3
4   This file is part of GAS, the GNU Assembler.
5
6   GAS is free software; you can redistribute it and/or modify
7   it under the terms of the GNU General Public License as published by
8   the Free Software Foundation; either version 3, or (at your option)
9   any later version.
10
11   GAS is distributed in the hope that it will be useful, but WITHOUT
12   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
13   or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
14   License for more details.
15
16   You should have received a copy of the GNU General Public License
17   along with GAS; see the file COPYING.  If not, write to the Free
18   Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
19   02110-1301, USA.  */
20
21/* Main program for AS; a 32-bit assembler of GNU.
22   Understands command arguments.
23   Has a few routines that don't fit in other modules because they
24   are shared.
25
26  			bugs
27
28   : initialisers
29  	Since no-one else says they will support them in future: I
30   don't support them now.  */
31
32#define COMMON
33
34/* Disable code to set FAKE_LABEL_NAME in obj-multi.h, to avoid circular
35   reference.  */
36#define INITIALIZING_EMULS
37
38#include "as.h"
39#include "subsegs.h"
40#include "output-file.h"
41#include "sb.h"
42#include "macro.h"
43#include "dwarf2dbg.h"
44#include "dw2gencfi.h"
45#include "bfdver.h"
46#include "write.h"
47
48#ifdef HAVE_ITBL_CPU
49#include "itbl-ops.h"
50#else
51#define itbl_init()
52#endif
53
54#ifdef USING_CGEN
55/* Perform any cgen specific initialisation for gas.  */
56extern void gas_cgen_begin (void);
57#endif
58
59/* We build a list of defsyms as we read the options, and then define
60   them after we have initialized everything.  */
61struct defsym_list
62{
63  struct defsym_list *next;
64  char *name;
65  valueT value;
66};
67
68
69/* True if a listing is wanted.  */
70int listing;
71
72/* Type of debugging to generate.  */
73enum debug_info_type debug_type = DEBUG_UNSPECIFIED;
74int use_gnu_debug_info_extensions = 0;
75
76#ifndef MD_DEBUG_FORMAT_SELECTOR
77#define MD_DEBUG_FORMAT_SELECTOR NULL
78#endif
79static enum debug_info_type (*md_debug_format_selector) (int *) = MD_DEBUG_FORMAT_SELECTOR;
80
81/* Maximum level of macro nesting.  */
82int max_macro_nest = 100;
83
84/* argv[0]  */
85static char * myname;
86
87/* The default obstack chunk size.  If we set this to zero, the
88   obstack code will use whatever will fit in a 4096 byte block.  */
89int chunksize = 0;
90
91/* To monitor memory allocation more effectively, make this non-zero.
92   Then the chunk sizes for gas and bfd will be reduced.  */
93int debug_memory = 0;
94
95/* Enable verbose mode.  */
96int verbose = 0;
97
98/* Which version of DWARF CIE to produce.  This default value of -1
99   indicates that this value has not been set yet, a default value is
100   provided in dwarf2_init.  A different value can also be supplied by the
101   command line flag --gdwarf-cie-version, or by a target in
102   MD_AFTER_PARSE_ARGS.  */
103int flag_dwarf_cie_version = -1;
104
105/* The maximum level of DWARF DEBUG information we should manufacture.
106   This defaults to 3 unless overridden by a command line option.  */
107unsigned int dwarf_level = 3;
108
109#if defined OBJ_ELF || defined OBJ_MAYBE_ELF
110int flag_use_elf_stt_common = DEFAULT_GENERATE_ELF_STT_COMMON;
111bfd_boolean flag_generate_build_notes = DEFAULT_GENERATE_BUILD_NOTES;
112#endif
113
114/* Keep the output file.  */
115static int keep_it = 0;
116
117segT reg_section;
118segT expr_section;
119segT text_section;
120segT data_section;
121segT bss_section;
122
123/* Name of listing file.  */
124static char *listing_filename = NULL;
125
126static struct defsym_list *defsyms;
127
128#ifdef HAVE_ITBL_CPU
129/* Keep a record of the itbl files we read in.  */
130struct itbl_file_list
131{
132  struct itbl_file_list *next;
133  char *name;
134};
135static struct itbl_file_list *itbl_files;
136#endif
137
138static long start_time;
139
140static int flag_macro_alternate;
141
142
143#ifdef USE_EMULATIONS
144#define EMULATION_ENVIRON "AS_EMULATION"
145
146extern struct emulation mipsbelf, mipslelf, mipself;
147extern struct emulation i386coff, i386elf, i386aout;
148extern struct emulation crisaout, criself;
149
150static struct emulation *const emulations[] = { EMULATIONS };
151static const int n_emulations = sizeof (emulations) / sizeof (emulations[0]);
152
153static void
154select_emulation_mode (int argc, char **argv)
155{
156  int i;
157  char *p;
158  const char *em = NULL;
159
160  for (i = 1; i < argc; i++)
161    if (!strncmp ("--em", argv[i], 4))
162      break;
163
164  if (i == argc)
165    goto do_default;
166
167  p = strchr (argv[i], '=');
168  if (p)
169    p++;
170  else
171    p = argv[i + 1];
172
173  if (!p || !*p)
174    as_fatal (_("missing emulation mode name"));
175  em = p;
176
177 do_default:
178  if (em == 0)
179    em = getenv (EMULATION_ENVIRON);
180  if (em == 0)
181    em = DEFAULT_EMULATION;
182
183  if (em)
184    {
185      for (i = 0; i < n_emulations; i++)
186	if (!strcmp (emulations[i]->name, em))
187	  break;
188      if (i == n_emulations)
189	as_fatal (_("unrecognized emulation name `%s'"), em);
190      this_emulation = emulations[i];
191    }
192  else
193    this_emulation = emulations[0];
194
195  this_emulation->init ();
196}
197
198const char *
199default_emul_bfd_name (void)
200{
201  abort ();
202  return NULL;
203}
204
205void
206common_emul_init (void)
207{
208  this_format = this_emulation->format;
209
210  if (this_emulation->leading_underscore == 2)
211    this_emulation->leading_underscore = this_format->dfl_leading_underscore;
212
213  if (this_emulation->default_endian != 2)
214    target_big_endian = this_emulation->default_endian;
215
216  if (this_emulation->fake_label_name == 0)
217    {
218      if (this_emulation->leading_underscore)
219	this_emulation->fake_label_name = FAKE_LABEL_NAME;
220      else
221	/* What other parameters should we test?  */
222	this_emulation->fake_label_name = "." FAKE_LABEL_NAME;
223    }
224}
225#endif
226
227void
228print_version_id (void)
229{
230  static int printed;
231
232  if (printed)
233    return;
234  printed = 1;
235
236  fprintf (stderr, _("GNU assembler version %s (%s) using BFD version %s\n"),
237	   VERSION, TARGET_ALIAS, BFD_VERSION_STRING);
238}
239
240#ifdef DEFAULT_FLAG_COMPRESS_DEBUG
241enum compressed_debug_section_type flag_compress_debug
242  = COMPRESS_DEBUG_GABI_ZLIB;
243#endif
244
245static void
246show_usage (FILE * stream)
247{
248  fprintf (stream, _("Usage: %s [option...] [asmfile...]\n"), myname);
249
250  fprintf (stream, _("\
251Options:\n\
252  -a[sub-option...]	  turn on listings\n\
253                      	  Sub-options [default hls]:\n\
254                      	  c      omit false conditionals\n\
255                      	  d      omit debugging directives\n\
256                      	  g      include general info\n\
257                      	  h      include high-level source\n\
258                      	  l      include assembly\n\
259                      	  m      include macro expansions\n\
260                      	  n      omit forms processing\n\
261                      	  s      include symbols\n\
262                      	  =FILE  list to FILE (must be last sub-option)\n"));
263
264  fprintf (stream, _("\
265  --alternate             initially turn on alternate macro syntax\n"));
266#ifdef DEFAULT_FLAG_COMPRESS_DEBUG
267  fprintf (stream, _("\
268  --compress-debug-sections[={none|zlib|zlib-gnu|zlib-gabi}]\n\
269                          compress DWARF debug sections using zlib [default]\n"));
270  fprintf (stream, _("\
271  --nocompress-debug-sections\n\
272                          don't compress DWARF debug sections\n"));
273#else
274  fprintf (stream, _("\
275  --compress-debug-sections[={none|zlib|zlib-gnu|zlib-gabi}]\n\
276                          compress DWARF debug sections using zlib\n"));
277  fprintf (stream, _("\
278  --nocompress-debug-sections\n\
279                          don't compress DWARF debug sections [default]\n"));
280#endif
281  fprintf (stream, _("\
282  -D                      produce assembler debugging messages\n"));
283  fprintf (stream, _("\
284  --debug-prefix-map OLD=NEW\n\
285                          map OLD to NEW in debug information\n"));
286  fprintf (stream, _("\
287  --defsym SYM=VAL        define symbol SYM to given value\n"));
288#ifdef USE_EMULATIONS
289  {
290    int i;
291    const char *def_em;
292
293    fprintf (stream, "\
294  --em=[");
295    for (i = 0; i < n_emulations - 1; i++)
296      fprintf (stream, "%s | ", emulations[i]->name);
297    fprintf (stream, "%s]\n", emulations[i]->name);
298
299    def_em = getenv (EMULATION_ENVIRON);
300    if (!def_em)
301      def_em = DEFAULT_EMULATION;
302    fprintf (stream, _("\
303                          emulate output (default %s)\n"), def_em);
304  }
305#endif
306#if defined OBJ_ELF || defined OBJ_MAYBE_ELF
307  fprintf (stream, _("\
308  --execstack             require executable stack for this object\n"));
309  fprintf (stream, _("\
310  --noexecstack           don't require executable stack for this object\n"));
311  fprintf (stream, _("\
312  --size-check=[error|warning]\n\
313			  ELF .size directive check (default --size-check=error)\n"));
314  fprintf (stream, _("\
315  --elf-stt-common=[no|yes] "));
316  if (DEFAULT_GENERATE_ELF_STT_COMMON)
317    fprintf (stream, _("(default: yes)\n"));
318  else
319    fprintf (stream, _("(default: no)\n"));
320  fprintf (stream, _("\
321                          generate ELF common symbols with STT_COMMON type\n"));
322  fprintf (stream, _("\
323  --sectname-subst        enable section name substitution sequences\n"));
324
325  fprintf (stream, _("\
326  --generate-missing-build-notes=[no|yes] "));
327#if DEFAULT_GENERATE_BUILD_NOTES
328  fprintf (stream, _("(default: yes)\n"));
329#else
330  fprintf (stream, _("(default: no)\n"));
331#endif
332  fprintf (stream, _("\
333                          generate GNU Build notes if none are present in the input\n"));
334#endif /* OBJ_ELF */
335
336  fprintf (stream, _("\
337  -f                      skip whitespace and comment preprocessing\n"));
338  fprintf (stream, _("\
339  -g --gen-debug          generate debugging information\n"));
340  fprintf (stream, _("\
341  --gstabs                generate STABS debugging information\n"));
342  fprintf (stream, _("\
343  --gstabs+               generate STABS debug info with GNU extensions\n"));
344  fprintf (stream, _("\
345  --gdwarf-<N>            generate DWARF<N> debugging information. 2 <= <N> <= 5\n"));
346  fprintf (stream, _("\
347  --gdwarf-sections       generate per-function section names for DWARF line information\n"));
348  fprintf (stream, _("\
349  --target-help           show target specific options\n"));
350  fprintf (stream, _("\
351  -I DIR                  add DIR to search list for .include directives\n"));
352  fprintf (stream, _("\
353  -J                      don't warn about signed overflow\n"));
354  fprintf (stream, _("\
355  -K                      warn when differences altered for long displacements\n"));
356  fprintf (stream, _("\
357  -L,--keep-locals        keep local symbols (e.g. starting with `L')\n"));
358  fprintf (stream, _("\
359  -M,--mri                assemble in MRI compatibility mode\n"));
360  fprintf (stream, _("\
361  --MD FILE               write dependency information in FILE (default none)\n"));
362  fprintf (stream, _("\
363  -nocpp                  ignored\n"));
364  fprintf (stream, _("\
365  -no-pad-sections        do not pad the end of sections to alignment boundaries\n"));
366  fprintf (stream, _("\
367  -o OBJFILE              name the object-file output OBJFILE (default a.out)\n"));
368  fprintf (stream, _("\
369  -R                      fold data section into text section\n"));
370  fprintf (stream, _("\
371  --statistics            print various measured statistics from execution\n"));
372  fprintf (stream, _("\
373  --strip-local-absolute  strip local absolute symbols\n"));
374  fprintf (stream, _("\
375  --traditional-format    Use same format as native assembler when possible\n"));
376  fprintf (stream, _("\
377  --version               print assembler version number and exit\n"));
378  fprintf (stream, _("\
379  -W  --no-warn           suppress warnings\n"));
380  fprintf (stream, _("\
381  --warn                  don't suppress warnings\n"));
382  fprintf (stream, _("\
383  --fatal-warnings        treat warnings as errors\n"));
384#ifdef HAVE_ITBL_CPU
385  fprintf (stream, _("\
386  --itbl INSTTBL          extend instruction set to include instructions\n\
387                          matching the specifications defined in file INSTTBL\n"));
388#endif
389  fprintf (stream, _("\
390  -w                      ignored\n"));
391  fprintf (stream, _("\
392  -X                      ignored\n"));
393  fprintf (stream, _("\
394  -Z                      generate object file even after errors\n"));
395  fprintf (stream, _("\
396  --listing-lhs-width     set the width in words of the output data column of\n\
397                          the listing\n"));
398  fprintf (stream, _("\
399  --listing-lhs-width2    set the width in words of the continuation lines\n\
400                          of the output data column; ignored if smaller than\n\
401                          the width of the first line\n"));
402  fprintf (stream, _("\
403  --listing-rhs-width     set the max width in characters of the lines from\n\
404                          the source file\n"));
405  fprintf (stream, _("\
406  --listing-cont-lines    set the maximum number of continuation lines used\n\
407                          for the output data column of the listing\n"));
408  fprintf (stream, _("\
409  @FILE                   read options from FILE\n"));
410
411  md_show_usage (stream);
412
413  fputc ('\n', stream);
414
415  if (REPORT_BUGS_TO[0] && stream == stdout)
416    fprintf (stream, _("Report bugs to %s\n"), REPORT_BUGS_TO);
417}
418
419/* Since it is easy to do here we interpret the special arg "-"
420   to mean "use stdin" and we set that argv[] pointing to "".
421   After we have munged argv[], the only things left are source file
422   name(s) and ""(s) denoting stdin. These file names are used
423   (perhaps more than once) later.
424
425   check for new machine-dep cmdline options in
426   md_parse_option definitions in config/tc-*.c.  */
427
428static void
429parse_args (int * pargc, char *** pargv)
430{
431  int old_argc;
432  int new_argc;
433  char ** old_argv;
434  char ** new_argv;
435  /* Starting the short option string with '-' is for programs that
436     expect options and other ARGV-elements in any order and that care about
437     the ordering of the two.  We describe each non-option ARGV-element
438     as if it were the argument of an option with character code 1.  */
439  char *shortopts;
440  extern const char *md_shortopts;
441  static const char std_shortopts[] =
442  {
443    '-', 'J',
444#ifndef WORKING_DOT_WORD
445    /* -K is not meaningful if .word is not being hacked.  */
446    'K',
447#endif
448    'L', 'M', 'R', 'W', 'Z', 'a', ':', ':', 'D', 'f', 'g', ':',':', 'I', ':', 'o', ':',
449#ifndef VMS
450    /* -v takes an argument on VMS, so we don't make it a generic
451       option.  */
452    'v',
453#endif
454    'w', 'X',
455#ifdef HAVE_ITBL_CPU
456    /* New option for extending instruction set (see also --itbl below).  */
457    't', ':',
458#endif
459    '\0'
460  };
461  struct option *longopts;
462  extern struct option md_longopts[];
463  extern size_t md_longopts_size;
464  /* Codes used for the long options with no short synonyms.  */
465  enum option_values
466    {
467      OPTION_HELP = OPTION_STD_BASE,
468      OPTION_NOCPP,
469      OPTION_STATISTICS,
470      OPTION_VERSION,
471      OPTION_DUMPCONFIG,
472      OPTION_VERBOSE,
473      OPTION_EMULATION,
474      OPTION_DEBUG_PREFIX_MAP,
475      OPTION_DEFSYM,
476      OPTION_LISTING_LHS_WIDTH,
477      OPTION_LISTING_LHS_WIDTH2,
478      OPTION_LISTING_RHS_WIDTH,
479      OPTION_LISTING_CONT_LINES,
480      OPTION_DEPFILE,
481      OPTION_GSTABS,
482      OPTION_GSTABS_PLUS,
483      OPTION_GDWARF_2,
484      OPTION_GDWARF_3,
485      OPTION_GDWARF_4,
486      OPTION_GDWARF_5,
487      OPTION_GDWARF_SECTIONS,
488      OPTION_GDWARF_CIE_VERSION,
489      OPTION_STRIP_LOCAL_ABSOLUTE,
490      OPTION_TRADITIONAL_FORMAT,
491      OPTION_WARN,
492      OPTION_TARGET_HELP,
493      OPTION_EXECSTACK,
494      OPTION_NOEXECSTACK,
495      OPTION_SIZE_CHECK,
496      OPTION_ELF_STT_COMMON,
497      OPTION_ELF_BUILD_NOTES,
498      OPTION_SECTNAME_SUBST,
499      OPTION_ALTERNATE,
500      OPTION_AL,
501      OPTION_HASH_TABLE_SIZE,
502      OPTION_REDUCE_MEMORY_OVERHEADS,
503      OPTION_WARN_FATAL,
504      OPTION_COMPRESS_DEBUG,
505      OPTION_NOCOMPRESS_DEBUG,
506      OPTION_NO_PAD_SECTIONS /* = STD_BASE + 40 */
507    /* When you add options here, check that they do
508       not collide with OPTION_MD_BASE.  See as.h.  */
509    };
510
511  static const struct option std_longopts[] =
512  {
513    /* Note: commas are placed at the start of the line rather than
514       the end of the preceding line so that it is simpler to
515       selectively add and remove lines from this list.  */
516    {"alternate", no_argument, NULL, OPTION_ALTERNATE}
517    /* The entry for "a" is here to prevent getopt_long_only() from
518       considering that -a is an abbreviation for --alternate.  This is
519       necessary because -a=<FILE> is a valid switch but getopt would
520       normally reject it since --alternate does not take an argument.  */
521    ,{"a", optional_argument, NULL, 'a'}
522    /* Handle -al=<FILE>.  */
523    ,{"al", optional_argument, NULL, OPTION_AL}
524    ,{"compress-debug-sections", optional_argument, NULL, OPTION_COMPRESS_DEBUG}
525    ,{"nocompress-debug-sections", no_argument, NULL, OPTION_NOCOMPRESS_DEBUG}
526    ,{"debug-prefix-map", required_argument, NULL, OPTION_DEBUG_PREFIX_MAP}
527    ,{"defsym", required_argument, NULL, OPTION_DEFSYM}
528    ,{"dump-config", no_argument, NULL, OPTION_DUMPCONFIG}
529    ,{"emulation", required_argument, NULL, OPTION_EMULATION}
530#if defined OBJ_ELF || defined OBJ_MAYBE_ELF
531    ,{"execstack", no_argument, NULL, OPTION_EXECSTACK}
532    ,{"noexecstack", no_argument, NULL, OPTION_NOEXECSTACK}
533    ,{"size-check", required_argument, NULL, OPTION_SIZE_CHECK}
534    ,{"elf-stt-common", required_argument, NULL, OPTION_ELF_STT_COMMON}
535    ,{"sectname-subst", no_argument, NULL, OPTION_SECTNAME_SUBST}
536    ,{"generate-missing-build-notes", required_argument, NULL, OPTION_ELF_BUILD_NOTES}
537#endif
538    ,{"fatal-warnings", no_argument, NULL, OPTION_WARN_FATAL}
539    ,{"gdwarf-2", no_argument, NULL, OPTION_GDWARF_2}
540    ,{"gdwarf-3", no_argument, NULL, OPTION_GDWARF_3}
541    ,{"gdwarf-4", no_argument, NULL, OPTION_GDWARF_4}
542    ,{"gdwarf-5", no_argument, NULL, OPTION_GDWARF_5}
543    /* GCC uses --gdwarf-2 but GAS used to to use --gdwarf2,
544       so we keep it here for backwards compatibility.  */
545    ,{"gdwarf2", no_argument, NULL, OPTION_GDWARF_2}
546    ,{"gdwarf-sections", no_argument, NULL, OPTION_GDWARF_SECTIONS}
547    ,{"gdwarf-cie-version", required_argument, NULL, OPTION_GDWARF_CIE_VERSION}
548    ,{"gen-debug", no_argument, NULL, 'g'}
549    ,{"gstabs", no_argument, NULL, OPTION_GSTABS}
550    ,{"gstabs+", no_argument, NULL, OPTION_GSTABS_PLUS}
551    ,{"hash-size", required_argument, NULL, OPTION_HASH_TABLE_SIZE}
552    ,{"help", no_argument, NULL, OPTION_HELP}
553#ifdef HAVE_ITBL_CPU
554    /* New option for extending instruction set (see also -t above).
555       The "-t file" or "--itbl file" option extends the basic set of
556       valid instructions by reading "file", a text file containing a
557       list of instruction formats.  The additional opcodes and their
558       formats are added to the built-in set of instructions, and
559       mnemonics for new registers may also be defined.  */
560    ,{"itbl", required_argument, NULL, 't'}
561#endif
562    /* getopt allows abbreviations, so we do this to stop it from
563       treating -k as an abbreviation for --keep-locals.  Some
564       ports use -k to enable PIC assembly.  */
565    ,{"keep-locals", no_argument, NULL, 'L'}
566    ,{"keep-locals", no_argument, NULL, 'L'}
567    ,{"listing-lhs-width", required_argument, NULL, OPTION_LISTING_LHS_WIDTH}
568    ,{"listing-lhs-width2", required_argument, NULL, OPTION_LISTING_LHS_WIDTH2}
569    ,{"listing-rhs-width", required_argument, NULL, OPTION_LISTING_RHS_WIDTH}
570    ,{"listing-cont-lines", required_argument, NULL, OPTION_LISTING_CONT_LINES}
571    ,{"MD", required_argument, NULL, OPTION_DEPFILE}
572    ,{"mri", no_argument, NULL, 'M'}
573    ,{"nocpp", no_argument, NULL, OPTION_NOCPP}
574    ,{"no-pad-sections", no_argument, NULL, OPTION_NO_PAD_SECTIONS}
575    ,{"no-warn", no_argument, NULL, 'W'}
576    ,{"reduce-memory-overheads", no_argument, NULL, OPTION_REDUCE_MEMORY_OVERHEADS}
577    ,{"statistics", no_argument, NULL, OPTION_STATISTICS}
578    ,{"strip-local-absolute", no_argument, NULL, OPTION_STRIP_LOCAL_ABSOLUTE}
579    ,{"version", no_argument, NULL, OPTION_VERSION}
580    ,{"verbose", no_argument, NULL, OPTION_VERBOSE}
581    ,{"target-help", no_argument, NULL, OPTION_TARGET_HELP}
582    ,{"traditional-format", no_argument, NULL, OPTION_TRADITIONAL_FORMAT}
583    ,{"warn", no_argument, NULL, OPTION_WARN}
584  };
585
586  /* Construct the option lists from the standard list and the target
587     dependent list.  Include space for an extra NULL option and
588     always NULL terminate.  */
589  shortopts = concat (std_shortopts, md_shortopts, (char *) NULL);
590  longopts = (struct option *) xmalloc (sizeof (std_longopts)
591                                        + md_longopts_size + sizeof (struct option));
592  memcpy (longopts, std_longopts, sizeof (std_longopts));
593  memcpy (((char *) longopts) + sizeof (std_longopts), md_longopts, md_longopts_size);
594  memset (((char *) longopts) + sizeof (std_longopts) + md_longopts_size,
595	  0, sizeof (struct option));
596
597  /* Make a local copy of the old argv.  */
598  old_argc = *pargc;
599  old_argv = *pargv;
600
601  /* Initialize a new argv that contains no options.  */
602  new_argv = XNEWVEC (char *, old_argc + 1);
603  new_argv[0] = old_argv[0];
604  new_argc = 1;
605  new_argv[new_argc] = NULL;
606
607  while (1)
608    {
609      /* getopt_long_only is like getopt_long, but '-' as well as '--' can
610	 indicate a long option.  */
611      int longind;
612      int optc = getopt_long_only (old_argc, old_argv, shortopts, longopts,
613				   &longind);
614
615      if (optc == -1)
616	break;
617
618      switch (optc)
619	{
620	default:
621	  /* md_parse_option should return 1 if it recognizes optc,
622	     0 if not.  */
623	  if (md_parse_option (optc, optarg) != 0)
624	    break;
625	  /* `-v' isn't included in the general short_opts list, so check for
626	     it explicitly here before deciding we've gotten a bad argument.  */
627	  if (optc == 'v')
628	    {
629#ifdef VMS
630	      /* Telling getopt to treat -v's value as optional can result
631		 in it picking up a following filename argument here.  The
632		 VMS code in md_parse_option can return 0 in that case,
633		 but it has no way of pushing the filename argument back.  */
634	      if (optarg && *optarg)
635		new_argv[new_argc++] = optarg, new_argv[new_argc] = NULL;
636	      else
637#else
638	      case 'v':
639#endif
640	      case OPTION_VERBOSE:
641		print_version_id ();
642		verbose = 1;
643	      break;
644	    }
645	  else
646	    as_bad (_("unrecognized option -%c%s"), optc, optarg ? optarg : "");
647	  /* Fall through.  */
648
649	case '?':
650	  exit (EXIT_FAILURE);
651
652	case 1:			/* File name.  */
653	  if (!strcmp (optarg, "-"))
654	    optarg = (char *) "";
655	  new_argv[new_argc++] = optarg;
656	  new_argv[new_argc] = NULL;
657	  break;
658
659	case OPTION_TARGET_HELP:
660	  md_show_usage (stdout);
661	  exit (EXIT_SUCCESS);
662
663	case OPTION_HELP:
664	  show_usage (stdout);
665	  exit (EXIT_SUCCESS);
666
667	case OPTION_NOCPP:
668	  break;
669
670	case OPTION_NO_PAD_SECTIONS:
671	  do_not_pad_sections_to_alignment = 1;
672	  break;
673
674	case OPTION_STATISTICS:
675	  flag_print_statistics = 1;
676	  break;
677
678	case OPTION_STRIP_LOCAL_ABSOLUTE:
679	  flag_strip_local_absolute = 1;
680	  break;
681
682	case OPTION_TRADITIONAL_FORMAT:
683	  flag_traditional_format = 1;
684	  break;
685
686	case OPTION_VERSION:
687	  /* This output is intended to follow the GNU standards document.  */
688	  printf (_("GNU assembler %s\n"), BFD_VERSION_STRING);
689	  printf (_("Copyright (C) 2020 Free Software Foundation, Inc.\n"));
690	  printf (_("\
691This program is free software; you may redistribute it under the terms of\n\
692the GNU General Public License version 3 or later.\n\
693This program has absolutely no warranty.\n"));
694#ifdef TARGET_WITH_CPU
695	  printf (_("This assembler was configured for a target of `%s' "
696		    "and default,\ncpu type `%s'.\n"),
697		  TARGET_ALIAS, TARGET_WITH_CPU);
698#else
699	  printf (_("This assembler was configured for a target of `%s'.\n"),
700		  TARGET_ALIAS);
701#endif
702	  exit (EXIT_SUCCESS);
703
704	case OPTION_EMULATION:
705#ifdef USE_EMULATIONS
706	  if (strcmp (optarg, this_emulation->name))
707	    as_fatal (_("multiple emulation names specified"));
708#else
709	  as_fatal (_("emulations not handled in this configuration"));
710#endif
711	  break;
712
713	case OPTION_DUMPCONFIG:
714	  fprintf (stderr, _("alias = %s\n"), TARGET_ALIAS);
715	  fprintf (stderr, _("canonical = %s\n"), TARGET_CANONICAL);
716	  fprintf (stderr, _("cpu-type = %s\n"), TARGET_CPU);
717#ifdef TARGET_OBJ_FORMAT
718	  fprintf (stderr, _("format = %s\n"), TARGET_OBJ_FORMAT);
719#endif
720#ifdef TARGET_FORMAT
721	  fprintf (stderr, _("bfd-target = %s\n"), TARGET_FORMAT);
722#endif
723	  exit (EXIT_SUCCESS);
724
725	case OPTION_COMPRESS_DEBUG:
726	  if (optarg)
727	    {
728#if defined OBJ_ELF || defined OBJ_MAYBE_ELF
729	      if (strcasecmp (optarg, "none") == 0)
730		flag_compress_debug = COMPRESS_DEBUG_NONE;
731	      else if (strcasecmp (optarg, "zlib") == 0)
732		flag_compress_debug = COMPRESS_DEBUG_GABI_ZLIB;
733	      else if (strcasecmp (optarg, "zlib-gnu") == 0)
734		flag_compress_debug = COMPRESS_DEBUG_GNU_ZLIB;
735	      else if (strcasecmp (optarg, "zlib-gabi") == 0)
736		flag_compress_debug = COMPRESS_DEBUG_GABI_ZLIB;
737	      else
738		as_fatal (_("Invalid --compress-debug-sections option: `%s'"),
739			  optarg);
740#else
741	      as_fatal (_("--compress-debug-sections=%s is unsupported"),
742			optarg);
743#endif
744	    }
745	  else
746	    flag_compress_debug = COMPRESS_DEBUG_GABI_ZLIB;
747	  break;
748
749	case OPTION_NOCOMPRESS_DEBUG:
750	  flag_compress_debug = COMPRESS_DEBUG_NONE;
751	  break;
752
753	case OPTION_DEBUG_PREFIX_MAP:
754	  add_debug_prefix_map (optarg);
755	  break;
756
757	case OPTION_DEFSYM:
758	  {
759	    char *s;
760	    valueT i;
761	    struct defsym_list *n;
762
763	    for (s = optarg; *s != '\0' && *s != '='; s++)
764	      ;
765	    if (*s == '\0')
766	      as_fatal (_("bad defsym; format is --defsym name=value"));
767	    *s++ = '\0';
768	    i = bfd_scan_vma (s, (const char **) NULL, 0);
769	    n = XNEW (struct defsym_list);
770	    n->next = defsyms;
771	    n->name = optarg;
772	    n->value = i;
773	    defsyms = n;
774	  }
775	  break;
776
777#ifdef HAVE_ITBL_CPU
778	case 't':
779	  {
780	    /* optarg is the name of the file containing the instruction
781	       formats, opcodes, register names, etc.  */
782	    struct itbl_file_list *n;
783
784	    if (optarg == NULL)
785	      {
786		as_warn (_("no file name following -t option"));
787		break;
788	      }
789
790	    n = XNEW (struct itbl_file_list);
791	    n->next = itbl_files;
792	    n->name = optarg;
793	    itbl_files = n;
794
795	    /* Parse the file and add the new instructions to our internal
796	       table.  If multiple instruction tables are specified, the
797	       information from this table gets appended onto the existing
798	       internal table.  */
799	    itbl_files->name = xstrdup (optarg);
800	    if (itbl_parse (itbl_files->name) != 0)
801	      as_fatal (_("failed to read instruction table %s\n"),
802			itbl_files->name);
803	  }
804	  break;
805#endif
806
807	case OPTION_DEPFILE:
808	  start_dependencies (optarg);
809	  break;
810
811	case 'g':
812	  /* Some backends, eg Alpha and Mips, use the -g switch for their
813	     own purposes.  So we check here for an explicit -g and allow
814	     the backend to decide if it wants to process it.  */
815	  if (   old_argv[optind - 1][1] == 'g'
816	      && md_parse_option (optc, optarg))
817	    continue;
818
819	  /* We end up here for any -gsomething-not-already-a-long-option.
820	     give some useful feedback on not (yet) supported -gdwarfxxx
821	     versions/sections/options.  */
822	  if (strncmp (old_argv[optind - 1], "-gdwarf",
823		       strlen ("-gdwarf")) == 0)
824	    as_fatal (_("unknown DWARF option %s\n"), old_argv[optind - 1]);
825
826	  if (md_debug_format_selector)
827	    debug_type = md_debug_format_selector (& use_gnu_debug_info_extensions);
828	  else if (IS_ELF)
829	    {
830	      debug_type = DEBUG_DWARF2;
831	      dwarf_level = 2;
832	    }
833	  else
834	    debug_type = DEBUG_STABS;
835	  break;
836
837	case OPTION_GSTABS_PLUS:
838	  use_gnu_debug_info_extensions = 1;
839	  /* Fall through.  */
840	case OPTION_GSTABS:
841	  debug_type = DEBUG_STABS;
842	  break;
843
844	case OPTION_GDWARF_2:
845	  debug_type = DEBUG_DWARF2;
846	  dwarf_level = 2;
847	  break;
848
849	case OPTION_GDWARF_3:
850	  debug_type = DEBUG_DWARF2;
851	  dwarf_level = 3;
852	  break;
853
854	case OPTION_GDWARF_4:
855	  debug_type = DEBUG_DWARF2;
856	  dwarf_level = 4;
857	  break;
858
859	case OPTION_GDWARF_5:
860	  debug_type = DEBUG_DWARF2;
861	  dwarf_level = 5;
862	  break;
863
864	case OPTION_GDWARF_SECTIONS:
865	  flag_dwarf_sections = TRUE;
866	  break;
867
868        case OPTION_GDWARF_CIE_VERSION:
869	  flag_dwarf_cie_version = atoi (optarg);
870          /* The available CIE versions are 1 (DWARF 2), 3 (DWARF 3), and 4
871             (DWARF 4 and 5).  */
872	  if (flag_dwarf_cie_version < 1
873              || flag_dwarf_cie_version == 2
874              || flag_dwarf_cie_version > 4)
875            as_fatal (_("Invalid --gdwarf-cie-version `%s'"), optarg);
876	  switch (flag_dwarf_cie_version)
877	    {
878	    case 1:
879	      if (dwarf_level < 2)
880		dwarf_level = 2;
881	      break;
882	    case 3:
883	      if (dwarf_level < 3)
884		dwarf_level = 3;
885	      break;
886	    default:
887	      if (dwarf_level < 4)
888		dwarf_level = 4;
889	      break;
890	    }
891	  break;
892
893	case 'J':
894	  flag_signed_overflow_ok = 1;
895	  break;
896
897#ifndef WORKING_DOT_WORD
898	case 'K':
899	  flag_warn_displacement = 1;
900	  break;
901#endif
902	case 'L':
903	  flag_keep_locals = 1;
904	  break;
905
906	case OPTION_LISTING_LHS_WIDTH:
907	  listing_lhs_width = atoi (optarg);
908	  if (listing_lhs_width_second < listing_lhs_width)
909	    listing_lhs_width_second = listing_lhs_width;
910	  break;
911	case OPTION_LISTING_LHS_WIDTH2:
912	  {
913	    int tmp = atoi (optarg);
914
915	    if (tmp > listing_lhs_width)
916	      listing_lhs_width_second = tmp;
917	  }
918	  break;
919	case OPTION_LISTING_RHS_WIDTH:
920	  listing_rhs_width = atoi (optarg);
921	  break;
922	case OPTION_LISTING_CONT_LINES:
923	  listing_lhs_cont_lines = atoi (optarg);
924	  break;
925
926	case 'M':
927	  flag_mri = 1;
928#ifdef TC_M68K
929	  flag_m68k_mri = 1;
930#endif
931	  break;
932
933	case 'R':
934	  flag_readonly_data_in_text = 1;
935	  break;
936
937	case 'W':
938	  flag_no_warnings = 1;
939	  break;
940
941	case OPTION_WARN:
942	  flag_no_warnings = 0;
943	  flag_fatal_warnings = 0;
944	  break;
945
946	case OPTION_WARN_FATAL:
947	  flag_no_warnings = 0;
948	  flag_fatal_warnings = 1;
949	  break;
950
951#if defined OBJ_ELF || defined OBJ_MAYBE_ELF
952	case OPTION_EXECSTACK:
953	  flag_execstack = 1;
954	  flag_noexecstack = 0;
955	  break;
956
957	case OPTION_NOEXECSTACK:
958	  flag_noexecstack = 1;
959	  flag_execstack = 0;
960	  break;
961
962	case OPTION_SIZE_CHECK:
963	  if (strcasecmp (optarg, "error") == 0)
964	    flag_allow_nonconst_size = FALSE;
965	  else if (strcasecmp (optarg, "warning") == 0)
966	    flag_allow_nonconst_size = TRUE;
967	  else
968	    as_fatal (_("Invalid --size-check= option: `%s'"), optarg);
969	  break;
970
971	case OPTION_ELF_STT_COMMON:
972	  if (strcasecmp (optarg, "no") == 0)
973	    flag_use_elf_stt_common = 0;
974	  else if (strcasecmp (optarg, "yes") == 0)
975	    flag_use_elf_stt_common = 1;
976	  else
977	    as_fatal (_("Invalid --elf-stt-common= option: `%s'"),
978		      optarg);
979	  break;
980
981	case OPTION_SECTNAME_SUBST:
982	  flag_sectname_subst = 1;
983	  break;
984
985	case OPTION_ELF_BUILD_NOTES:
986	  if (strcasecmp (optarg, "no") == 0)
987	    flag_generate_build_notes = FALSE;
988	  else if (strcasecmp (optarg, "yes") == 0)
989	    flag_generate_build_notes = TRUE;
990	  else
991	    as_fatal (_("Invalid --generate-missing-build-notes option: `%s'"),
992		      optarg);
993	  break;
994
995#endif /* OBJ_ELF */
996
997	case 'Z':
998	  flag_always_generate_output = 1;
999	  break;
1000
1001 	case OPTION_AL:
1002	  listing |= LISTING_LISTING;
1003	  if (optarg)
1004	    listing_filename = xstrdup (optarg);
1005	  break;
1006
1007 	case OPTION_ALTERNATE:
1008 	  optarg = old_argv [optind - 1];
1009 	  while (* optarg == '-')
1010 	    optarg ++;
1011
1012 	  if (strcmp (optarg, "alternate") == 0)
1013 	    {
1014 	      flag_macro_alternate = 1;
1015 	      break;
1016 	    }
1017 	  optarg ++;
1018 	  /* Fall through.  */
1019
1020	case 'a':
1021	  if (optarg)
1022	    {
1023	      if (optarg != old_argv[optind] && optarg[-1] == '=')
1024		--optarg;
1025
1026	      if (md_parse_option (optc, optarg) != 0)
1027		break;
1028
1029	      while (*optarg)
1030		{
1031		  switch (*optarg)
1032		    {
1033		    case 'c':
1034		      listing |= LISTING_NOCOND;
1035		      break;
1036		    case 'd':
1037		      listing |= LISTING_NODEBUG;
1038		      break;
1039		    case 'g':
1040		      listing |= LISTING_GENERAL;
1041		      break;
1042		    case 'h':
1043		      listing |= LISTING_HLL;
1044		      break;
1045		    case 'l':
1046		      listing |= LISTING_LISTING;
1047		      break;
1048		    case 'm':
1049		      listing |= LISTING_MACEXP;
1050		      break;
1051		    case 'n':
1052		      listing |= LISTING_NOFORM;
1053		      break;
1054		    case 's':
1055		      listing |= LISTING_SYMBOLS;
1056		      break;
1057		    case '=':
1058		      listing_filename = xstrdup (optarg + 1);
1059		      optarg += strlen (listing_filename);
1060		      break;
1061		    default:
1062		      as_fatal (_("invalid listing option `%c'"), *optarg);
1063		      break;
1064		    }
1065		  optarg++;
1066		}
1067	    }
1068	  if (!listing)
1069	    listing = LISTING_DEFAULT;
1070	  break;
1071
1072	case 'D':
1073	  /* DEBUG is implemented: it debugs different
1074	     things from other people's assemblers.  */
1075	  flag_debug = 1;
1076	  break;
1077
1078	case 'f':
1079	  flag_no_comments = 1;
1080	  break;
1081
1082	case 'I':
1083	  {			/* Include file directory.  */
1084	    char *temp = xstrdup (optarg);
1085
1086	    add_include_dir (temp);
1087	    break;
1088	  }
1089
1090	case 'o':
1091	  out_file_name = xstrdup (optarg);
1092	  break;
1093
1094	case 'w':
1095	  break;
1096
1097	case 'X':
1098	  /* -X means treat warnings as errors.  */
1099	  break;
1100
1101	case OPTION_REDUCE_MEMORY_OVERHEADS:
1102	  break;
1103
1104	case OPTION_HASH_TABLE_SIZE:
1105	  break;
1106	}
1107    }
1108
1109  free (shortopts);
1110  free (longopts);
1111
1112  *pargc = new_argc;
1113  *pargv = new_argv;
1114
1115#ifdef md_after_parse_args
1116  md_after_parse_args ();
1117#endif
1118}
1119
1120static void
1121dump_statistics (void)
1122{
1123  long run_time = get_run_time () - start_time;
1124
1125  fprintf (stderr, _("%s: total time in assembly: %ld.%06ld\n"),
1126	   myname, run_time / 1000000, run_time % 1000000);
1127
1128  subsegs_print_statistics (stderr);
1129  write_print_statistics (stderr);
1130  symbol_print_statistics (stderr);
1131  read_print_statistics (stderr);
1132
1133#ifdef tc_print_statistics
1134  tc_print_statistics (stderr);
1135#endif
1136
1137#ifdef obj_print_statistics
1138  obj_print_statistics (stderr);
1139#endif
1140}
1141
1142static void
1143close_output_file (void)
1144{
1145  output_file_close (out_file_name);
1146  if (!keep_it)
1147    unlink_if_ordinary (out_file_name);
1148}
1149
1150/* The interface between the macro code and gas expression handling.  */
1151
1152static size_t
1153macro_expr (const char *emsg, size_t idx, sb *in, offsetT *val)
1154{
1155  expressionS ex;
1156
1157  sb_terminate (in);
1158
1159  temp_ilp (in->ptr + idx);
1160  expression_and_evaluate (&ex);
1161  idx = input_line_pointer - in->ptr;
1162  restore_ilp ();
1163
1164  if (ex.X_op != O_constant)
1165    as_bad ("%s", emsg);
1166
1167  *val = ex.X_add_number;
1168
1169  return idx;
1170}
1171
1172/* Here to attempt 1 pass over each input file.
1173   We scan argv[*] looking for filenames or exactly "" which is
1174   shorthand for stdin. Any argv that is NULL is not a file-name.
1175   We set need_pass_2 TRUE if, after this, we still have unresolved
1176   expressions of the form (unknown value)+-(unknown value).
1177
1178   Note the un*x semantics: there is only 1 logical input file, but it
1179   may be a catenation of many 'physical' input files.  */
1180
1181static void
1182perform_an_assembly_pass (int argc, char ** argv)
1183{
1184  int saw_a_file = 0;
1185#ifndef OBJ_MACH_O
1186  flagword applicable;
1187#endif
1188
1189  need_pass_2 = 0;
1190
1191#ifndef OBJ_MACH_O
1192  /* Create the standard sections, and those the assembler uses
1193     internally.  */
1194  text_section = subseg_new (TEXT_SECTION_NAME, 0);
1195  data_section = subseg_new (DATA_SECTION_NAME, 0);
1196  bss_section = subseg_new (BSS_SECTION_NAME, 0);
1197  /* @@ FIXME -- we're setting the RELOC flag so that sections are assumed
1198     to have relocs, otherwise we don't find out in time.  */
1199  applicable = bfd_applicable_section_flags (stdoutput);
1200  bfd_set_section_flags (text_section,
1201			 applicable & (SEC_ALLOC | SEC_LOAD | SEC_RELOC
1202				       | SEC_CODE | SEC_READONLY));
1203  bfd_set_section_flags (data_section,
1204			 applicable & (SEC_ALLOC | SEC_LOAD | SEC_RELOC
1205				       | SEC_DATA));
1206  bfd_set_section_flags (bss_section, applicable & SEC_ALLOC);
1207  seg_info (bss_section)->bss = 1;
1208#endif
1209  subseg_new (BFD_ABS_SECTION_NAME, 0);
1210  subseg_new (BFD_UND_SECTION_NAME, 0);
1211  reg_section = subseg_new ("*GAS `reg' section*", 0);
1212  expr_section = subseg_new ("*GAS `expr' section*", 0);
1213
1214#ifndef OBJ_MACH_O
1215  subseg_set (text_section, 0);
1216#endif
1217
1218  /* This may add symbol table entries, which requires having an open BFD,
1219     and sections already created.  */
1220  md_begin ();
1221
1222#ifdef USING_CGEN
1223  gas_cgen_begin ();
1224#endif
1225#ifdef obj_begin
1226  obj_begin ();
1227#endif
1228
1229  /* Skip argv[0].  */
1230  argv++;
1231  argc--;
1232
1233  while (argc--)
1234    {
1235      if (*argv)
1236	{			/* Is it a file-name argument?  */
1237	  PROGRESS (1);
1238	  saw_a_file++;
1239	  /* argv->"" if stdin desired, else->filename.  */
1240	  read_a_source_file (*argv);
1241	}
1242      argv++;			/* Completed that argv.  */
1243    }
1244  if (!saw_a_file)
1245    read_a_source_file ("");
1246}
1247
1248
1249int
1250main (int argc, char ** argv)
1251{
1252  char ** argv_orig = argv;
1253  struct stat sob;
1254
1255  int macro_strip_at;
1256
1257  start_time = get_run_time ();
1258  signal_init ();
1259
1260#if defined (HAVE_SETLOCALE) && defined (HAVE_LC_MESSAGES)
1261  setlocale (LC_MESSAGES, "");
1262#endif
1263#if defined (HAVE_SETLOCALE)
1264  setlocale (LC_CTYPE, "");
1265#endif
1266  bindtextdomain (PACKAGE, LOCALEDIR);
1267  textdomain (PACKAGE);
1268
1269  if (debug_memory)
1270    chunksize = 64;
1271
1272#ifdef HOST_SPECIAL_INIT
1273  HOST_SPECIAL_INIT (argc, argv);
1274#endif
1275
1276  myname = argv[0];
1277  xmalloc_set_program_name (myname);
1278
1279  expandargv (&argc, &argv);
1280
1281  START_PROGRESS (myname, 0);
1282
1283#ifndef OBJ_DEFAULT_OUTPUT_FILE_NAME
1284#define OBJ_DEFAULT_OUTPUT_FILE_NAME "a.out"
1285#endif
1286
1287  out_file_name = OBJ_DEFAULT_OUTPUT_FILE_NAME;
1288
1289  hex_init ();
1290  if (bfd_init () != BFD_INIT_MAGIC)
1291    as_fatal (_("libbfd ABI mismatch"));
1292  bfd_set_error_program_name (myname);
1293
1294#ifdef USE_EMULATIONS
1295  select_emulation_mode (argc, argv);
1296#endif
1297
1298  PROGRESS (1);
1299  /* Call parse_args before any of the init/begin functions
1300     so that switches like --hash-size can be honored.  */
1301  parse_args (&argc, &argv);
1302
1303  if (argc > 1 && stat (out_file_name, &sob) == 0)
1304    {
1305      int i;
1306
1307      for (i = 1; i < argc; ++i)
1308	{
1309	  struct stat sib;
1310
1311	  /* Check that the input file and output file are different.  */
1312	  if (stat (argv[i], &sib) == 0
1313	      && sib.st_ino == sob.st_ino
1314	      /* POSIX emulating systems may support stat() but if the
1315		 underlying file system does not support a file serial number
1316		 of some kind then they will return 0 for the inode.  So
1317		 two files with an inode of 0 may not actually be the same.
1318		 On real POSIX systems no ordinary file will ever have an
1319		 inode of 0.  */
1320	      && sib.st_ino != 0
1321	      /* Different files may have the same inode number if they
1322		 reside on different devices, so check the st_dev field as
1323		 well.  */
1324	      && sib.st_dev == sob.st_dev
1325	      /* PR 25572: Only check regular files.  Devices, sockets and so
1326		 on might actually work as both input and output.  Plus there
1327		 is a use case for using /dev/null as both input and output
1328		 when checking for command line option support in a script:
1329		   as --foo /dev/null -o /dev/null; if $? then ...  */
1330	      && S_ISREG (sib.st_mode))
1331	    {
1332	      const char *saved_out_file_name = out_file_name;
1333
1334	      /* Don't let as_fatal remove the output file!  */
1335	      out_file_name = NULL;
1336	      as_fatal (_("The input '%s' and output '%s' files are the same"),
1337			argv[i], saved_out_file_name);
1338	    }
1339	}
1340    }
1341
1342  symbol_begin ();
1343  frag_init ();
1344  subsegs_begin ();
1345  read_begin ();
1346  input_scrub_begin ();
1347  expr_begin ();
1348
1349  /* It has to be called after dump_statistics ().  */
1350  xatexit (close_output_file);
1351
1352  if (flag_print_statistics)
1353    xatexit (dump_statistics);
1354
1355  macro_strip_at = 0;
1356#ifdef TC_I960
1357  macro_strip_at = flag_mri;
1358#endif
1359
1360  macro_init (flag_macro_alternate, flag_mri, macro_strip_at, macro_expr);
1361
1362  PROGRESS (1);
1363
1364  output_file_create (out_file_name);
1365  gas_assert (stdoutput != 0);
1366
1367  dot_symbol_init ();
1368
1369#ifdef tc_init_after_args
1370  tc_init_after_args ();
1371#endif
1372
1373  itbl_init ();
1374
1375  dwarf2_init ();
1376
1377  local_symbol_make (".gasversion.", absolute_section,
1378		     &predefined_address_frag, BFD_VERSION / 10000UL);
1379
1380  /* Now that we have fully initialized, and have created the output
1381     file, define any symbols requested by --defsym command line
1382     arguments.  */
1383  while (defsyms != NULL)
1384    {
1385      symbolS *sym;
1386      struct defsym_list *next;
1387
1388      sym = symbol_new (defsyms->name, absolute_section,
1389			&zero_address_frag, defsyms->value);
1390      /* Make symbols defined on the command line volatile, so that they
1391	 can be redefined inside a source file.  This makes this assembler's
1392	 behaviour compatible with earlier versions, but it may not be
1393	 completely intuitive.  */
1394      S_SET_VOLATILE (sym);
1395      symbol_table_insert (sym);
1396      next = defsyms->next;
1397      free (defsyms);
1398      defsyms = next;
1399    }
1400
1401  PROGRESS (1);
1402
1403  /* Assemble it.  */
1404  perform_an_assembly_pass (argc, argv);
1405
1406  cond_finish_check (-1);
1407
1408#ifdef md_end
1409  md_end ();
1410#endif
1411
1412#if defined OBJ_ELF || defined OBJ_MAYBE_ELF
1413  if ((flag_execstack || flag_noexecstack)
1414      && OUTPUT_FLAVOR == bfd_target_elf_flavour)
1415    {
1416      segT gnustack;
1417
1418      gnustack = subseg_new (".note.GNU-stack", 0);
1419      bfd_set_section_flags (gnustack,
1420			     SEC_READONLY | (flag_execstack ? SEC_CODE : 0));
1421
1422    }
1423#endif
1424
1425  /* If we've been collecting dwarf2 .debug_line info, either for
1426     assembly debugging or on behalf of the compiler, emit it now.  */
1427  dwarf2_finish ();
1428
1429  /* If we constructed dwarf2 .eh_frame info, either via .cfi
1430     directives from the user or by the backend, emit it now.  */
1431  cfi_finish ();
1432
1433  keep_it = 0;
1434  if (seen_at_least_1_file ())
1435    {
1436      int n_warns, n_errs;
1437      char warn_msg[50];
1438      char err_msg[50];
1439
1440      write_object_file ();
1441
1442      n_warns = had_warnings ();
1443      n_errs = had_errors ();
1444
1445      sprintf (warn_msg,
1446	       ngettext ("%d warning", "%d warnings", n_warns), n_warns);
1447      sprintf (err_msg,
1448	       ngettext ("%d error", "%d errors", n_errs), n_errs);
1449      if (flag_fatal_warnings && n_warns != 0)
1450	{
1451	  if (n_errs == 0)
1452	    as_bad (_("%s, treating warnings as errors"), warn_msg);
1453	  n_errs += n_warns;
1454	}
1455
1456      if (n_errs == 0)
1457	keep_it = 1;
1458      else if (flag_always_generate_output)
1459	{
1460	  /* The -Z flag indicates that an object file should be generated,
1461	     regardless of warnings and errors.  */
1462	  keep_it = 1;
1463	  fprintf (stderr, _("%s, %s, generating bad object file\n"),
1464		   err_msg, warn_msg);
1465	}
1466    }
1467
1468  fflush (stderr);
1469
1470#ifndef NO_LISTING
1471  listing_print (listing_filename, argv_orig);
1472#endif
1473
1474  input_scrub_end ();
1475
1476  END_PROGRESS (myname);
1477
1478  /* Use xexit instead of return, because under VMS environments they
1479     may not place the same interpretation on the value given.  */
1480  if (had_errors () != 0)
1481    xexit (EXIT_FAILURE);
1482
1483  /* Only generate dependency file if assembler was successful.  */
1484  print_dependencies ();
1485
1486  xexit (EXIT_SUCCESS);
1487}
1488