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