MIPS: Fix XPA base and Virtualization ASE instruction handling
[deliverable/binutils-gdb.git] / gas / as.c
CommitLineData
252b5132 1/* as.c - GAS main program.
2571583a 2 Copyright (C) 1987-2017 Free Software Foundation, Inc.
252b5132
RH
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
ec2655a6 8 the Free Software Foundation; either version 3, or (at your option)
252b5132
RH
9 any later version.
10
ec2655a6
NC
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.
252b5132
RH
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
4b4da160
NC
18 Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
19 02110-1301, USA. */
252b5132 20
76b0a8c0 21/* Main program for AS; a 32-bit assembler of GNU.
33948635
NC
22 Understands command arguments.
23 Has a few routines that don't fit in other modules because they
24 are shared.
34bca508 25
33948635 26 bugs
34bca508 27
33948635
NC
28 : initialisers
29 Since no-one else says they will support them in future: I
30 don't support them now. */
252b5132 31
252b5132
RH
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"
bccba5f0 39#include "dwarf2dbg.h"
54cfded0 40#include "dw2gencfi.h"
b95d15c6 41#include "bfdver.h"
b95d15c6 42
84be4d71
ILT
43#ifdef HAVE_ITBL_CPU
44#include "itbl-ops.h"
45#else
252b5132
RH
46#define itbl_init()
47#endif
48
49#ifdef HAVE_SBRK
50#ifdef NEED_DECLARATION_SBRK
5a49b8ac 51extern void *sbrk ();
252b5132
RH
52#endif
53#endif
54
9cc92a36
NC
55#ifdef USING_CGEN
56/* Perform any cgen specific initialisation for gas. */
33948635 57extern void gas_cgen_begin (void);
9cc92a36 58#endif
252b5132 59
33948635
NC
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
76b0a8c0
KH
70/* True if a listing is wanted. */
71int listing;
252b5132 72
252b5132 73/* Type of debugging to generate. */
4dc7ead9 74enum debug_info_type debug_type = DEBUG_UNSPECIFIED;
05da4302 75int use_gnu_debug_info_extensions = 0;
252b5132 76
329e276d
NC
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
252b5132 82/* Maximum level of macro nesting. */
252b5132
RH
83int max_macro_nest = 100;
84
76b0a8c0 85/* argv[0] */
87c245cc 86static char * myname;
252b5132
RH
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
54cfded0
AM
96/* Enable verbose mode. */
97int verbose = 0;
98
b8871f35
L
99#if defined OBJ_ELF || defined OBJ_MAYBE_ELF
100int flag_use_elf_stt_common = DEFAULT_GENERATE_ELF_STT_COMMON;
101#endif
102
58e8191c 103/* Keep the output file. */
85024cd8 104static int keep_it = 0;
58e8191c 105
33948635
NC
106segT reg_section;
107segT expr_section;
108segT text_section;
109segT data_section;
110segT bss_section;
252b5132 111
33948635
NC
112/* Name of listing file. */
113static char *listing_filename = NULL;
252b5132
RH
114
115static struct defsym_list *defsyms;
116
732f54cd
JB
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};
33948635 124static struct itbl_file_list *itbl_files;
732f54cd 125#endif
252b5132 126
33948635 127static long start_time;
ef8e09a0
SB
128#ifdef HAVE_SBRK
129char *start_sbrk;
130#endif
252b5132 131
caa32fe5
NC
132static int flag_macro_alternate;
133
252b5132 134\f
252b5132
RH
135#ifdef USE_EMULATIONS
136#define EMULATION_ENVIRON "AS_EMULATION"
137
138extern struct emulation mipsbelf, mipslelf, mipself;
4c63da97 139extern struct emulation i386coff, i386elf, i386aout;
3bcbcc3d 140extern struct emulation crisaout, criself;
252b5132
RH
141
142static struct emulation *const emulations[] = { EMULATIONS };
143static const int n_emulations = sizeof (emulations) / sizeof (emulations[0]);
144
252b5132 145static void
33948635 146select_emulation_mode (int argc, char **argv)
252b5132
RH
147{
148 int i;
e0471c16
TS
149 char *p;
150 const char *em = NULL;
252b5132
RH
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
76b0a8c0 163 p = argv[i + 1];
252b5132
RH
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 *
33948635 191default_emul_bfd_name (void)
252b5132
RH
192{
193 abort ();
194 return NULL;
195}
196
197void
33948635 198common_emul_init (void)
252b5132
RH
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
4c63da97 219void
33948635 220print_version_id (void)
4c63da97
AM
221{
222 static int printed;
33948635 223
4c63da97
AM
224 if (printed)
225 return;
226 printed = 1;
227
7be1c489 228 fprintf (stderr, _("GNU assembler version %s (%s) using BFD version %s\n"),
403487ec 229 VERSION, TARGET_ALIAS, BFD_VERSION_STRING);
4c63da97
AM
230}
231
e12fe555
NC
232#ifdef DEFAULT_FLAG_COMPRESS_DEBUG
233enum compressed_debug_section_type flag_compress_debug
234 = COMPRESS_DEBUG_GABI_ZLIB;
235#endif
236
4c63da97 237static void
33948635 238show_usage (FILE * stream)
4c63da97
AM
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\
83f10cb2 248 g include general info\n\
4c63da97
AM
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\
4c63da97
AM
254 =FILE list to FILE (must be last sub-option)\n"));
255
caa32fe5
NC
256 fprintf (stream, _("\
257 --alternate initially turn on alternate macro syntax\n"));
e12fe555 258#ifdef DEFAULT_FLAG_COMPRESS_DEBUG
4c63da97 259 fprintf (stream, _("\
151411f8 260 --compress-debug-sections[={none|zlib|zlib-gnu|zlib-gabi}]\n\
e12fe555 261 compress DWARF debug sections using zlib [default]\n"));
700c4060
CC
262 fprintf (stream, _("\
263 --nocompress-debug-sections\n\
264 don't compress DWARF debug sections\n"));
e12fe555
NC
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
700c4060 273 fprintf (stream, _("\
4c63da97
AM
274 -D produce assembler debugging messages\n"));
275 fprintf (stream, _("\
700c4060
CC
276 --debug-prefix-map OLD=NEW\n\
277 map OLD to NEW in debug information\n"));
3d6b762c 278 fprintf (stream, _("\
4c63da97
AM
279 --defsym SYM=VAL define symbol SYM to given value\n"));
280#ifdef USE_EMULATIONS
281 {
282 int i;
e0471c16 283 const char *def_em;
4c63da97
AM
284
285 fprintf (stream, "\
286 --em=[");
76b0a8c0 287 for (i = 0; i < n_emulations - 1; i++)
4c63da97
AM
288 fprintf (stream, "%s | ", emulations[i]->name);
289 fprintf (stream, "%s]\n", emulations[i]->name);
290
291 def_em = getenv (EMULATION_ENVIRON);
76b0a8c0 292 if (!def_em)
4c63da97
AM
293 def_em = DEFAULT_EMULATION;
294 fprintf (stream, _("\
295 emulate output (default %s)\n"), def_em);
296 }
68d55fe3 297#endif
7be1c489 298#if defined OBJ_ELF || defined OBJ_MAYBE_ELF
68d55fe3
JJ
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"));
21be61f5
L
303 fprintf (stream, _("\
304 --size-check=[error|warning]\n\
305 ELF .size directive check (default --size-check=error)\n"));
451133ce 306 fprintf (stream, _("\
b8871f35
L
307 --elf-stt-common=[no|yes]\n\
308 generate ELF common symbols with STT_COMMON type\n"));
309 fprintf (stream, _("\
451133ce 310 --sectname-subst enable section name substitution sequences\n"));
4c63da97
AM
311#endif
312 fprintf (stream, _("\
313 -f skip whitespace and comment preprocessing\n"));
314 fprintf (stream, _("\
329e276d
NC
315 -g --gen-debug generate debugging information\n"));
316 fprintf (stream, _("\
317 --gstabs generate STABS debugging information\n"));
4c63da97 318 fprintf (stream, _("\
329e276d 319 --gstabs+ generate STABS debug info with GNU extensions\n"));
05da4302 320 fprintf (stream, _("\
329e276d 321 --gdwarf-2 generate DWARF2 debugging information\n"));
4c63da97 322 fprintf (stream, _("\
b40bf0a2
NC
323 --gdwarf-sections generate per-function section names for DWARF line information\n"));
324 fprintf (stream, _("\
4bdd3565
NC
325 --hash-size=<value> set the hash table size close to <value>\n"));
326 fprintf (stream, _("\
4c63da97
AM
327 --help show this message and exit\n"));
328 fprintf (stream, _("\
ea20a7da
CC
329 --target-help show target specific options\n"));
330 fprintf (stream, _("\
4c63da97
AM
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, _("\
2edb36e7
NC
345 -no-pad-sections do not pad the end of sections to alignment boundaries\n"));
346 fprintf (stream, _("\
4c63da97
AM
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, _("\
4bdd3565
NC
351 --reduce-memory-overheads \n\
352 prefer smaller memory use at the cost of longer\n\
353 assembly times\n"));
354 fprintf (stream, _("\
4c63da97
AM
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"));
732f54cd 368#ifdef HAVE_ITBL_CPU
4c63da97
AM
369 fprintf (stream, _("\
370 --itbl INSTTBL extend instruction set to include instructions\n\
371 matching the specifications defined in file INSTTBL\n"));
732f54cd 372#endif
4c63da97
AM
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"));
a55ff675 392 fprintf (stream, _("\
34bca508 393 @FILE read options from FILE\n"));
4c63da97
AM
394
395 md_show_usage (stream);
396
c20f4f8c 397 fputc ('\n', stream);
92f01d61
JM
398
399 if (REPORT_BUGS_TO[0] && stream == stdout)
400 fprintf (stream, _("Report bugs to %s\n"), REPORT_BUGS_TO);
4c63da97
AM
401}
402
76b0a8c0
KH
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. */
252b5132
RH
411
412static void
33948635 413parse_args (int * pargc, char *** pargv)
252b5132 414{
33948635
NC
415 int old_argc;
416 int new_argc;
417 char ** old_argv;
418 char ** new_argv;
252b5132
RH
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. */
252b5132 423 char *shortopts;
5a38dc70 424 extern const char *md_shortopts;
33948635
NC
425 static const char std_shortopts[] =
426 {
30a2b4ef 427 '-', 'J',
252b5132 428#ifndef WORKING_DOT_WORD
30a2b4ef
KH
429 /* -K is not meaningful if .word is not being hacked. */
430 'K',
252b5132 431#endif
8f94ae4d 432 'L', 'M', 'R', 'W', 'Z', 'a', ':', ':', 'D', 'f', 'g', ':',':', 'I', ':', 'o', ':',
252b5132 433#ifndef VMS
30a2b4ef
KH
434 /* -v takes an argument on VMS, so we don't make it a generic
435 option. */
436 'v',
252b5132 437#endif
30a2b4ef 438 'w', 'X',
732f54cd 439#ifdef HAVE_ITBL_CPU
33948635 440 /* New option for extending instruction set (see also --itbl below). */
30a2b4ef 441 't', ':',
732f54cd 442#endif
30a2b4ef
KH
443 '\0'
444 };
252b5132
RH
445 struct option *longopts;
446 extern struct option md_longopts[];
447 extern size_t md_longopts_size;
33948635
NC
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,
3d6b762c 458 OPTION_DEBUG_PREFIX_MAP,
33948635 459 OPTION_DEFSYM,
33948635
NC
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,
05da4302 466 OPTION_GSTABS_PLUS,
329e276d 467 OPTION_GDWARF2,
b40bf0a2 468 OPTION_GDWARF_SECTIONS,
33948635
NC
469 OPTION_STRIP_LOCAL_ABSOLUTE,
470 OPTION_TRADITIONAL_FORMAT,
33948635
NC
471 OPTION_WARN,
472 OPTION_TARGET_HELP,
473 OPTION_EXECSTACK,
474 OPTION_NOEXECSTACK,
21be61f5 475 OPTION_SIZE_CHECK,
b8871f35 476 OPTION_ELF_STT_COMMON,
451133ce 477 OPTION_SECTNAME_SUBST,
caa32fe5 478 OPTION_ALTERNATE,
5a14ab23 479 OPTION_AL,
4bdd3565
NC
480 OPTION_HASH_TABLE_SIZE,
481 OPTION_REDUCE_MEMORY_OVERHEADS,
0acf065b
CC
482 OPTION_WARN_FATAL,
483 OPTION_COMPRESS_DEBUG,
2edb36e7
NC
484 OPTION_NOCOMPRESS_DEBUG,
485 OPTION_NO_PAD_SECTIONS /* = STD_BASE + 40 */
329e276d
NC
486 /* When you add options here, check that they do
487 not collide with OPTION_MD_BASE. See as.h. */
33948635 488 };
34bca508 489
33948635
NC
490 static const struct option std_longopts[] =
491 {
329e276d 492 /* Note: commas are placed at the start of the line rather than
cc643b88 493 the end of the preceding line so that it is simpler to
329e276d
NC
494 selectively add and remove lines from this list. */
495 {"alternate", no_argument, NULL, OPTION_ALTERNATE}
fb767913
NC
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'}
5a14ab23
L
501 /* Handle -al=<FILE>. */
502 ,{"al", optional_argument, NULL, OPTION_AL}
151411f8 503 ,{"compress-debug-sections", optional_argument, NULL, OPTION_COMPRESS_DEBUG}
0acf065b 504 ,{"nocompress-debug-sections", no_argument, NULL, OPTION_NOCOMPRESS_DEBUG}
3d6b762c 505 ,{"debug-prefix-map", required_argument, NULL, OPTION_DEBUG_PREFIX_MAP}
329e276d
NC
506 ,{"defsym", required_argument, NULL, OPTION_DEFSYM}
507 ,{"dump-config", no_argument, NULL, OPTION_DUMPCONFIG}
508 ,{"emulation", required_argument, NULL, OPTION_EMULATION}
7be1c489 509#if defined OBJ_ELF || defined OBJ_MAYBE_ELF
329e276d
NC
510 ,{"execstack", no_argument, NULL, OPTION_EXECSTACK}
511 ,{"noexecstack", no_argument, NULL, OPTION_NOEXECSTACK}
21be61f5 512 ,{"size-check", required_argument, NULL, OPTION_SIZE_CHECK}
b8871f35 513 ,{"elf-stt-common", required_argument, NULL, OPTION_ELF_STT_COMMON}
451133ce 514 ,{"sectname-subst", no_argument, NULL, OPTION_SECTNAME_SUBST}
329e276d
NC
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}
b40bf0a2 521 ,{"gdwarf-sections", no_argument, NULL, OPTION_GDWARF_SECTIONS}
329e276d
NC
522 ,{"gen-debug", no_argument, NULL, 'g'}
523 ,{"gstabs", no_argument, NULL, OPTION_GSTABS}
524 ,{"gstabs+", no_argument, NULL, OPTION_GSTABS_PLUS}
4bdd3565 525 ,{"hash-size", required_argument, NULL, OPTION_HASH_TABLE_SIZE}
329e276d 526 ,{"help", no_argument, NULL, OPTION_HELP}
732f54cd 527#ifdef HAVE_ITBL_CPU
252b5132
RH
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. */
732f54cd
JB
534 ,{"itbl", required_argument, NULL, 't'}
535#endif
329e276d
NC
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}
2edb36e7 548 ,{"no-pad-sections", no_argument, NULL, OPTION_NO_PAD_SECTIONS}
329e276d 549 ,{"no-warn", no_argument, NULL, 'W'}
4bdd3565 550 ,{"reduce-memory-overheads", no_argument, NULL, OPTION_REDUCE_MEMORY_OVERHEADS}
329e276d
NC
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}
252b5132
RH
558 };
559
beb2de9b
AC
560 /* Construct the option lists from the standard list and the target
561 dependent list. Include space for an extra NULL option and
76b0a8c0 562 always NULL terminate. */
252b5132 563 shortopts = concat (std_shortopts, md_shortopts, (char *) NULL);
1e9cc1c2
NC
564 longopts = (struct option *) xmalloc (sizeof (std_longopts)
565 + md_longopts_size + sizeof (struct option));
252b5132 566 memcpy (longopts, std_longopts, sizeof (std_longopts));
33948635
NC
567 memcpy (((char *) longopts) + sizeof (std_longopts), md_longopts, md_longopts_size);
568 memset (((char *) longopts) + sizeof (std_longopts) + md_longopts_size,
beb2de9b 569 0, sizeof (struct option));
252b5132
RH
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. */
add39d23 576 new_argv = XNEWVEC (char *, old_argc + 1);
252b5132
RH
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
47eebc20 600 it explicitly here before deciding we've gotten a bad argument. */
252b5132
RH
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)
30a2b4ef 609 new_argv[new_argc++] = optarg, new_argv[new_argc] = NULL;
252b5132
RH
610 else
611#else
612 case 'v':
613#endif
614 case OPTION_VERBOSE:
615 print_version_id ();
54cfded0 616 verbose = 1;
252b5132
RH
617 break;
618 }
329e276d
NC
619 else
620 as_bad (_("unrecognized option -%c%s"), optc, optarg ? optarg : "");
76b0a8c0 621 /* Fall through. */
252b5132
RH
622
623 case '?':
624 exit (EXIT_FAILURE);
625
626 case 1: /* File name. */
627 if (!strcmp (optarg, "-"))
97830986 628 optarg = (char *) "";
252b5132
RH
629 new_argv[new_argc++] = optarg;
630 new_argv[new_argc] = NULL;
631 break;
ef99799a 632
ea20a7da 633 case OPTION_TARGET_HELP:
411863a4
KH
634 md_show_usage (stdout);
635 exit (EXIT_SUCCESS);
252b5132
RH
636
637 case OPTION_HELP:
638 show_usage (stdout);
639 exit (EXIT_SUCCESS);
640
641 case OPTION_NOCPP:
642 break;
643
2edb36e7
NC
644 case OPTION_NO_PAD_SECTIONS:
645 do_not_pad_sections_to_alignment = 1;
646 break;
647
252b5132
RH
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. */
6c19f338 662 printf (_("GNU assembler %s\n"), BFD_VERSION_STRING);
2571583a 663 printf (_("Copyright (C) 2017 Free Software Foundation, Inc.\n"));
252b5132
RH
664 printf (_("\
665This program is free software; you may redistribute it under the terms of\n\
ec2655a6
NC
666the GNU General Public License version 3 or later.\n\
667This program has absolutely no warranty.\n"));
9004b6bd
AB
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
252b5132
RH
673 printf (_("This assembler was configured for a target of `%s'.\n"),
674 TARGET_ALIAS);
9004b6bd 675#endif
252b5132
RH
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
0acf065b 699 case OPTION_COMPRESS_DEBUG:
151411f8
L
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)
19a7fe52 706 flag_compress_debug = COMPRESS_DEBUG_GABI_ZLIB;
151411f8
L
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
19a7fe52 720 flag_compress_debug = COMPRESS_DEBUG_GABI_ZLIB;
0acf065b
CC
721 break;
722
723 case OPTION_NOCOMPRESS_DEBUG:
151411f8 724 flag_compress_debug = COMPRESS_DEBUG_NONE;
0acf065b
CC
725 break;
726
3d6b762c
JM
727 case OPTION_DEBUG_PREFIX_MAP:
728 add_debug_prefix_map (optarg);
729 break;
730
252b5132
RH
731 case OPTION_DEFSYM:
732 {
733 char *s;
a38cf1db 734 valueT i;
252b5132
RH
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';
a38cf1db 742 i = bfd_scan_vma (s, (const char **) NULL, 0);
add39d23 743 n = XNEW (struct defsym_list);
252b5132
RH
744 n->next = defsyms;
745 n->name = optarg;
746 n->value = i;
747 defsyms = n;
748 }
749 break;
750
732f54cd 751#ifdef HAVE_ITBL_CPU
252b5132
RH
752 case 't':
753 {
76b0a8c0
KH
754 /* optarg is the name of the file containing the instruction
755 formats, opcodes, register names, etc. */
252b5132
RH
756 struct itbl_file_list *n;
757
758 if (optarg == NULL)
759 {
0e389e77 760 as_warn (_("no file name following -t option"));
252b5132
RH
761 break;
762 }
76b0a8c0 763
325801bd 764 n = XNEW (struct itbl_file_list);
252b5132
RH
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
76b0a8c0
KH
770 table. If multiple instruction tables are specified, the
771 information from this table gets appended onto the existing
772 internal table. */
252b5132
RH
773 itbl_files->name = xstrdup (optarg);
774 if (itbl_parse (itbl_files->name) != 0)
0e389e77
AM
775 as_fatal (_("failed to read instruction table %s\n"),
776 itbl_files->name);
252b5132
RH
777 }
778 break;
732f54cd 779#endif
252b5132
RH
780
781 case OPTION_DEPFILE:
782 start_dependencies (optarg);
783 break;
784
329e276d 785 case 'g':
8f94ae4d
NC
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
329e276d
NC
788 the backend to decide if it wants to process it. */
789 if ( old_argv[optind - 1][1] == 'g'
329e276d
NC
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
05da4302
NC
801 case OPTION_GSTABS_PLUS:
802 use_gnu_debug_info_extensions = 1;
803 /* Fall through. */
252b5132
RH
804 case OPTION_GSTABS:
805 debug_type = DEBUG_STABS;
806 break;
76b0a8c0 807
fac0d250
RH
808 case OPTION_GDWARF2:
809 debug_type = DEBUG_DWARF2;
810 break;
811
b40bf0a2
NC
812 case OPTION_GDWARF_SECTIONS:
813 flag_dwarf_sections = TRUE;
814 break;
815
252b5132
RH
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
252b5132
RH
825 case 'L':
826 flag_keep_locals = 1;
827 break;
828
829 case OPTION_LISTING_LHS_WIDTH:
76b0a8c0 830 listing_lhs_width = atoi (optarg);
252b5132
RH
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 {
76b0a8c0 836 int tmp = atoi (optarg);
329e276d 837
252b5132
RH
838 if (tmp > listing_lhs_width)
839 listing_lhs_width_second = tmp;
840 }
841 break;
842 case OPTION_LISTING_RHS_WIDTH:
76b0a8c0 843 listing_rhs_width = atoi (optarg);
252b5132
RH
844 break;
845 case OPTION_LISTING_CONT_LINES:
76b0a8c0 846 listing_lhs_cont_lines = atoi (optarg);
252b5132
RH
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
2bdd6cf5
GK
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
7be1c489 874#if defined OBJ_ELF || defined OBJ_MAYBE_ELF
68d55fe3
JJ
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;
21be61f5
L
884
885 case OPTION_SIZE_CHECK:
886 if (strcasecmp (optarg, "error") == 0)
a90fb5e3 887 flag_allow_nonconst_size = FALSE;
21be61f5 888 else if (strcasecmp (optarg, "warning") == 0)
a90fb5e3 889 flag_allow_nonconst_size = TRUE;
21be61f5
L
890 else
891 as_fatal (_("Invalid --size-check= option: `%s'"), optarg);
892 break;
451133ce 893
b8871f35
L
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
451133ce
NP
904 case OPTION_SECTNAME_SUBST:
905 flag_sectname_subst = 1;
906 break;
68d55fe3 907#endif
252b5132
RH
908 case 'Z':
909 flag_always_generate_output = 1;
910 break;
911
5a14ab23
L
912 case OPTION_AL:
913 listing |= LISTING_LISTING;
914 if (optarg)
915 listing_filename = xstrdup (optarg);
916 break;
917
caa32fe5
NC
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
252b5132
RH
931 case 'a':
932 if (optarg)
933 {
fb767913
NC
934 if (optarg != old_argv[optind] && optarg[-1] == '=')
935 --optarg;
936
7f6d05e8
CP
937 if (md_parse_option (optc, optarg) != 0)
938 break;
939
252b5132
RH
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;
83f10cb2
NC
950 case 'g':
951 listing |= LISTING_GENERAL;
952 break;
252b5132
RH
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':
76b0a8c0
KH
984 /* DEBUG is implemented: it debugs different
985 things from other people's assemblers. */
252b5132
RH
986 flag_debug = 1;
987 break;
988
989 case 'f':
990 flag_no_comments = 1;
991 break;
992
993 case 'I':
76b0a8c0 994 { /* Include file directory. */
252b5132 995 char *temp = xstrdup (optarg);
329e276d 996
252b5132
RH
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':
76b0a8c0 1009 /* -X means treat warnings as errors. */
252b5132 1010 break;
4bdd3565
NC
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 {
f7a568ea 1020 unsigned long new_size;
4bdd3565
NC
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 }
252b5132
RH
1029 }
1030 }
1031
1032 free (shortopts);
1033 free (longopts);
1034
1035 *pargc = new_argc;
1036 *pargv = new_argv;
acebd4ce
AS
1037
1038#ifdef md_after_parse_args
1039 md_after_parse_args ();
1040#endif
252b5132
RH
1041}
1042
33948635
NC
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"),
ef8e09a0 1055 myname, (long) (lim - start_sbrk));
33948635 1056#endif
252b5132 1057
33948635
NC
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
0d474464
L
1072static void
1073close_output_file (void)
1074{
1075 output_file_close (out_file_name);
58e8191c
SA
1076 if (!keep_it)
1077 unlink_if_ordinary (out_file_name);
0d474464 1078}
0d474464 1079
33948635
NC
1080/* The interface between the macro code and gas expression handling. */
1081
39a45edc
AM
1082static size_t
1083macro_expr (const char *emsg, size_t idx, sb *in, offsetT *val)
33948635
NC
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;
9497f5ac 1092 expression_and_evaluate (&ex);
33948635
NC
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
39a45edc 1099 *val = ex.X_add_number;
33948635
NC
1100
1101 return idx;
1102}
1103\f
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;
bcf0aac6 1117#ifndef OBJ_MACH_O
33948635 1118 flagword applicable;
bcf0aac6 1119#endif
33948635
NC
1120
1121 need_pass_2 = 0;
1122
bcf0aac6 1123#ifndef OBJ_MACH_O
33948635
NC
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;
bcf0aac6 1140#endif
33948635
NC
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
bcf0aac6 1146#ifndef OBJ_MACH_O
33948635 1147 subseg_set (text_section, 0);
bcf0aac6 1148#endif
33948635
NC
1149
1150 /* This may add symbol table entries, which requires having an open BFD,
7be1c489 1151 and sections already created. */
33948635
NC
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\f
a80076a1 1180
76b0a8c0 1181int
33948635 1182main (int argc, char ** argv)
252b5132 1183{
83f10cb2
NC
1184 char ** argv_orig = argv;
1185
252b5132 1186 int macro_strip_at;
252b5132
RH
1187
1188 start_time = get_run_time ();
1ec4b9f2 1189 signal_init ();
ef8e09a0
SB
1190#ifdef HAVE_SBRK
1191 start_sbrk = (char *) sbrk (0);
1192#endif
252b5132
RH
1193
1194#if defined (HAVE_SETLOCALE) && defined (HAVE_LC_MESSAGES)
1195 setlocale (LC_MESSAGES, "");
3882b010
L
1196#endif
1197#if defined (HAVE_SETLOCALE)
1198 setlocale (LC_CTYPE, "");
252b5132
RH
1199#endif
1200 bindtextdomain (PACKAGE, LOCALEDIR);
1201 textdomain (PACKAGE);
1202
1203 if (debug_memory)
091e58c1 1204 chunksize = 64;
252b5132
RH
1205
1206#ifdef HOST_SPECIAL_INIT
1207 HOST_SPECIAL_INIT (argc, argv);
1208#endif
1209
1210 myname = argv[0];
1211 xmalloc_set_program_name (myname);
1212
869b9d07
MM
1213 expandargv (&argc, &argv);
1214
252b5132
RH
1215 START_PROGRESS (myname, 0);
1216
1217#ifndef OBJ_DEFAULT_OUTPUT_FILE_NAME
1218#define OBJ_DEFAULT_OUTPUT_FILE_NAME "a.out"
1219#endif
1220
1221 out_file_name = OBJ_DEFAULT_OUTPUT_FILE_NAME;
1222
1223 hex_init ();
252b5132
RH
1224 bfd_init ();
1225 bfd_set_error_program_name (myname);
252b5132
RH
1226
1227#ifdef USE_EMULATIONS
1228 select_emulation_mode (argc, argv);
1229#endif
1230
1231 PROGRESS (1);
f7a568ea
NC
1232 /* Call parse_args before any of the init/begin functions
1233 so that switches like --hash-size can be honored. */
1234 parse_args (&argc, &argv);
252b5132
RH
1235 symbol_begin ();
1236 frag_init ();
1237 subsegs_begin ();
252b5132
RH
1238 read_begin ();
1239 input_scrub_begin ();
1240 expr_begin ();
1241
0d474464
L
1242 /* It has to be called after dump_statistics (). */
1243 xatexit (close_output_file);
0d474464 1244
252b5132
RH
1245 if (flag_print_statistics)
1246 xatexit (dump_statistics);
1247
252b5132
RH
1248 macro_strip_at = 0;
1249#ifdef TC_I960
1250 macro_strip_at = flag_mri;
1251#endif
252b5132 1252
caa32fe5 1253 macro_init (flag_macro_alternate, flag_mri, macro_strip_at, macro_expr);
252b5132
RH
1254
1255 PROGRESS (1);
1256
252b5132 1257 output_file_create (out_file_name);
9c2799c2 1258 gas_assert (stdoutput != 0);
252b5132 1259
4a826962
MR
1260 dot_symbol_init ();
1261
252b5132
RH
1262#ifdef tc_init_after_args
1263 tc_init_after_args ();
1264#endif
1265
1266 itbl_init ();
1267
1e9cc1c2
NC
1268 dwarf2_init ();
1269
6885131b
AM
1270 local_symbol_make (".gasversion.", absolute_section,
1271 BFD_VERSION / 10000UL, &predefined_address_frag);
00ce9deb 1272
252b5132
RH
1273 /* Now that we have fully initialized, and have created the output
1274 file, define any symbols requested by --defsym command line
1275 arguments. */
1276 while (defsyms != NULL)
1277 {
1278 symbolS *sym;
1279 struct defsym_list *next;
1280
1281 sym = symbol_new (defsyms->name, absolute_section, defsyms->value,
1282 &zero_address_frag);
bf083c64
NC
1283 /* Make symbols defined on the command line volatile, so that they
1284 can be redefined inside a source file. This makes this assembler's
1285 behaviour compatible with earlier versions, but it may not be
1286 completely intuitive. */
1287 S_SET_VOLATILE (sym);
252b5132
RH
1288 symbol_table_insert (sym);
1289 next = defsyms->next;
1290 free (defsyms);
1291 defsyms = next;
1292 }
1293
1294 PROGRESS (1);
1295
76b0a8c0
KH
1296 /* Assemble it. */
1297 perform_an_assembly_pass (argc, argv);
252b5132
RH
1298
1299 cond_finish_check (-1);
1300
1301#ifdef md_end
1302 md_end ();
1303#endif
104d59d1 1304
7be1c489 1305#if defined OBJ_ELF || defined OBJ_MAYBE_ELF
68d55fe3
JJ
1306 if ((flag_execstack || flag_noexecstack)
1307 && OUTPUT_FLAVOR == bfd_target_elf_flavour)
1308 {
1309 segT gnustack;
1310
1311 gnustack = subseg_new (".note.GNU-stack", 0);
1312 bfd_set_section_flags (stdoutput, gnustack,
1313 SEC_READONLY | (flag_execstack ? SEC_CODE : 0));
34bca508 1314
68d55fe3
JJ
1315 }
1316#endif
1317
43ad3147 1318 /* If we've been collecting dwarf2 .debug_line info, either for
39bb5fe6
RH
1319 assembly debugging or on behalf of the compiler, emit it now. */
1320 dwarf2_finish ();
1321
34bca508 1322 /* If we constructed dwarf2 .eh_frame info, either via .cfi
a4447b93 1323 directives from the user or by the backend, emit it now. */
54cfded0 1324 cfi_finish ();
54cfded0 1325
85024cd8
AM
1326 keep_it = 0;
1327 if (seen_at_least_1_file ())
1328 {
1329 int n_warns, n_errs;
1330 char warn_msg[50];
1331 char err_msg[50];
1332
1333 write_object_file ();
1334
1335 n_warns = had_warnings ();
1336 n_errs = had_errors ();
1337
1338 if (n_warns == 1)
1339 sprintf (warn_msg, _("%d warning"), n_warns);
1340 else
1341 sprintf (warn_msg, _("%d warnings"), n_warns);
1342 if (n_errs == 1)
1343 sprintf (err_msg, _("%d error"), n_errs);
1344 else
1345 sprintf (err_msg, _("%d errors"), n_errs);
252b5132 1346
85024cd8
AM
1347 if (flag_fatal_warnings && n_warns != 0)
1348 {
1349 if (n_errs == 0)
1350 as_bad (_("%s, treating warnings as errors"), warn_msg);
1351 n_errs += n_warns;
1352 }
252b5132 1353
85024cd8
AM
1354 if (n_errs == 0)
1355 keep_it = 1;
1356 else if (flag_always_generate_output)
1357 {
1358 /* The -Z flag indicates that an object file should be generated,
1359 regardless of warnings and errors. */
1360 keep_it = 1;
1361 fprintf (stderr, _("%s, %s, generating bad object file\n"),
1362 err_msg, warn_msg);
1363 }
1364 }
252b5132 1365
7f6a71ff
JM
1366 fflush (stderr);
1367
252b5132 1368#ifndef NO_LISTING
83f10cb2 1369 listing_print (listing_filename, argv_orig);
252b5132
RH
1370#endif
1371
252b5132
RH
1372 input_scrub_end ();
1373
1374 END_PROGRESS (myname);
1375
1376 /* Use xexit instead of return, because under VMS environments they
1377 may not place the same interpretation on the value given. */
85024cd8 1378 if (had_errors () != 0)
252b5132
RH
1379 xexit (EXIT_FAILURE);
1380
1381 /* Only generate dependency file if assembler was successful. */
1382 print_dependencies ();
1383
1384 xexit (EXIT_SUCCESS);
1385}
This page took 0.813908 seconds and 4 git commands to generate.