1 /* as.c - GAS main program.
2 Copyright (C) 1987-2017 Free Software Foundation, Inc.
4 This file is part of GAS, the GNU Assembler.
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)
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.
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
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
29 Since no-one else says they will support them in future: I
30 don't support them now. */
36 #include "output-file.h"
39 #include "dwarf2dbg.h"
40 #include "dw2gencfi.h"
50 /* Perform any cgen specific initialisation for gas. */
51 extern void gas_cgen_begin (void);
54 /* We build a list of defsyms as we read the options, and then define
55 them after we have initialized everything. */
58 struct defsym_list
*next
;
64 /* True if a listing is wanted. */
67 /* Type of debugging to generate. */
68 enum debug_info_type debug_type
= DEBUG_UNSPECIFIED
;
69 int use_gnu_debug_info_extensions
= 0;
71 #ifndef MD_DEBUG_FORMAT_SELECTOR
72 #define MD_DEBUG_FORMAT_SELECTOR NULL
74 static enum debug_info_type (*md_debug_format_selector
) (int *) = MD_DEBUG_FORMAT_SELECTOR
;
76 /* Maximum level of macro nesting. */
77 int max_macro_nest
= 100;
82 /* The default obstack chunk size. If we set this to zero, the
83 obstack code will use whatever will fit in a 4096 byte block. */
86 /* To monitor memory allocation more effectively, make this non-zero.
87 Then the chunk sizes for gas and bfd will be reduced. */
90 /* Enable verbose mode. */
93 #if defined OBJ_ELF || defined OBJ_MAYBE_ELF
94 int flag_use_elf_stt_common
= DEFAULT_GENERATE_ELF_STT_COMMON
;
97 /* Keep the output file. */
98 static int keep_it
= 0;
106 /* Name of listing file. */
107 static char *listing_filename
= NULL
;
109 static struct defsym_list
*defsyms
;
112 /* Keep a record of the itbl files we read in. */
113 struct itbl_file_list
115 struct itbl_file_list
*next
;
118 static struct itbl_file_list
*itbl_files
;
121 static long start_time
;
123 static int flag_macro_alternate
;
126 #ifdef USE_EMULATIONS
127 #define EMULATION_ENVIRON "AS_EMULATION"
129 extern struct emulation mipsbelf
, mipslelf
, mipself
;
130 extern struct emulation i386coff
, i386elf
, i386aout
;
131 extern struct emulation crisaout
, criself
;
133 static struct emulation
*const emulations
[] = { EMULATIONS
};
134 static const int n_emulations
= sizeof (emulations
) / sizeof (emulations
[0]);
137 select_emulation_mode (int argc
, char **argv
)
141 const char *em
= NULL
;
143 for (i
= 1; i
< argc
; i
++)
144 if (!strncmp ("--em", argv
[i
], 4))
150 p
= strchr (argv
[i
], '=');
157 as_fatal (_("missing emulation mode name"));
162 em
= getenv (EMULATION_ENVIRON
);
164 em
= DEFAULT_EMULATION
;
168 for (i
= 0; i
< n_emulations
; i
++)
169 if (!strcmp (emulations
[i
]->name
, em
))
171 if (i
== n_emulations
)
172 as_fatal (_("unrecognized emulation name `%s'"), em
);
173 this_emulation
= emulations
[i
];
176 this_emulation
= emulations
[0];
178 this_emulation
->init ();
182 default_emul_bfd_name (void)
189 common_emul_init (void)
191 this_format
= this_emulation
->format
;
193 if (this_emulation
->leading_underscore
== 2)
194 this_emulation
->leading_underscore
= this_format
->dfl_leading_underscore
;
196 if (this_emulation
->default_endian
!= 2)
197 target_big_endian
= this_emulation
->default_endian
;
199 if (this_emulation
->fake_label_name
== 0)
201 if (this_emulation
->leading_underscore
)
202 this_emulation
->fake_label_name
= "L0\001";
204 /* What other parameters should we test? */
205 this_emulation
->fake_label_name
= ".L0\001";
211 print_version_id (void)
219 fprintf (stderr
, _("GNU assembler version %s (%s) using BFD version %s\n"),
220 VERSION
, TARGET_ALIAS
, BFD_VERSION_STRING
);
223 #ifdef DEFAULT_FLAG_COMPRESS_DEBUG
224 enum compressed_debug_section_type flag_compress_debug
225 = COMPRESS_DEBUG_GABI_ZLIB
;
229 show_usage (FILE * stream
)
231 fprintf (stream
, _("Usage: %s [option...] [asmfile...]\n"), myname
);
233 fprintf (stream
, _("\
235 -a[sub-option...] turn on listings\n\
236 Sub-options [default hls]:\n\
237 c omit false conditionals\n\
238 d omit debugging directives\n\
239 g include general info\n\
240 h include high-level source\n\
241 l include assembly\n\
242 m include macro expansions\n\
243 n omit forms processing\n\
245 =FILE list to FILE (must be last sub-option)\n"));
247 fprintf (stream
, _("\
248 --alternate initially turn on alternate macro syntax\n"));
249 #ifdef DEFAULT_FLAG_COMPRESS_DEBUG
250 fprintf (stream
, _("\
251 --compress-debug-sections[={none|zlib|zlib-gnu|zlib-gabi}]\n\
252 compress DWARF debug sections using zlib [default]\n"));
253 fprintf (stream
, _("\
254 --nocompress-debug-sections\n\
255 don't compress DWARF debug sections\n"));
257 fprintf (stream
, _("\
258 --compress-debug-sections[={none|zlib|zlib-gnu|zlib-gabi}]\n\
259 compress DWARF debug sections using zlib\n"));
260 fprintf (stream
, _("\
261 --nocompress-debug-sections\n\
262 don't compress DWARF debug sections [default]\n"));
264 fprintf (stream
, _("\
265 -D produce assembler debugging messages\n"));
266 fprintf (stream
, _("\
267 --debug-prefix-map OLD=NEW\n\
268 map OLD to NEW in debug information\n"));
269 fprintf (stream
, _("\
270 --defsym SYM=VAL define symbol SYM to given value\n"));
271 #ifdef USE_EMULATIONS
278 for (i
= 0; i
< n_emulations
- 1; i
++)
279 fprintf (stream
, "%s | ", emulations
[i
]->name
);
280 fprintf (stream
, "%s]\n", emulations
[i
]->name
);
282 def_em
= getenv (EMULATION_ENVIRON
);
284 def_em
= DEFAULT_EMULATION
;
285 fprintf (stream
, _("\
286 emulate output (default %s)\n"), def_em
);
289 #if defined OBJ_ELF || defined OBJ_MAYBE_ELF
290 fprintf (stream
, _("\
291 --execstack require executable stack for this object\n"));
292 fprintf (stream
, _("\
293 --noexecstack don't require executable stack for this object\n"));
294 fprintf (stream
, _("\
295 --size-check=[error|warning]\n\
296 ELF .size directive check (default --size-check=error)\n"));
297 fprintf (stream
, _("\
298 --elf-stt-common=[no|yes]\n\
299 generate ELF common symbols with STT_COMMON type\n"));
300 fprintf (stream
, _("\
301 --sectname-subst enable section name substitution sequences\n"));
303 fprintf (stream
, _("\
304 -f skip whitespace and comment preprocessing\n"));
305 fprintf (stream
, _("\
306 -g --gen-debug generate debugging information\n"));
307 fprintf (stream
, _("\
308 --gstabs generate STABS debugging information\n"));
309 fprintf (stream
, _("\
310 --gstabs+ generate STABS debug info with GNU extensions\n"));
311 fprintf (stream
, _("\
312 --gdwarf-2 generate DWARF2 debugging information\n"));
313 fprintf (stream
, _("\
314 --gdwarf-sections generate per-function section names for DWARF line information\n"));
315 fprintf (stream
, _("\
316 --hash-size=<value> set the hash table size close to <value>\n"));
317 fprintf (stream
, _("\
318 --help show this message and exit\n"));
319 fprintf (stream
, _("\
320 --target-help show target specific options\n"));
321 fprintf (stream
, _("\
322 -I DIR add DIR to search list for .include directives\n"));
323 fprintf (stream
, _("\
324 -J don't warn about signed overflow\n"));
325 fprintf (stream
, _("\
326 -K warn when differences altered for long displacements\n"));
327 fprintf (stream
, _("\
328 -L,--keep-locals keep local symbols (e.g. starting with `L')\n"));
329 fprintf (stream
, _("\
330 -M,--mri assemble in MRI compatibility mode\n"));
331 fprintf (stream
, _("\
332 --MD FILE write dependency information in FILE (default none)\n"));
333 fprintf (stream
, _("\
335 fprintf (stream
, _("\
336 -no-pad-sections do not pad the end of sections to alignment boundaries\n"));
337 fprintf (stream
, _("\
338 -o OBJFILE name the object-file output OBJFILE (default a.out)\n"));
339 fprintf (stream
, _("\
340 -R fold data section into text section\n"));
341 fprintf (stream
, _("\
342 --reduce-memory-overheads \n\
343 prefer smaller memory use at the cost of longer\n\
345 fprintf (stream
, _("\
346 --statistics print various measured statistics from execution\n"));
347 fprintf (stream
, _("\
348 --strip-local-absolute strip local absolute symbols\n"));
349 fprintf (stream
, _("\
350 --traditional-format Use same format as native assembler when possible\n"));
351 fprintf (stream
, _("\
352 --version print assembler version number and exit\n"));
353 fprintf (stream
, _("\
354 -W --no-warn suppress warnings\n"));
355 fprintf (stream
, _("\
356 --warn don't suppress warnings\n"));
357 fprintf (stream
, _("\
358 --fatal-warnings treat warnings as errors\n"));
360 fprintf (stream
, _("\
361 --itbl INSTTBL extend instruction set to include instructions\n\
362 matching the specifications defined in file INSTTBL\n"));
364 fprintf (stream
, _("\
366 fprintf (stream
, _("\
368 fprintf (stream
, _("\
369 -Z generate object file even after errors\n"));
370 fprintf (stream
, _("\
371 --listing-lhs-width set the width in words of the output data column of\n\
373 fprintf (stream
, _("\
374 --listing-lhs-width2 set the width in words of the continuation lines\n\
375 of the output data column; ignored if smaller than\n\
376 the width of the first line\n"));
377 fprintf (stream
, _("\
378 --listing-rhs-width set the max width in characters of the lines from\n\
379 the source file\n"));
380 fprintf (stream
, _("\
381 --listing-cont-lines set the maximum number of continuation lines used\n\
382 for the output data column of the listing\n"));
383 fprintf (stream
, _("\
384 @FILE read options from FILE\n"));
386 md_show_usage (stream
);
388 fputc ('\n', stream
);
390 if (REPORT_BUGS_TO
[0] && stream
== stdout
)
391 fprintf (stream
, _("Report bugs to %s\n"), REPORT_BUGS_TO
);
394 /* Since it is easy to do here we interpret the special arg "-"
395 to mean "use stdin" and we set that argv[] pointing to "".
396 After we have munged argv[], the only things left are source file
397 name(s) and ""(s) denoting stdin. These file names are used
398 (perhaps more than once) later.
400 check for new machine-dep cmdline options in
401 md_parse_option definitions in config/tc-*.c. */
404 parse_args (int * pargc
, char *** pargv
)
410 /* Starting the short option string with '-' is for programs that
411 expect options and other ARGV-elements in any order and that care about
412 the ordering of the two. We describe each non-option ARGV-element
413 as if it were the argument of an option with character code 1. */
415 extern const char *md_shortopts
;
416 static const char std_shortopts
[] =
419 #ifndef WORKING_DOT_WORD
420 /* -K is not meaningful if .word is not being hacked. */
423 'L', 'M', 'R', 'W', 'Z', 'a', ':', ':', 'D', 'f', 'g', ':',':', 'I', ':', 'o', ':',
425 /* -v takes an argument on VMS, so we don't make it a generic
431 /* New option for extending instruction set (see also --itbl below). */
436 struct option
*longopts
;
437 extern struct option md_longopts
[];
438 extern size_t md_longopts_size
;
439 /* Codes used for the long options with no short synonyms. */
442 OPTION_HELP
= OPTION_STD_BASE
,
449 OPTION_DEBUG_PREFIX_MAP
,
451 OPTION_LISTING_LHS_WIDTH
,
452 OPTION_LISTING_LHS_WIDTH2
,
453 OPTION_LISTING_RHS_WIDTH
,
454 OPTION_LISTING_CONT_LINES
,
459 OPTION_GDWARF_SECTIONS
,
460 OPTION_STRIP_LOCAL_ABSOLUTE
,
461 OPTION_TRADITIONAL_FORMAT
,
467 OPTION_ELF_STT_COMMON
,
468 OPTION_SECTNAME_SUBST
,
471 OPTION_HASH_TABLE_SIZE
,
472 OPTION_REDUCE_MEMORY_OVERHEADS
,
474 OPTION_COMPRESS_DEBUG
,
475 OPTION_NOCOMPRESS_DEBUG
,
476 OPTION_NO_PAD_SECTIONS
/* = STD_BASE + 40 */
477 /* When you add options here, check that they do
478 not collide with OPTION_MD_BASE. See as.h. */
481 static const struct option std_longopts
[] =
483 /* Note: commas are placed at the start of the line rather than
484 the end of the preceding line so that it is simpler to
485 selectively add and remove lines from this list. */
486 {"alternate", no_argument
, NULL
, OPTION_ALTERNATE
}
487 /* The entry for "a" is here to prevent getopt_long_only() from
488 considering that -a is an abbreviation for --alternate. This is
489 necessary because -a=<FILE> is a valid switch but getopt would
490 normally reject it since --alternate does not take an argument. */
491 ,{"a", optional_argument
, NULL
, 'a'}
492 /* Handle -al=<FILE>. */
493 ,{"al", optional_argument
, NULL
, OPTION_AL
}
494 ,{"compress-debug-sections", optional_argument
, NULL
, OPTION_COMPRESS_DEBUG
}
495 ,{"nocompress-debug-sections", no_argument
, NULL
, OPTION_NOCOMPRESS_DEBUG
}
496 ,{"debug-prefix-map", required_argument
, NULL
, OPTION_DEBUG_PREFIX_MAP
}
497 ,{"defsym", required_argument
, NULL
, OPTION_DEFSYM
}
498 ,{"dump-config", no_argument
, NULL
, OPTION_DUMPCONFIG
}
499 ,{"emulation", required_argument
, NULL
, OPTION_EMULATION
}
500 #if defined OBJ_ELF || defined OBJ_MAYBE_ELF
501 ,{"execstack", no_argument
, NULL
, OPTION_EXECSTACK
}
502 ,{"noexecstack", no_argument
, NULL
, OPTION_NOEXECSTACK
}
503 ,{"size-check", required_argument
, NULL
, OPTION_SIZE_CHECK
}
504 ,{"elf-stt-common", required_argument
, NULL
, OPTION_ELF_STT_COMMON
}
505 ,{"sectname-subst", no_argument
, NULL
, OPTION_SECTNAME_SUBST
}
507 ,{"fatal-warnings", no_argument
, NULL
, OPTION_WARN_FATAL
}
508 ,{"gdwarf-2", no_argument
, NULL
, OPTION_GDWARF2
}
509 /* GCC uses --gdwarf-2 but GAS uses to use --gdwarf2,
510 so we keep it here for backwards compatibility. */
511 ,{"gdwarf2", no_argument
, NULL
, OPTION_GDWARF2
}
512 ,{"gdwarf-sections", no_argument
, NULL
, OPTION_GDWARF_SECTIONS
}
513 ,{"gen-debug", no_argument
, NULL
, 'g'}
514 ,{"gstabs", no_argument
, NULL
, OPTION_GSTABS
}
515 ,{"gstabs+", no_argument
, NULL
, OPTION_GSTABS_PLUS
}
516 ,{"hash-size", required_argument
, NULL
, OPTION_HASH_TABLE_SIZE
}
517 ,{"help", no_argument
, NULL
, OPTION_HELP
}
519 /* New option for extending instruction set (see also -t above).
520 The "-t file" or "--itbl file" option extends the basic set of
521 valid instructions by reading "file", a text file containing a
522 list of instruction formats. The additional opcodes and their
523 formats are added to the built-in set of instructions, and
524 mnemonics for new registers may also be defined. */
525 ,{"itbl", required_argument
, NULL
, 't'}
527 /* getopt allows abbreviations, so we do this to stop it from
528 treating -k as an abbreviation for --keep-locals. Some
529 ports use -k to enable PIC assembly. */
530 ,{"keep-locals", no_argument
, NULL
, 'L'}
531 ,{"keep-locals", no_argument
, NULL
, 'L'}
532 ,{"listing-lhs-width", required_argument
, NULL
, OPTION_LISTING_LHS_WIDTH
}
533 ,{"listing-lhs-width2", required_argument
, NULL
, OPTION_LISTING_LHS_WIDTH2
}
534 ,{"listing-rhs-width", required_argument
, NULL
, OPTION_LISTING_RHS_WIDTH
}
535 ,{"listing-cont-lines", required_argument
, NULL
, OPTION_LISTING_CONT_LINES
}
536 ,{"MD", required_argument
, NULL
, OPTION_DEPFILE
}
537 ,{"mri", no_argument
, NULL
, 'M'}
538 ,{"nocpp", no_argument
, NULL
, OPTION_NOCPP
}
539 ,{"no-pad-sections", no_argument
, NULL
, OPTION_NO_PAD_SECTIONS
}
540 ,{"no-warn", no_argument
, NULL
, 'W'}
541 ,{"reduce-memory-overheads", no_argument
, NULL
, OPTION_REDUCE_MEMORY_OVERHEADS
}
542 ,{"statistics", no_argument
, NULL
, OPTION_STATISTICS
}
543 ,{"strip-local-absolute", no_argument
, NULL
, OPTION_STRIP_LOCAL_ABSOLUTE
}
544 ,{"version", no_argument
, NULL
, OPTION_VERSION
}
545 ,{"verbose", no_argument
, NULL
, OPTION_VERBOSE
}
546 ,{"target-help", no_argument
, NULL
, OPTION_TARGET_HELP
}
547 ,{"traditional-format", no_argument
, NULL
, OPTION_TRADITIONAL_FORMAT
}
548 ,{"warn", no_argument
, NULL
, OPTION_WARN
}
551 /* Construct the option lists from the standard list and the target
552 dependent list. Include space for an extra NULL option and
553 always NULL terminate. */
554 shortopts
= concat (std_shortopts
, md_shortopts
, (char *) NULL
);
555 longopts
= (struct option
*) xmalloc (sizeof (std_longopts
)
556 + md_longopts_size
+ sizeof (struct option
));
557 memcpy (longopts
, std_longopts
, sizeof (std_longopts
));
558 memcpy (((char *) longopts
) + sizeof (std_longopts
), md_longopts
, md_longopts_size
);
559 memset (((char *) longopts
) + sizeof (std_longopts
) + md_longopts_size
,
560 0, sizeof (struct option
));
562 /* Make a local copy of the old argv. */
566 /* Initialize a new argv that contains no options. */
567 new_argv
= XNEWVEC (char *, old_argc
+ 1);
568 new_argv
[0] = old_argv
[0];
570 new_argv
[new_argc
] = NULL
;
574 /* getopt_long_only is like getopt_long, but '-' as well as '--' can
575 indicate a long option. */
577 int optc
= getopt_long_only (old_argc
, old_argv
, shortopts
, longopts
,
586 /* md_parse_option should return 1 if it recognizes optc,
588 if (md_parse_option (optc
, optarg
) != 0)
590 /* `-v' isn't included in the general short_opts list, so check for
591 it explicitly here before deciding we've gotten a bad argument. */
595 /* Telling getopt to treat -v's value as optional can result
596 in it picking up a following filename argument here. The
597 VMS code in md_parse_option can return 0 in that case,
598 but it has no way of pushing the filename argument back. */
599 if (optarg
&& *optarg
)
600 new_argv
[new_argc
++] = optarg
, new_argv
[new_argc
] = NULL
;
611 as_bad (_("unrecognized option -%c%s"), optc
, optarg
? optarg
: "");
617 case 1: /* File name. */
618 if (!strcmp (optarg
, "-"))
619 optarg
= (char *) "";
620 new_argv
[new_argc
++] = optarg
;
621 new_argv
[new_argc
] = NULL
;
624 case OPTION_TARGET_HELP
:
625 md_show_usage (stdout
);
635 case OPTION_NO_PAD_SECTIONS
:
636 do_not_pad_sections_to_alignment
= 1;
639 case OPTION_STATISTICS
:
640 flag_print_statistics
= 1;
643 case OPTION_STRIP_LOCAL_ABSOLUTE
:
644 flag_strip_local_absolute
= 1;
647 case OPTION_TRADITIONAL_FORMAT
:
648 flag_traditional_format
= 1;
652 /* This output is intended to follow the GNU standards document. */
653 printf (_("GNU assembler %s\n"), BFD_VERSION_STRING
);
654 printf (_("Copyright (C) 2017 Free Software Foundation, Inc.\n"));
656 This program is free software; you may redistribute it under the terms of\n\
657 the GNU General Public License version 3 or later.\n\
658 This program has absolutely no warranty.\n"));
659 #ifdef TARGET_WITH_CPU
660 printf (_("This assembler was configured for a target of `%s' "
661 "and default,\ncpu type `%s'.\n"),
662 TARGET_ALIAS
, TARGET_WITH_CPU
);
664 printf (_("This assembler was configured for a target of `%s'.\n"),
669 case OPTION_EMULATION
:
670 #ifdef USE_EMULATIONS
671 if (strcmp (optarg
, this_emulation
->name
))
672 as_fatal (_("multiple emulation names specified"));
674 as_fatal (_("emulations not handled in this configuration"));
678 case OPTION_DUMPCONFIG
:
679 fprintf (stderr
, _("alias = %s\n"), TARGET_ALIAS
);
680 fprintf (stderr
, _("canonical = %s\n"), TARGET_CANONICAL
);
681 fprintf (stderr
, _("cpu-type = %s\n"), TARGET_CPU
);
682 #ifdef TARGET_OBJ_FORMAT
683 fprintf (stderr
, _("format = %s\n"), TARGET_OBJ_FORMAT
);
686 fprintf (stderr
, _("bfd-target = %s\n"), TARGET_FORMAT
);
690 case OPTION_COMPRESS_DEBUG
:
693 #if defined OBJ_ELF || defined OBJ_MAYBE_ELF
694 if (strcasecmp (optarg
, "none") == 0)
695 flag_compress_debug
= COMPRESS_DEBUG_NONE
;
696 else if (strcasecmp (optarg
, "zlib") == 0)
697 flag_compress_debug
= COMPRESS_DEBUG_GABI_ZLIB
;
698 else if (strcasecmp (optarg
, "zlib-gnu") == 0)
699 flag_compress_debug
= COMPRESS_DEBUG_GNU_ZLIB
;
700 else if (strcasecmp (optarg
, "zlib-gabi") == 0)
701 flag_compress_debug
= COMPRESS_DEBUG_GABI_ZLIB
;
703 as_fatal (_("Invalid --compress-debug-sections option: `%s'"),
706 as_fatal (_("--compress-debug-sections=%s is unsupported"),
711 flag_compress_debug
= COMPRESS_DEBUG_GABI_ZLIB
;
714 case OPTION_NOCOMPRESS_DEBUG
:
715 flag_compress_debug
= COMPRESS_DEBUG_NONE
;
718 case OPTION_DEBUG_PREFIX_MAP
:
719 add_debug_prefix_map (optarg
);
726 struct defsym_list
*n
;
728 for (s
= optarg
; *s
!= '\0' && *s
!= '='; s
++)
731 as_fatal (_("bad defsym; format is --defsym name=value"));
733 i
= bfd_scan_vma (s
, (const char **) NULL
, 0);
734 n
= XNEW (struct defsym_list
);
745 /* optarg is the name of the file containing the instruction
746 formats, opcodes, register names, etc. */
747 struct itbl_file_list
*n
;
751 as_warn (_("no file name following -t option"));
755 n
= XNEW (struct itbl_file_list
);
756 n
->next
= itbl_files
;
760 /* Parse the file and add the new instructions to our internal
761 table. If multiple instruction tables are specified, the
762 information from this table gets appended onto the existing
764 itbl_files
->name
= xstrdup (optarg
);
765 if (itbl_parse (itbl_files
->name
) != 0)
766 as_fatal (_("failed to read instruction table %s\n"),
773 start_dependencies (optarg
);
777 /* Some backends, eg Alpha and Mips, use the -g switch for their
778 own purposes. So we check here for an explicit -g and allow
779 the backend to decide if it wants to process it. */
780 if ( old_argv
[optind
- 1][1] == 'g'
781 && md_parse_option (optc
, optarg
))
784 if (md_debug_format_selector
)
785 debug_type
= md_debug_format_selector (& use_gnu_debug_info_extensions
);
787 debug_type
= DEBUG_DWARF2
;
789 debug_type
= DEBUG_STABS
;
792 case OPTION_GSTABS_PLUS
:
793 use_gnu_debug_info_extensions
= 1;
796 debug_type
= DEBUG_STABS
;
800 debug_type
= DEBUG_DWARF2
;
803 case OPTION_GDWARF_SECTIONS
:
804 flag_dwarf_sections
= TRUE
;
808 flag_signed_overflow_ok
= 1;
811 #ifndef WORKING_DOT_WORD
813 flag_warn_displacement
= 1;
817 flag_keep_locals
= 1;
820 case OPTION_LISTING_LHS_WIDTH
:
821 listing_lhs_width
= atoi (optarg
);
822 if (listing_lhs_width_second
< listing_lhs_width
)
823 listing_lhs_width_second
= listing_lhs_width
;
825 case OPTION_LISTING_LHS_WIDTH2
:
827 int tmp
= atoi (optarg
);
829 if (tmp
> listing_lhs_width
)
830 listing_lhs_width_second
= tmp
;
833 case OPTION_LISTING_RHS_WIDTH
:
834 listing_rhs_width
= atoi (optarg
);
836 case OPTION_LISTING_CONT_LINES
:
837 listing_lhs_cont_lines
= atoi (optarg
);
848 flag_readonly_data_in_text
= 1;
852 flag_no_warnings
= 1;
856 flag_no_warnings
= 0;
857 flag_fatal_warnings
= 0;
860 case OPTION_WARN_FATAL
:
861 flag_no_warnings
= 0;
862 flag_fatal_warnings
= 1;
865 #if defined OBJ_ELF || defined OBJ_MAYBE_ELF
866 case OPTION_EXECSTACK
:
868 flag_noexecstack
= 0;
871 case OPTION_NOEXECSTACK
:
872 flag_noexecstack
= 1;
876 case OPTION_SIZE_CHECK
:
877 if (strcasecmp (optarg
, "error") == 0)
878 flag_allow_nonconst_size
= FALSE
;
879 else if (strcasecmp (optarg
, "warning") == 0)
880 flag_allow_nonconst_size
= TRUE
;
882 as_fatal (_("Invalid --size-check= option: `%s'"), optarg
);
885 case OPTION_ELF_STT_COMMON
:
886 if (strcasecmp (optarg
, "no") == 0)
887 flag_use_elf_stt_common
= 0;
888 else if (strcasecmp (optarg
, "yes") == 0)
889 flag_use_elf_stt_common
= 1;
891 as_fatal (_("Invalid --elf-stt-common= option: `%s'"),
895 case OPTION_SECTNAME_SUBST
:
896 flag_sectname_subst
= 1;
900 flag_always_generate_output
= 1;
904 listing
|= LISTING_LISTING
;
906 listing_filename
= xstrdup (optarg
);
909 case OPTION_ALTERNATE
:
910 optarg
= old_argv
[optind
- 1];
911 while (* optarg
== '-')
914 if (strcmp (optarg
, "alternate") == 0)
916 flag_macro_alternate
= 1;
925 if (optarg
!= old_argv
[optind
] && optarg
[-1] == '=')
928 if (md_parse_option (optc
, optarg
) != 0)
936 listing
|= LISTING_NOCOND
;
939 listing
|= LISTING_NODEBUG
;
942 listing
|= LISTING_GENERAL
;
945 listing
|= LISTING_HLL
;
948 listing
|= LISTING_LISTING
;
951 listing
|= LISTING_MACEXP
;
954 listing
|= LISTING_NOFORM
;
957 listing
|= LISTING_SYMBOLS
;
960 listing_filename
= xstrdup (optarg
+ 1);
961 optarg
+= strlen (listing_filename
);
964 as_fatal (_("invalid listing option `%c'"), *optarg
);
971 listing
= LISTING_DEFAULT
;
975 /* DEBUG is implemented: it debugs different
976 things from other people's assemblers. */
981 flag_no_comments
= 1;
985 { /* Include file directory. */
986 char *temp
= xstrdup (optarg
);
988 add_include_dir (temp
);
993 out_file_name
= xstrdup (optarg
);
1000 /* -X means treat warnings as errors. */
1003 case OPTION_REDUCE_MEMORY_OVERHEADS
:
1004 /* The only change we make at the moment is to reduce
1005 the size of the hash tables that we use. */
1006 set_gas_hash_table_size (4051);
1009 case OPTION_HASH_TABLE_SIZE
:
1011 unsigned long new_size
;
1013 new_size
= strtoul (optarg
, NULL
, 0);
1015 set_gas_hash_table_size (new_size
);
1017 as_fatal (_("--hash-size needs a numeric argument"));
1029 #ifdef md_after_parse_args
1030 md_after_parse_args ();
1035 dump_statistics (void)
1037 long run_time
= get_run_time () - start_time
;
1039 fprintf (stderr
, _("%s: total time in assembly: %ld.%06ld\n"),
1040 myname
, run_time
/ 1000000, run_time
% 1000000);
1042 subsegs_print_statistics (stderr
);
1043 write_print_statistics (stderr
);
1044 symbol_print_statistics (stderr
);
1045 read_print_statistics (stderr
);
1047 #ifdef tc_print_statistics
1048 tc_print_statistics (stderr
);
1051 #ifdef obj_print_statistics
1052 obj_print_statistics (stderr
);
1057 close_output_file (void)
1059 output_file_close (out_file_name
);
1061 unlink_if_ordinary (out_file_name
);
1064 /* The interface between the macro code and gas expression handling. */
1067 macro_expr (const char *emsg
, size_t idx
, sb
*in
, offsetT
*val
)
1074 hold
= input_line_pointer
;
1075 input_line_pointer
= in
->ptr
+ idx
;
1076 expression_and_evaluate (&ex
);
1077 idx
= input_line_pointer
- in
->ptr
;
1078 input_line_pointer
= hold
;
1080 if (ex
.X_op
!= O_constant
)
1081 as_bad ("%s", emsg
);
1083 *val
= ex
.X_add_number
;
1088 /* Here to attempt 1 pass over each input file.
1089 We scan argv[*] looking for filenames or exactly "" which is
1090 shorthand for stdin. Any argv that is NULL is not a file-name.
1091 We set need_pass_2 TRUE if, after this, we still have unresolved
1092 expressions of the form (unknown value)+-(unknown value).
1094 Note the un*x semantics: there is only 1 logical input file, but it
1095 may be a catenation of many 'physical' input files. */
1098 perform_an_assembly_pass (int argc
, char ** argv
)
1102 flagword applicable
;
1108 /* Create the standard sections, and those the assembler uses
1110 text_section
= subseg_new (TEXT_SECTION_NAME
, 0);
1111 data_section
= subseg_new (DATA_SECTION_NAME
, 0);
1112 bss_section
= subseg_new (BSS_SECTION_NAME
, 0);
1113 /* @@ FIXME -- we're setting the RELOC flag so that sections are assumed
1114 to have relocs, otherwise we don't find out in time. */
1115 applicable
= bfd_applicable_section_flags (stdoutput
);
1116 bfd_set_section_flags (stdoutput
, text_section
,
1117 applicable
& (SEC_ALLOC
| SEC_LOAD
| SEC_RELOC
1118 | SEC_CODE
| SEC_READONLY
));
1119 bfd_set_section_flags (stdoutput
, data_section
,
1120 applicable
& (SEC_ALLOC
| SEC_LOAD
| SEC_RELOC
1122 bfd_set_section_flags (stdoutput
, bss_section
, applicable
& SEC_ALLOC
);
1123 seg_info (bss_section
)->bss
= 1;
1125 subseg_new (BFD_ABS_SECTION_NAME
, 0);
1126 subseg_new (BFD_UND_SECTION_NAME
, 0);
1127 reg_section
= subseg_new ("*GAS `reg' section*", 0);
1128 expr_section
= subseg_new ("*GAS `expr' section*", 0);
1131 subseg_set (text_section
, 0);
1134 /* This may add symbol table entries, which requires having an open BFD,
1135 and sections already created. */
1152 { /* Is it a file-name argument? */
1155 /* argv->"" if stdin desired, else->filename. */
1156 read_a_source_file (*argv
);
1158 argv
++; /* Completed that argv. */
1161 read_a_source_file ("");
1166 main (int argc
, char ** argv
)
1168 char ** argv_orig
= argv
;
1172 start_time
= get_run_time ();
1175 #if defined (HAVE_SETLOCALE) && defined (HAVE_LC_MESSAGES)
1176 setlocale (LC_MESSAGES
, "");
1178 #if defined (HAVE_SETLOCALE)
1179 setlocale (LC_CTYPE
, "");
1181 bindtextdomain (PACKAGE
, LOCALEDIR
);
1182 textdomain (PACKAGE
);
1187 #ifdef HOST_SPECIAL_INIT
1188 HOST_SPECIAL_INIT (argc
, argv
);
1192 xmalloc_set_program_name (myname
);
1194 expandargv (&argc
, &argv
);
1196 START_PROGRESS (myname
, 0);
1198 #ifndef OBJ_DEFAULT_OUTPUT_FILE_NAME
1199 #define OBJ_DEFAULT_OUTPUT_FILE_NAME "a.out"
1202 out_file_name
= OBJ_DEFAULT_OUTPUT_FILE_NAME
;
1206 bfd_set_error_program_name (myname
);
1208 #ifdef USE_EMULATIONS
1209 select_emulation_mode (argc
, argv
);
1213 /* Call parse_args before any of the init/begin functions
1214 so that switches like --hash-size can be honored. */
1215 parse_args (&argc
, &argv
);
1220 input_scrub_begin ();
1223 /* It has to be called after dump_statistics (). */
1224 xatexit (close_output_file
);
1226 if (flag_print_statistics
)
1227 xatexit (dump_statistics
);
1231 macro_strip_at
= flag_mri
;
1234 macro_init (flag_macro_alternate
, flag_mri
, macro_strip_at
, macro_expr
);
1238 output_file_create (out_file_name
);
1239 gas_assert (stdoutput
!= 0);
1243 #ifdef tc_init_after_args
1244 tc_init_after_args ();
1251 local_symbol_make (".gasversion.", absolute_section
,
1252 BFD_VERSION
/ 10000UL, &predefined_address_frag
);
1254 /* Now that we have fully initialized, and have created the output
1255 file, define any symbols requested by --defsym command line
1257 while (defsyms
!= NULL
)
1260 struct defsym_list
*next
;
1262 sym
= symbol_new (defsyms
->name
, absolute_section
, defsyms
->value
,
1263 &zero_address_frag
);
1264 /* Make symbols defined on the command line volatile, so that they
1265 can be redefined inside a source file. This makes this assembler's
1266 behaviour compatible with earlier versions, but it may not be
1267 completely intuitive. */
1268 S_SET_VOLATILE (sym
);
1269 symbol_table_insert (sym
);
1270 next
= defsyms
->next
;
1278 perform_an_assembly_pass (argc
, argv
);
1280 cond_finish_check (-1);
1286 #if defined OBJ_ELF || defined OBJ_MAYBE_ELF
1287 if ((flag_execstack
|| flag_noexecstack
)
1288 && OUTPUT_FLAVOR
== bfd_target_elf_flavour
)
1292 gnustack
= subseg_new (".note.GNU-stack", 0);
1293 bfd_set_section_flags (stdoutput
, gnustack
,
1294 SEC_READONLY
| (flag_execstack
? SEC_CODE
: 0));
1299 /* If we've been collecting dwarf2 .debug_line info, either for
1300 assembly debugging or on behalf of the compiler, emit it now. */
1303 /* If we constructed dwarf2 .eh_frame info, either via .cfi
1304 directives from the user or by the backend, emit it now. */
1308 if (seen_at_least_1_file ())
1310 int n_warns
, n_errs
;
1314 write_object_file ();
1316 n_warns
= had_warnings ();
1317 n_errs
= had_errors ();
1320 ngettext ("%d warning", "%d warnings", n_warns
), n_warns
);
1322 ngettext ("%d error", "%d errors", n_errs
), n_errs
);
1323 if (flag_fatal_warnings
&& n_warns
!= 0)
1326 as_bad (_("%s, treating warnings as errors"), warn_msg
);
1332 else if (flag_always_generate_output
)
1334 /* The -Z flag indicates that an object file should be generated,
1335 regardless of warnings and errors. */
1337 fprintf (stderr
, _("%s, %s, generating bad object file\n"),
1345 listing_print (listing_filename
, argv_orig
);
1350 END_PROGRESS (myname
);
1352 /* Use xexit instead of return, because under VMS environments they
1353 may not place the same interpretation on the value given. */
1354 if (had_errors () != 0)
1355 xexit (EXIT_FAILURE
);
1357 /* Only generate dependency file if assembler was successful. */
1358 print_dependencies ();
1360 xexit (EXIT_SUCCESS
);