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