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