Home | History | Annotate | Line # | Download | only in gas
      1       1.1     skrll /* as.c - GAS main program.
      2  1.1.1.12  christos    Copyright (C) 1987-2026 Free Software Foundation, Inc.
      3       1.1     skrll 
      4       1.1     skrll    This file is part of GAS, the GNU Assembler.
      5       1.1     skrll 
      6       1.1     skrll    GAS is free software; you can redistribute it and/or modify
      7       1.1     skrll    it under the terms of the GNU General Public License as published by
      8       1.1     skrll    the Free Software Foundation; either version 3, or (at your option)
      9       1.1     skrll    any later version.
     10       1.1     skrll 
     11       1.1     skrll    GAS is distributed in the hope that it will be useful, but WITHOUT
     12       1.1     skrll    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
     13       1.1     skrll    or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
     14       1.1     skrll    License for more details.
     15       1.1     skrll 
     16       1.1     skrll    You should have received a copy of the GNU General Public License
     17       1.1     skrll    along with GAS; see the file COPYING.  If not, write to the Free
     18       1.1     skrll    Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
     19       1.1     skrll    02110-1301, USA.  */
     20       1.1     skrll 
     21       1.1     skrll /* Main program for AS; a 32-bit assembler of GNU.
     22       1.1     skrll    Understands command arguments.
     23       1.1     skrll    Has a few routines that don't fit in other modules because they
     24       1.1     skrll    are shared.
     25   1.1.1.4  christos 
     26       1.1     skrll   			bugs
     27   1.1.1.4  christos 
     28       1.1     skrll    : initialisers
     29       1.1     skrll   	Since no-one else says they will support them in future: I
     30       1.1     skrll    don't support them now.  */
     31       1.1     skrll 
     32       1.1     skrll #define COMMON
     33       1.1     skrll 
     34   1.1.1.6  christos /* Disable code to set FAKE_LABEL_NAME in obj-multi.h, to avoid circular
     35   1.1.1.6  christos    reference.  */
     36   1.1.1.6  christos #define INITIALIZING_EMULS
     37   1.1.1.6  christos 
     38       1.1     skrll #include "as.h"
     39       1.1     skrll #include "subsegs.h"
     40       1.1     skrll #include "output-file.h"
     41       1.1     skrll #include "sb.h"
     42       1.1     skrll #include "macro.h"
     43       1.1     skrll #include "dwarf2dbg.h"
     44       1.1     skrll #include "dw2gencfi.h"
     45  1.1.1.10  christos #include "codeview.h"
     46       1.1     skrll #include "bfdver.h"
     47   1.1.1.6  christos #include "write.h"
     48  1.1.1.10  christos #include "ginsn.h"
     49       1.1     skrll 
     50       1.1     skrll #ifdef HAVE_ITBL_CPU
     51       1.1     skrll #include "itbl-ops.h"
     52       1.1     skrll #else
     53       1.1     skrll #define itbl_init()
     54       1.1     skrll #endif
     55       1.1     skrll 
     56       1.1     skrll #ifdef USING_CGEN
     57       1.1     skrll /* Perform any cgen specific initialisation for gas.  */
     58       1.1     skrll extern void gas_cgen_begin (void);
     59       1.1     skrll #endif
     60       1.1     skrll 
     61       1.1     skrll /* We build a list of defsyms as we read the options, and then define
     62       1.1     skrll    them after we have initialized everything.  */
     63       1.1     skrll struct defsym_list
     64       1.1     skrll {
     65       1.1     skrll   struct defsym_list *next;
     66       1.1     skrll   char *name;
     67       1.1     skrll   valueT value;
     68       1.1     skrll };
     69       1.1     skrll 
     70       1.1     skrll 
     71       1.1     skrll /* True if a listing is wanted.  */
     72       1.1     skrll int listing;
     73       1.1     skrll 
     74       1.1     skrll /* Type of debugging to generate.  */
     75       1.1     skrll enum debug_info_type debug_type = DEBUG_UNSPECIFIED;
     76       1.1     skrll int use_gnu_debug_info_extensions = 0;
     77       1.1     skrll 
     78       1.1     skrll #ifndef MD_DEBUG_FORMAT_SELECTOR
     79       1.1     skrll #define MD_DEBUG_FORMAT_SELECTOR NULL
     80       1.1     skrll #endif
     81       1.1     skrll static enum debug_info_type (*md_debug_format_selector) (int *) = MD_DEBUG_FORMAT_SELECTOR;
     82       1.1     skrll 
     83       1.1     skrll /* Maximum level of macro nesting.  */
     84       1.1     skrll int max_macro_nest = 100;
     85       1.1     skrll 
     86       1.1     skrll /* argv[0]  */
     87       1.1     skrll static char * myname;
     88       1.1     skrll 
     89       1.1     skrll /* The default obstack chunk size.  If we set this to zero, the
     90       1.1     skrll    obstack code will use whatever will fit in a 4096 byte block.  */
     91       1.1     skrll int chunksize = 0;
     92       1.1     skrll 
     93       1.1     skrll /* To monitor memory allocation more effectively, make this non-zero.
     94       1.1     skrll    Then the chunk sizes for gas and bfd will be reduced.  */
     95       1.1     skrll int debug_memory = 0;
     96       1.1     skrll 
     97       1.1     skrll /* Enable verbose mode.  */
     98       1.1     skrll int verbose = 0;
     99       1.1     skrll 
    100   1.1.1.8  christos /* Which version of DWARF CIE to produce.  This default value of -1
    101   1.1.1.8  christos    indicates that this value has not been set yet, a default value is
    102   1.1.1.8  christos    provided in dwarf2_init.  A different value can also be supplied by the
    103   1.1.1.8  christos    command line flag --gdwarf-cie-version, or by a target in
    104   1.1.1.8  christos    MD_AFTER_PARSE_ARGS.  */
    105   1.1.1.8  christos int flag_dwarf_cie_version = -1;
    106   1.1.1.8  christos 
    107   1.1.1.9  christos /* The maximum level of DWARF DEBUG information we should manufacture.
    108   1.1.1.9  christos    This defaults to 3 unless overridden by a command line option.  */
    109   1.1.1.9  christos unsigned int dwarf_level = 3;
    110   1.1.1.9  christos 
    111   1.1.1.5  christos #if defined OBJ_ELF || defined OBJ_MAYBE_ELF
    112   1.1.1.5  christos int flag_use_elf_stt_common = DEFAULT_GENERATE_ELF_STT_COMMON;
    113   1.1.1.9  christos bool flag_generate_build_notes = DEFAULT_GENERATE_BUILD_NOTES;
    114   1.1.1.5  christos #endif
    115   1.1.1.5  christos 
    116  1.1.1.12  christos /* If DEFAULT_SFRAME is 0 instead, flag_gen_sframe gets the default
    117  1.1.1.12  christos    enum value GEN_SFRAME_DEFAULT_NONE.  */
    118  1.1.1.12  christos #if DEFAULT_SFRAME
    119  1.1.1.12  christos enum gen_sframe_option flag_gen_sframe = GEN_SFRAME_CONFIG_ENABLED;
    120  1.1.1.12  christos #endif
    121  1.1.1.12  christos /* Version of SFrame stack trace info to generate.  Default version is
    122  1.1.1.12  christos    SFRAME_VERSION_3.  */
    123  1.1.1.12  christos enum gen_sframe_version flag_gen_sframe_version = GEN_SFRAME_VERSION_3;
    124  1.1.1.12  christos 
    125       1.1     skrll segT reg_section;
    126       1.1     skrll segT expr_section;
    127       1.1     skrll segT text_section;
    128       1.1     skrll segT data_section;
    129       1.1     skrll segT bss_section;
    130       1.1     skrll 
    131       1.1     skrll /* Name of listing file.  */
    132       1.1     skrll static char *listing_filename = NULL;
    133       1.1     skrll 
    134       1.1     skrll static struct defsym_list *defsyms;
    135       1.1     skrll 
    136       1.1     skrll static long start_time;
    137       1.1     skrll 
    138       1.1     skrll 
    139       1.1     skrll #ifdef USE_EMULATIONS
    141       1.1     skrll #define EMULATION_ENVIRON "AS_EMULATION"
    142       1.1     skrll 
    143       1.1     skrll static struct emulation *const emulations[] = { EMULATIONS };
    144       1.1     skrll static const int n_emulations = sizeof (emulations) / sizeof (emulations[0]);
    145       1.1     skrll 
    146       1.1     skrll static void
    147       1.1     skrll select_emulation_mode (int argc, char **argv)
    148       1.1     skrll {
    149   1.1.1.5  christos   int i;
    150   1.1.1.5  christos   char *p;
    151       1.1     skrll   const char *em = NULL;
    152       1.1     skrll 
    153   1.1.1.9  christos   for (i = 1; i < argc; i++)
    154       1.1     skrll     if (startswith (argv[i], "--em"))
    155       1.1     skrll       break;
    156       1.1     skrll 
    157       1.1     skrll   if (i == argc)
    158       1.1     skrll     goto do_default;
    159       1.1     skrll 
    160       1.1     skrll   p = strchr (argv[i], '=');
    161       1.1     skrll   if (p)
    162       1.1     skrll     p++;
    163       1.1     skrll   else
    164       1.1     skrll     p = argv[i + 1];
    165       1.1     skrll 
    166       1.1     skrll   if (!p || !*p)
    167       1.1     skrll     as_fatal (_("missing emulation mode name"));
    168       1.1     skrll   em = p;
    169       1.1     skrll 
    170       1.1     skrll  do_default:
    171       1.1     skrll   if (em == 0)
    172       1.1     skrll     em = getenv (EMULATION_ENVIRON);
    173       1.1     skrll   if (em == 0)
    174       1.1     skrll     em = DEFAULT_EMULATION;
    175       1.1     skrll 
    176       1.1     skrll   if (em)
    177       1.1     skrll     {
    178       1.1     skrll       for (i = 0; i < n_emulations; i++)
    179       1.1     skrll 	if (!strcmp (emulations[i]->name, em))
    180       1.1     skrll 	  break;
    181       1.1     skrll       if (i == n_emulations)
    182       1.1     skrll 	as_fatal (_("unrecognized emulation name `%s'"), em);
    183       1.1     skrll       this_emulation = emulations[i];
    184       1.1     skrll     }
    185       1.1     skrll   else
    186       1.1     skrll     this_emulation = emulations[0];
    187       1.1     skrll 
    188       1.1     skrll   this_emulation->init ();
    189       1.1     skrll }
    190       1.1     skrll 
    191       1.1     skrll void
    192       1.1     skrll common_emul_init (void)
    193       1.1     skrll {
    194       1.1     skrll   this_format = this_emulation->format;
    195       1.1     skrll 
    196       1.1     skrll   if (this_emulation->leading_underscore == 2)
    197       1.1     skrll     this_emulation->leading_underscore = this_format->dfl_leading_underscore;
    198       1.1     skrll 
    199       1.1     skrll   if (this_emulation->default_endian != 2)
    200       1.1     skrll     target_big_endian = this_emulation->default_endian;
    201       1.1     skrll 
    202       1.1     skrll   if (this_emulation->fake_label_name == 0)
    203       1.1     skrll     {
    204   1.1.1.6  christos       if (this_emulation->leading_underscore)
    205       1.1     skrll 	this_emulation->fake_label_name = FAKE_LABEL_NAME;
    206       1.1     skrll       else
    207   1.1.1.6  christos 	/* What other parameters should we test?  */
    208       1.1     skrll 	this_emulation->fake_label_name = "." FAKE_LABEL_NAME;
    209       1.1     skrll     }
    210       1.1     skrll }
    211       1.1     skrll #endif
    212       1.1     skrll 
    213       1.1     skrll void
    214       1.1     skrll print_version_id (void)
    215       1.1     skrll {
    216       1.1     skrll   static int printed;
    217       1.1     skrll 
    218       1.1     skrll   if (printed)
    219       1.1     skrll     return;
    220       1.1     skrll   printed = 1;
    221       1.1     skrll 
    222       1.1     skrll   fprintf (stderr, _("GNU assembler version %s (%s) using BFD version %s\n"),
    223       1.1     skrll 	   VERSION, TARGET_ALIAS, BFD_VERSION_STRING);
    224       1.1     skrll }
    225   1.1.1.4  christos 
    226   1.1.1.4  christos #ifdef DEFAULT_FLAG_COMPRESS_DEBUG
    227  1.1.1.10  christos enum compressed_debug_section_type flag_compress_debug
    228  1.1.1.10  christos   = DEFAULT_COMPRESSED_DEBUG_ALGORITHM;
    229  1.1.1.10  christos #define DEFAULT_COMPRESSED_DEBUG_ALGORITHM_HELP \
    230  1.1.1.10  christos         DEFAULT_COMPRESSED_DEBUG_ALGORITHM
    231  1.1.1.10  christos #else
    232   1.1.1.4  christos #define DEFAULT_COMPRESSED_DEBUG_ALGORITHM_HELP COMPRESS_DEBUG_NONE
    233   1.1.1.4  christos #endif
    234       1.1     skrll 
    235       1.1     skrll static void
    236       1.1     skrll show_usage (FILE * stream)
    237       1.1     skrll {
    238       1.1     skrll   fprintf (stream, _("Usage: %s [option...] [asmfile...]\n"), myname);
    239       1.1     skrll 
    240       1.1     skrll   fprintf (stream, _("\
    241       1.1     skrll Options:\n\
    242       1.1     skrll   -a[sub-option...]	  turn on listings\n\
    243       1.1     skrll                       	  Sub-options [default hls]:\n\
    244       1.1     skrll                       	  c      omit false conditionals\n\
    245       1.1     skrll                       	  d      omit debugging directives\n\
    246       1.1     skrll                       	  g      include general info\n\
    247  1.1.1.10  christos                       	  h      include high-level source\n\
    248       1.1     skrll                       	  i      include ginsn and synthesized CFI info\n\
    249       1.1     skrll                       	  l      include assembly\n\
    250       1.1     skrll                       	  m      include macro expansions\n\
    251       1.1     skrll                       	  n      omit forms processing\n\
    252       1.1     skrll                       	  s      include symbols\n\
    253       1.1     skrll                       	  =FILE  list to FILE (must be last sub-option)\n"));
    254       1.1     skrll 
    255       1.1     skrll   fprintf (stream, _("\
    256   1.1.1.2  christos   --alternate             initially turn on alternate macro syntax\n"));
    257  1.1.1.10  christos   fprintf (stream, _("\
    258  1.1.1.10  christos   --compress-debug-sections[={none|zlib|zlib-gnu|zlib-gabi|zstd}]\n\
    259   1.1.1.4  christos                           compress DWARF debug sections\n")),
    260  1.1.1.10  christos   fprintf (stream, _("\
    261  1.1.1.10  christos 		            Default: %s\n"),
    262  1.1.1.10  christos 	   bfd_get_compression_algorithm_name
    263  1.1.1.10  christos              (DEFAULT_COMPRESSED_DEBUG_ALGORITHM_HELP));
    264   1.1.1.4  christos 
    265   1.1.1.4  christos   fprintf (stream, _("\
    266  1.1.1.10  christos   --nocompress-debug-sections\n\
    267       1.1     skrll                           don't compress DWARF debug sections\n"));
    268       1.1     skrll   fprintf (stream, _("\
    269       1.1     skrll   -D                      produce assembler debugging messages\n"));
    270  1.1.1.10  christos   fprintf (stream, _("\
    271  1.1.1.10  christos   --dump-config           display how the assembler is configured and then exit\n"));
    272   1.1.1.2  christos   fprintf (stream, _("\
    273   1.1.1.2  christos   --debug-prefix-map OLD=NEW\n\
    274       1.1     skrll                           map OLD to NEW in debug information\n"));
    275       1.1     skrll   fprintf (stream, _("\
    276       1.1     skrll   --defsym SYM=VAL        define symbol SYM to given value\n"));
    277       1.1     skrll #ifdef USE_EMULATIONS
    278       1.1     skrll   {
    279   1.1.1.5  christos     int i;
    280       1.1     skrll     const char *def_em;
    281       1.1     skrll 
    282  1.1.1.10  christos     fprintf (stream, "\
    283       1.1     skrll   --emulation=[");
    284       1.1     skrll     for (i = 0; i < n_emulations - 1; i++)
    285       1.1     skrll       fprintf (stream, "%s | ", emulations[i]->name);
    286       1.1     skrll     fprintf (stream, "%s]\n", emulations[i]->name);
    287       1.1     skrll 
    288       1.1     skrll     def_em = getenv (EMULATION_ENVIRON);
    289       1.1     skrll     if (!def_em)
    290       1.1     skrll       def_em = DEFAULT_EMULATION;
    291       1.1     skrll     fprintf (stream, _("\
    292       1.1     skrll                           emulate output (default %s)\n"), def_em);
    293       1.1     skrll   }
    294       1.1     skrll #endif
    295       1.1     skrll #if defined OBJ_ELF || defined OBJ_MAYBE_ELF
    296       1.1     skrll   fprintf (stream, _("\
    297       1.1     skrll   --execstack             require executable stack for this object\n"));
    298       1.1     skrll   fprintf (stream, _("\
    299   1.1.1.2  christos   --noexecstack           don't require executable stack for this object\n"));
    300   1.1.1.2  christos   fprintf (stream, _("\
    301   1.1.1.2  christos   --size-check=[error|warning]\n\
    302   1.1.1.4  christos 			  ELF .size directive check (default --size-check=error)\n"));
    303   1.1.1.8  christos   fprintf (stream, _("\
    304   1.1.1.8  christos   --elf-stt-common=[no|yes] "));
    305   1.1.1.8  christos   if (DEFAULT_GENERATE_ELF_STT_COMMON)
    306   1.1.1.8  christos     fprintf (stream, _("(default: yes)\n"));
    307   1.1.1.8  christos   else
    308   1.1.1.8  christos     fprintf (stream, _("(default: no)\n"));
    309   1.1.1.5  christos   fprintf (stream, _("\
    310   1.1.1.5  christos                           generate ELF common symbols with STT_COMMON type\n"));
    311   1.1.1.4  christos   fprintf (stream, _("\
    312   1.1.1.7  christos   --sectname-subst        enable section name substitution sequences\n"));
    313   1.1.1.7  christos 
    314   1.1.1.7  christos   fprintf (stream, _("\
    315   1.1.1.7  christos   --generate-missing-build-notes=[no|yes] "));
    316   1.1.1.7  christos #if DEFAULT_GENERATE_BUILD_NOTES
    317   1.1.1.7  christos   fprintf (stream, _("(default: yes)\n"));
    318   1.1.1.7  christos #else
    319       1.1     skrll   fprintf (stream, _("(default: no)\n"));
    320       1.1     skrll #endif
    321   1.1.1.7  christos   fprintf (stream, _("\
    322  1.1.1.10  christos                           generate GNU Build notes if none are present in the input\n"));
    323  1.1.1.11  christos   fprintf (stream, _("\
    324  1.1.1.12  christos   --gsframe[={no|yes}]    whether to generate SFrame stack trace information\n\
    325  1.1.1.12  christos                           (default: %s)\n\
    326  1.1.1.12  christos 			  Default version emitted is V3\n"),
    327  1.1.1.12  christos 	   DEFAULT_SFRAME ? "yes" : "no");
    328  1.1.1.12  christos   fprintf (stream, _("\
    329  1.1.1.10  christos   --gsframe-<N>           generate SFrame version <N> information. 3 == <N>\n"));
    330  1.1.1.10  christos # if defined (TARGET_USE_SCFI) && defined (TARGET_USE_GINSN)
    331  1.1.1.10  christos   fprintf (stream, _("\
    332  1.1.1.10  christos   --scfi=experimental     Synthesize DWARF CFI for hand-written asm\n\
    333  1.1.1.10  christos                           (experimental support)\n"));
    334   1.1.1.7  christos # endif
    335   1.1.1.7  christos #endif /* OBJ_ELF */
    336   1.1.1.7  christos 
    337       1.1     skrll   fprintf (stream, _("\
    338       1.1     skrll   -f                      skip whitespace and comment preprocessing\n"));
    339  1.1.1.11  christos   fprintf (stream, _("\
    340       1.1     skrll   -g, --gen-debug         generate debugging information\n"));
    341       1.1     skrll   fprintf (stream, _("\
    342       1.1     skrll   --gstabs                generate STABS debugging information\n"));
    343       1.1     skrll   fprintf (stream, _("\
    344       1.1     skrll   --gstabs+               generate STABS debug info with GNU extensions\n"));
    345   1.1.1.9  christos   fprintf (stream, _("\
    346       1.1     skrll   --gdwarf-<N>            generate DWARF<N> debugging information. 2 <= <N> <= 5\n"));
    347  1.1.1.10  christos   fprintf (stream, _("\
    348  1.1.1.10  christos   --gdwarf-cie-version=<N> generate version 1, 3 or 4 DWARF CIEs\n"));
    349   1.1.1.4  christos   fprintf (stream, _("\
    350  1.1.1.10  christos   --gdwarf-sections       generate per-function section names for DWARF line information\n"));
    351  1.1.1.10  christos #if defined (TE_PE) && defined (O_secrel)
    352  1.1.1.10  christos   fprintf (stream, _("\
    353  1.1.1.10  christos   --gcodeview             generate CodeView debugging information\n"));
    354  1.1.1.10  christos #endif
    355  1.1.1.10  christos   fprintf (stream, _("\
    356  1.1.1.10  christos   --hash-size=<N>         ignored\n"));
    357  1.1.1.10  christos   fprintf (stream, _("\
    358   1.1.1.4  christos   --help                  show all assembler options\n"));
    359       1.1     skrll   fprintf (stream, _("\
    360       1.1     skrll   --target-help           show target specific options\n"));
    361       1.1     skrll   fprintf (stream, _("\
    362       1.1     skrll   -I DIR                  add DIR to search list for .include directives\n"));
    363       1.1     skrll   fprintf (stream, _("\
    364       1.1     skrll   -J                      don't warn about signed overflow\n"));
    365       1.1     skrll   fprintf (stream, _("\
    366       1.1     skrll   -K                      warn when differences altered for long displacements\n"));
    367  1.1.1.11  christos   fprintf (stream, _("\
    368       1.1     skrll   -L, --keep-locals       keep local symbols (e.g. starting with `L')\n"));
    369  1.1.1.11  christos   fprintf (stream, _("\
    370       1.1     skrll   -M, --mri               assemble in MRI compatibility mode\n"));
    371       1.1     skrll   fprintf (stream, _("\
    372       1.1     skrll   --MD FILE               write dependency information in FILE (default none)\n"));
    373  1.1.1.10  christos   fprintf (stream, _("\
    374  1.1.1.10  christos   --multibyte-handling=<method>\n\
    375  1.1.1.10  christos                           what to do with multibyte characters encountered in the input\n"));
    376       1.1     skrll   fprintf (stream, _("\
    377       1.1     skrll   -nocpp                  ignored\n"));
    378   1.1.1.5  christos   fprintf (stream, _("\
    379   1.1.1.5  christos   -no-pad-sections        do not pad the end of sections to alignment boundaries\n"));
    380       1.1     skrll   fprintf (stream, _("\
    381       1.1     skrll   -o OBJFILE              name the object-file output OBJFILE (default a.out)\n"));
    382       1.1     skrll   fprintf (stream, _("\
    383       1.1     skrll   -R                      fold data section into text section\n"));
    384  1.1.1.10  christos   fprintf (stream, _("\
    385  1.1.1.10  christos   --reduce-memory-overheads ignored\n"));
    386       1.1     skrll   fprintf (stream, _("\
    387       1.1     skrll   --statistics            print various measured statistics from execution\n"));
    388       1.1     skrll   fprintf (stream, _("\
    389       1.1     skrll   --strip-local-absolute  strip local absolute symbols\n"));
    390       1.1     skrll   fprintf (stream, _("\
    391       1.1     skrll   --traditional-format    Use same format as native assembler when possible\n"));
    392       1.1     skrll   fprintf (stream, _("\
    393       1.1     skrll   --version               print assembler version number and exit\n"));
    394  1.1.1.11  christos   fprintf (stream, _("\
    395       1.1     skrll   -W, --no-warn           suppress warnings\n"));
    396       1.1     skrll   fprintf (stream, _("\
    397       1.1     skrll   --warn                  don't suppress warnings\n"));
    398       1.1     skrll   fprintf (stream, _("\
    399  1.1.1.11  christos   --fatal-warnings        treat warnings as errors\n"));
    400  1.1.1.11  christos   fprintf (stream, _("\
    401  1.1.1.11  christos   --no-info               suppress information messages\n"));
    402  1.1.1.11  christos   fprintf (stream, _("\
    403       1.1     skrll   --info                  don't suppress information messages\n"));
    404       1.1     skrll #ifdef HAVE_ITBL_CPU
    405       1.1     skrll   fprintf (stream, _("\
    406       1.1     skrll   --itbl INSTTBL          extend instruction set to include instructions\n\
    407       1.1     skrll                           matching the specifications defined in file INSTTBL\n"));
    408       1.1     skrll #endif
    409       1.1     skrll   fprintf (stream, _("\
    410       1.1     skrll   -w                      ignored\n"));
    411       1.1     skrll   fprintf (stream, _("\
    412       1.1     skrll   -X                      ignored\n"));
    413       1.1     skrll   fprintf (stream, _("\
    414       1.1     skrll   -Z                      generate object file even after errors\n"));
    415       1.1     skrll   fprintf (stream, _("\
    416       1.1     skrll   --listing-lhs-width     set the width in words of the output data column of\n\
    417       1.1     skrll                           the listing\n"));
    418       1.1     skrll   fprintf (stream, _("\
    419       1.1     skrll   --listing-lhs-width2    set the width in words of the continuation lines\n\
    420       1.1     skrll                           of the output data column; ignored if smaller than\n\
    421       1.1     skrll                           the width of the first line\n"));
    422       1.1     skrll   fprintf (stream, _("\
    423       1.1     skrll   --listing-rhs-width     set the max width in characters of the lines from\n\
    424       1.1     skrll                           the source file\n"));
    425       1.1     skrll   fprintf (stream, _("\
    426       1.1     skrll   --listing-cont-lines    set the maximum number of continuation lines used\n\
    427       1.1     skrll                           for the output data column of the listing\n"));
    428   1.1.1.4  christos   fprintf (stream, _("\
    429       1.1     skrll   @FILE                   read options from FILE\n"));
    430       1.1     skrll 
    431       1.1     skrll   md_show_usage (stream);
    432       1.1     skrll 
    433       1.1     skrll   fputc ('\n', stream);
    434       1.1     skrll 
    435       1.1     skrll   if (REPORT_BUGS_TO[0] && stream == stdout)
    436       1.1     skrll     fprintf (stream, _("Report bugs to %s\n"), REPORT_BUGS_TO);
    437       1.1     skrll }
    438       1.1     skrll 
    439       1.1     skrll /* Since it is easy to do here we interpret the special arg "-"
    440       1.1     skrll    to mean "use stdin" and we set that argv[] pointing to "".
    441       1.1     skrll    After we have munged argv[], the only things left are source file
    442       1.1     skrll    name(s) and ""(s) denoting stdin. These file names are used
    443       1.1     skrll    (perhaps more than once) later.
    444       1.1     skrll 
    445       1.1     skrll    check for new machine-dep cmdline options in
    446       1.1     skrll    md_parse_option definitions in config/tc-*.c.  */
    447       1.1     skrll 
    448       1.1     skrll static void
    449       1.1     skrll parse_args (int * pargc, char *** pargv)
    450       1.1     skrll {
    451       1.1     skrll   int old_argc;
    452       1.1     skrll   int new_argc;
    453       1.1     skrll   char ** old_argv;
    454       1.1     skrll   char ** new_argv;
    455       1.1     skrll   /* Starting the short option string with '-' is for programs that
    456       1.1     skrll      expect options and other ARGV-elements in any order and that care about
    457       1.1     skrll      the ordering of the two.  We describe each non-option ARGV-element
    458       1.1     skrll      as if it were the argument of an option with character code 1.  */
    459       1.1     skrll   char *shortopts;
    460       1.1     skrll   static const char std_shortopts[] =
    461       1.1     skrll   {
    462       1.1     skrll     '-', 'J',
    463       1.1     skrll #ifndef WORKING_DOT_WORD
    464       1.1     skrll     /* -K is not meaningful if .word is not being hacked.  */
    465       1.1     skrll     'K',
    466  1.1.1.11  christos #endif
    467  1.1.1.11  christos     'L', 'M', 'R', 'W', 'Z', 'a', ':', ':', 'D', 'f', 'g', ':',':', 'I', ':',
    468       1.1     skrll     'o', ':', 'v', 'w', 'X',
    469       1.1     skrll #ifdef HAVE_ITBL_CPU
    470       1.1     skrll     /* New option for extending instruction set (see also --itbl below).  */
    471       1.1     skrll     't', ':',
    472       1.1     skrll #endif
    473       1.1     skrll     '\0'
    474       1.1     skrll   };
    475       1.1     skrll   struct option *longopts;
    476       1.1     skrll   /* Codes used for the long options with no short synonyms.  */
    477       1.1     skrll   enum option_values
    478       1.1     skrll     {
    479       1.1     skrll       OPTION_HELP = OPTION_STD_BASE,
    480       1.1     skrll       OPTION_NOCPP,
    481       1.1     skrll       OPTION_STATISTICS,
    482       1.1     skrll       OPTION_VERSION,
    483       1.1     skrll       OPTION_DUMPCONFIG,
    484       1.1     skrll       OPTION_EMULATION,
    485       1.1     skrll       OPTION_DEBUG_PREFIX_MAP,
    486  1.1.1.11  christos       OPTION_DEFSYM,
    487       1.1     skrll #ifndef NO_LISTING
    488   1.1.1.9  christos       OPTION_LISTING_LHS_WIDTH,
    489       1.1     skrll       OPTION_LISTING_LHS_WIDTH2, /* = STD_BASE + 10 */
    490       1.1     skrll       OPTION_LISTING_RHS_WIDTH,
    491  1.1.1.11  christos       OPTION_LISTING_CONT_LINES,
    492       1.1     skrll #endif
    493       1.1     skrll       OPTION_DEPFILE,
    494       1.1     skrll       OPTION_GSTABS,
    495   1.1.1.9  christos       OPTION_GSTABS_PLUS,
    496   1.1.1.9  christos       OPTION_GDWARF_2,
    497   1.1.1.9  christos       OPTION_GDWARF_3,
    498   1.1.1.9  christos       OPTION_GDWARF_4,
    499   1.1.1.9  christos       OPTION_GDWARF_5,
    500   1.1.1.8  christos       OPTION_GDWARF_SECTIONS, /* = STD_BASE + 20 */
    501  1.1.1.10  christos       OPTION_GDWARF_CIE_VERSION,
    502       1.1     skrll       OPTION_GCODEVIEW,
    503  1.1.1.11  christos       OPTION_STRIP_LOCAL_ABSOLUTE,
    504       1.1     skrll       OPTION_EMIT_LOCAL_ABSOLUTE,
    505       1.1     skrll       OPTION_TRADITIONAL_FORMAT,
    506       1.1     skrll       OPTION_WARN,
    507       1.1     skrll       OPTION_TARGET_HELP,
    508       1.1     skrll       OPTION_EXECSTACK,
    509   1.1.1.2  christos       OPTION_NOEXECSTACK,
    510   1.1.1.5  christos       OPTION_SIZE_CHECK,
    511   1.1.1.9  christos       OPTION_ELF_STT_COMMON,
    512   1.1.1.4  christos       OPTION_ELF_BUILD_NOTES, /* = STD_BASE + 30 */
    513       1.1     skrll       OPTION_SECTNAME_SUBST,
    514       1.1     skrll       OPTION_ALTERNATE,
    515       1.1     skrll       OPTION_AL,
    516       1.1     skrll       OPTION_HASH_TABLE_SIZE,
    517   1.1.1.2  christos       OPTION_REDUCE_MEMORY_OVERHEADS,
    518   1.1.1.2  christos       OPTION_WARN_FATAL,
    519   1.1.1.5  christos       OPTION_COMPRESS_DEBUG,
    520   1.1.1.9  christos       OPTION_NOCOMPRESS_DEBUG,
    521  1.1.1.10  christos       OPTION_NO_PAD_SECTIONS,
    522  1.1.1.10  christos       OPTION_MULTIBYTE_HANDLING,  /* = STD_BASE + 40 */
    523  1.1.1.12  christos       OPTION_SFRAME,
    524  1.1.1.11  christos       OPTION_SFRAME_3,
    525  1.1.1.11  christos       OPTION_SCFI,
    526  1.1.1.11  christos       OPTION_INFO,
    527       1.1     skrll       OPTION_NOINFO
    528       1.1     skrll     /* When you add options here, check that they do
    529       1.1     skrll        not collide with OPTION_MD_BASE.  See as.h.  */
    530   1.1.1.4  christos     };
    531       1.1     skrll 
    532       1.1     skrll   static const struct option std_longopts[] =
    533       1.1     skrll   {
    534   1.1.1.3  christos     /* Note: commas are placed at the start of the line rather than
    535       1.1     skrll        the end of the preceding line so that it is simpler to
    536       1.1     skrll        selectively add and remove lines from this list.  */
    537       1.1     skrll     {"alternate", no_argument, NULL, OPTION_ALTERNATE}
    538       1.1     skrll     /* The entry for "a" is here to prevent getopt_long_only() from
    539       1.1     skrll        considering that -a is an abbreviation for --alternate.  This is
    540       1.1     skrll        necessary because -a=<FILE> is a valid switch but getopt would
    541       1.1     skrll        normally reject it since --alternate does not take an argument.  */
    542       1.1     skrll     ,{"a", optional_argument, NULL, 'a'}
    543       1.1     skrll     /* Handle -al=<FILE>.  */
    544   1.1.1.4  christos     ,{"al", optional_argument, NULL, OPTION_AL}
    545   1.1.1.2  christos     ,{"compress-debug-sections", optional_argument, NULL, OPTION_COMPRESS_DEBUG}
    546       1.1     skrll     ,{"nocompress-debug-sections", no_argument, NULL, OPTION_NOCOMPRESS_DEBUG}
    547       1.1     skrll     ,{"debug-prefix-map", required_argument, NULL, OPTION_DEBUG_PREFIX_MAP}
    548       1.1     skrll     ,{"defsym", required_argument, NULL, OPTION_DEFSYM}
    549       1.1     skrll     ,{"dump-config", no_argument, NULL, OPTION_DUMPCONFIG}
    550       1.1     skrll     ,{"emulation", required_argument, NULL, OPTION_EMULATION}
    551       1.1     skrll #if defined OBJ_ELF || defined OBJ_MAYBE_ELF
    552       1.1     skrll     ,{"execstack", no_argument, NULL, OPTION_EXECSTACK}
    553   1.1.1.2  christos     ,{"noexecstack", no_argument, NULL, OPTION_NOEXECSTACK}
    554   1.1.1.5  christos     ,{"size-check", required_argument, NULL, OPTION_SIZE_CHECK}
    555   1.1.1.4  christos     ,{"elf-stt-common", required_argument, NULL, OPTION_ELF_STT_COMMON}
    556   1.1.1.7  christos     ,{"sectname-subst", no_argument, NULL, OPTION_SECTNAME_SUBST}
    557  1.1.1.11  christos     ,{"generate-missing-build-notes", required_argument, NULL, OPTION_ELF_BUILD_NOTES}
    558  1.1.1.12  christos     ,{"gsframe", optional_argument, NULL, OPTION_SFRAME}
    559  1.1.1.10  christos     ,{"gsframe-3", no_argument, NULL, OPTION_SFRAME_3}
    560  1.1.1.10  christos # if defined (TARGET_USE_SCFI) && defined (TARGET_USE_GINSN)
    561  1.1.1.10  christos     ,{"scfi", required_argument, NULL, OPTION_SCFI}
    562  1.1.1.10  christos # endif
    563       1.1     skrll #endif /* OBJ_ELF || OBJ_MAYBE_ELF.  */
    564   1.1.1.9  christos     ,{"fatal-warnings", no_argument, NULL, OPTION_WARN_FATAL}
    565   1.1.1.9  christos     ,{"gdwarf-2", no_argument, NULL, OPTION_GDWARF_2}
    566   1.1.1.9  christos     ,{"gdwarf-3", no_argument, NULL, OPTION_GDWARF_3}
    567   1.1.1.9  christos     ,{"gdwarf-4", no_argument, NULL, OPTION_GDWARF_4}
    568   1.1.1.9  christos     ,{"gdwarf-5", no_argument, NULL, OPTION_GDWARF_5}
    569       1.1     skrll     /* GCC uses --gdwarf-2 but GAS used to to use --gdwarf2,
    570   1.1.1.9  christos        so we keep it here for backwards compatibility.  */
    571   1.1.1.4  christos     ,{"gdwarf2", no_argument, NULL, OPTION_GDWARF_2}
    572   1.1.1.8  christos     ,{"gdwarf-sections", no_argument, NULL, OPTION_GDWARF_SECTIONS}
    573  1.1.1.10  christos     ,{"gdwarf-cie-version", required_argument, NULL, OPTION_GDWARF_CIE_VERSION}
    574  1.1.1.10  christos #if defined (TE_PE) && defined (O_secrel)
    575  1.1.1.10  christos     ,{"gcodeview", no_argument, NULL, OPTION_GCODEVIEW}
    576       1.1     skrll #endif
    577       1.1     skrll     ,{"gen-debug", no_argument, NULL, 'g'}
    578       1.1     skrll     ,{"gstabs", no_argument, NULL, OPTION_GSTABS}
    579       1.1     skrll     ,{"gstabs+", no_argument, NULL, OPTION_GSTABS_PLUS}
    580       1.1     skrll     ,{"hash-size", required_argument, NULL, OPTION_HASH_TABLE_SIZE}
    581       1.1     skrll     ,{"help", no_argument, NULL, OPTION_HELP}
    582       1.1     skrll #ifdef HAVE_ITBL_CPU
    583       1.1     skrll     /* New option for extending instruction set (see also -t above).
    584       1.1     skrll        The "-t file" or "--itbl file" option extends the basic set of
    585       1.1     skrll        valid instructions by reading "file", a text file containing a
    586       1.1     skrll        list of instruction formats.  The additional opcodes and their
    587       1.1     skrll        formats are added to the built-in set of instructions, and
    588       1.1     skrll        mnemonics for new registers may also be defined.  */
    589       1.1     skrll     ,{"itbl", required_argument, NULL, 't'}
    590       1.1     skrll #endif
    591       1.1     skrll     /* getopt allows abbreviations, so we do this to stop it from
    592       1.1     skrll        treating -k as an abbreviation for --keep-locals.  Some
    593       1.1     skrll        ports use -k to enable PIC assembly.  */
    594       1.1     skrll     ,{"keep-locals", no_argument, NULL, 'L'}
    595  1.1.1.11  christos     ,{"keep-locals", no_argument, NULL, 'L'}
    596       1.1     skrll #ifndef NO_LISTING
    597       1.1     skrll     ,{"listing-lhs-width", required_argument, NULL, OPTION_LISTING_LHS_WIDTH}
    598       1.1     skrll     ,{"listing-lhs-width2", required_argument, NULL, OPTION_LISTING_LHS_WIDTH2}
    599       1.1     skrll     ,{"listing-rhs-width", required_argument, NULL, OPTION_LISTING_RHS_WIDTH}
    600  1.1.1.11  christos     ,{"listing-cont-lines", required_argument, NULL, OPTION_LISTING_CONT_LINES}
    601       1.1     skrll #endif
    602       1.1     skrll     ,{"MD", required_argument, NULL, OPTION_DEPFILE}
    603       1.1     skrll     ,{"mri", no_argument, NULL, 'M'}
    604   1.1.1.5  christos     ,{"nocpp", no_argument, NULL, OPTION_NOCPP}
    605  1.1.1.11  christos     ,{"no-pad-sections", no_argument, NULL, OPTION_NO_PAD_SECTIONS}
    606       1.1     skrll     ,{"no-info", no_argument, NULL, OPTION_NOINFO}
    607       1.1     skrll     ,{"no-warn", no_argument, NULL, 'W'}
    608       1.1     skrll     ,{"reduce-memory-overheads", no_argument, NULL, OPTION_REDUCE_MEMORY_OVERHEADS}
    609       1.1     skrll     ,{"statistics", no_argument, NULL, OPTION_STATISTICS}
    610  1.1.1.11  christos     ,{"strip-local-absolute", no_argument, NULL, OPTION_STRIP_LOCAL_ABSOLUTE}
    611       1.1     skrll     ,{"emit-local-absolute", no_argument, NULL, OPTION_EMIT_LOCAL_ABSOLUTE}
    612  1.1.1.11  christos     ,{"version", no_argument, NULL, OPTION_VERSION}
    613       1.1     skrll     ,{"verbose", no_argument, NULL, 'v'}
    614       1.1     skrll     ,{"target-help", no_argument, NULL, OPTION_TARGET_HELP}
    615  1.1.1.11  christos     ,{"traditional-format", no_argument, NULL, OPTION_TRADITIONAL_FORMAT}
    616       1.1     skrll     ,{"info", no_argument, NULL, OPTION_INFO}
    617   1.1.1.9  christos     ,{"warn", no_argument, NULL, OPTION_WARN}
    618       1.1     skrll     ,{"multibyte-handling", required_argument, NULL, OPTION_MULTIBYTE_HANDLING}
    619       1.1     skrll   };
    620       1.1     skrll 
    621       1.1     skrll   /* Construct the option lists from the standard list and the target
    622       1.1     skrll      dependent list.  Include space for an extra NULL option and
    623       1.1     skrll      always NULL terminate.  */
    624   1.1.1.2  christos   shortopts = concat (std_shortopts, md_shortopts, (char *) NULL);
    625   1.1.1.2  christos   longopts = (struct option *) xmalloc (sizeof (std_longopts)
    626       1.1     skrll                                         + md_longopts_size + sizeof (struct option));
    627       1.1     skrll   memcpy (longopts, std_longopts, sizeof (std_longopts));
    628       1.1     skrll   memcpy (((char *) longopts) + sizeof (std_longopts), md_longopts, md_longopts_size);
    629       1.1     skrll   memset (((char *) longopts) + sizeof (std_longopts) + md_longopts_size,
    630       1.1     skrll 	  0, sizeof (struct option));
    631       1.1     skrll 
    632       1.1     skrll   /* Make a local copy of the old argv.  */
    633       1.1     skrll   old_argc = *pargc;
    634       1.1     skrll   old_argv = *pargv;
    635       1.1     skrll 
    636  1.1.1.10  christos   /* Initialize a new argv that contains no options.  */
    637       1.1     skrll   new_argv = notes_alloc (sizeof (char *) * (old_argc + 1));
    638       1.1     skrll   new_argv[0] = old_argv[0];
    639       1.1     skrll   new_argc = 1;
    640       1.1     skrll   new_argv[new_argc] = NULL;
    641       1.1     skrll 
    642       1.1     skrll   while (1)
    643       1.1     skrll     {
    644       1.1     skrll       /* getopt_long_only is like getopt_long, but '-' as well as '--' can
    645       1.1     skrll 	 indicate a long option.  */
    646       1.1     skrll       int longind;
    647       1.1     skrll       int optc = getopt_long_only (old_argc, old_argv, shortopts, longopts,
    648       1.1     skrll 				   &longind);
    649       1.1     skrll 
    650       1.1     skrll       if (optc == -1)
    651       1.1     skrll 	break;
    652       1.1     skrll 
    653       1.1     skrll       switch (optc)
    654       1.1     skrll 	{
    655       1.1     skrll 	default:
    656       1.1     skrll 	  /* md_parse_option should return 1 if it recognizes optc,
    657       1.1     skrll 	     0 if not.  */
    658       1.1     skrll 	  if (md_parse_option (optc, optarg) != 0)
    659       1.1     skrll 	    break;
    660       1.1     skrll 	  /* `-v' isn't included in the general short_opts list, so check for
    661       1.1     skrll 	     it explicitly here before deciding we've gotten a bad argument.  */
    662       1.1     skrll 	  if (optc == 'v')
    663  1.1.1.11  christos 	    {
    664  1.1.1.11  christos 	case 'v':
    665  1.1.1.11  christos 	      print_version_id ();
    666       1.1     skrll 	      verbose = 1;
    667       1.1     skrll 	      break;
    668  1.1.1.11  christos 	    }
    669  1.1.1.11  christos 	  else if (is_a_char (optc))
    670  1.1.1.11  christos 	    as_bad (_("unrecognized option `-%c%s'"), optc, optarg ? optarg : "");
    671  1.1.1.11  christos 	  else if (optarg)
    672       1.1     skrll 	    as_bad (_("unrecognized option `--%s=%s'"), longopts[longind].name, optarg);
    673  1.1.1.11  christos 	  else
    674       1.1     skrll 	    as_bad (_("unrecognized option `--%s'"), longopts[longind].name);
    675       1.1     skrll 	  /* Fall through.  */
    676       1.1     skrll 
    677       1.1     skrll 	case '?':
    678       1.1     skrll 	  exit (EXIT_FAILURE);
    679       1.1     skrll 
    680       1.1     skrll 	case 1:			/* File name.  */
    681   1.1.1.5  christos 	  if (!strcmp (optarg, "-"))
    682       1.1     skrll 	    optarg = (char *) "";
    683       1.1     skrll 	  new_argv[new_argc++] = optarg;
    684       1.1     skrll 	  new_argv[new_argc] = NULL;
    685       1.1     skrll 	  break;
    686       1.1     skrll 
    687       1.1     skrll 	case OPTION_TARGET_HELP:
    688       1.1     skrll 	  md_show_usage (stdout);
    689       1.1     skrll 	  exit (EXIT_SUCCESS);
    690       1.1     skrll 
    691       1.1     skrll 	case OPTION_HELP:
    692       1.1     skrll 	  show_usage (stdout);
    693       1.1     skrll 	  exit (EXIT_SUCCESS);
    694       1.1     skrll 
    695       1.1     skrll 	case OPTION_NOCPP:
    696       1.1     skrll 	  break;
    697   1.1.1.5  christos 
    698   1.1.1.5  christos 	case OPTION_NO_PAD_SECTIONS:
    699   1.1.1.5  christos 	  do_not_pad_sections_to_alignment = 1;
    700   1.1.1.5  christos 	  break;
    701       1.1     skrll 
    702       1.1     skrll 	case OPTION_STATISTICS:
    703       1.1     skrll 	  flag_print_statistics = 1;
    704       1.1     skrll 	  break;
    705       1.1     skrll 
    706       1.1     skrll 	case OPTION_STRIP_LOCAL_ABSOLUTE:
    707       1.1     skrll 	  flag_strip_local_absolute = 1;
    708       1.1     skrll 	  break;
    709  1.1.1.11  christos 
    710  1.1.1.11  christos 	case OPTION_EMIT_LOCAL_ABSOLUTE:
    711  1.1.1.11  christos 	  flag_strip_local_absolute = -1;
    712  1.1.1.11  christos 	  break;
    713       1.1     skrll 
    714       1.1     skrll 	case OPTION_TRADITIONAL_FORMAT:
    715       1.1     skrll 	  flag_traditional_format = 1;
    716       1.1     skrll 	  break;
    717   1.1.1.9  christos 
    718   1.1.1.9  christos 	case OPTION_MULTIBYTE_HANDLING:
    719   1.1.1.9  christos 	  if (strcmp (optarg, "allow") == 0)
    720   1.1.1.9  christos 	    multibyte_handling = multibyte_allow;
    721   1.1.1.9  christos 	  else if (strcmp (optarg, "warn") == 0)
    722   1.1.1.9  christos 	    multibyte_handling = multibyte_warn;
    723   1.1.1.9  christos 	  else if (strcmp (optarg, "warn-sym-only") == 0)
    724   1.1.1.9  christos 	    multibyte_handling = multibyte_warn_syms;
    725   1.1.1.9  christos 	  else if (strcmp (optarg, "warn_sym_only") == 0)
    726   1.1.1.9  christos 	    multibyte_handling = multibyte_warn_syms;
    727   1.1.1.9  christos 	  else
    728   1.1.1.9  christos 	    as_fatal (_("unexpected argument to --multibyte-input-option: '%s'"), optarg);
    729   1.1.1.9  christos 	  break;
    730       1.1     skrll 
    731       1.1     skrll 	case OPTION_VERSION:
    732       1.1     skrll 	  /* This output is intended to follow the GNU standards document.  */
    733  1.1.1.12  christos 	  printf (_("GNU assembler %s\n"), BFD_VERSION_STRING);
    734       1.1     skrll 	  printf (_("Copyright (C) 2026 Free Software Foundation, Inc.\n"));
    735       1.1     skrll 	  printf (_("\
    736       1.1     skrll This program is free software; you may redistribute it under the terms of\n\
    737       1.1     skrll the GNU General Public License version 3 or later.\n\
    738   1.1.1.5  christos This program has absolutely no warranty.\n"));
    739   1.1.1.5  christos #ifdef TARGET_WITH_CPU
    740   1.1.1.5  christos 	  printf (_("This assembler was configured for a target of `%s' "
    741   1.1.1.5  christos 		    "and default,\ncpu type `%s'.\n"),
    742   1.1.1.5  christos 		  TARGET_ALIAS, TARGET_WITH_CPU);
    743       1.1     skrll #else
    744       1.1     skrll 	  printf (_("This assembler was configured for a target of `%s'.\n"),
    745   1.1.1.5  christos 		  TARGET_ALIAS);
    746       1.1     skrll #endif
    747       1.1     skrll 	  exit (EXIT_SUCCESS);
    748       1.1     skrll 
    749       1.1     skrll 	case OPTION_EMULATION:
    750       1.1     skrll #ifdef USE_EMULATIONS
    751       1.1     skrll 	  if (strcmp (optarg, this_emulation->name))
    752       1.1     skrll 	    as_fatal (_("multiple emulation names specified"));
    753       1.1     skrll #else
    754       1.1     skrll 	  as_fatal (_("emulations not handled in this configuration"));
    755       1.1     skrll #endif
    756       1.1     skrll 	  break;
    757       1.1     skrll 
    758       1.1     skrll 	case OPTION_DUMPCONFIG:
    759       1.1     skrll 	  fprintf (stderr, _("alias = %s\n"), TARGET_ALIAS);
    760       1.1     skrll 	  fprintf (stderr, _("canonical = %s\n"), TARGET_CANONICAL);
    761       1.1     skrll 	  fprintf (stderr, _("cpu-type = %s\n"), TARGET_CPU);
    762       1.1     skrll #ifdef TARGET_OBJ_FORMAT
    763       1.1     skrll 	  fprintf (stderr, _("format = %s\n"), TARGET_OBJ_FORMAT);
    764       1.1     skrll #endif
    765       1.1     skrll #ifdef TARGET_FORMAT
    766       1.1     skrll 	  fprintf (stderr, _("bfd-target = %s\n"), TARGET_FORMAT);
    767       1.1     skrll #endif
    768       1.1     skrll 	  exit (EXIT_SUCCESS);
    769   1.1.1.2  christos 
    770   1.1.1.4  christos 	case OPTION_COMPRESS_DEBUG:
    771   1.1.1.4  christos 	  if (optarg)
    772   1.1.1.4  christos 	    {
    773  1.1.1.10  christos #if defined OBJ_ELF || defined OBJ_MAYBE_ELF
    774  1.1.1.10  christos 	      flag_compress_debug = bfd_get_compression_algorithm (optarg);
    775  1.1.1.10  christos #ifndef HAVE_ZSTD
    776  1.1.1.10  christos 	      if (flag_compress_debug == COMPRESS_DEBUG_ZSTD)
    777  1.1.1.10  christos 		  as_fatal (_ ("--compress-debug-sections=zstd: gas is not "
    778  1.1.1.10  christos 			       "built with zstd support"));
    779  1.1.1.10  christos #endif
    780   1.1.1.4  christos 	      if (flag_compress_debug == COMPRESS_UNKNOWN)
    781   1.1.1.4  christos 		as_fatal (_("Invalid --compress-debug-sections option: `%s'"),
    782   1.1.1.2  christos 			  optarg);
    783   1.1.1.4  christos #else
    784   1.1.1.4  christos 	      as_fatal (_("--compress-debug-sections=%s is unsupported"),
    785   1.1.1.4  christos 			optarg);
    786   1.1.1.4  christos #endif
    787   1.1.1.4  christos 	    }
    788  1.1.1.10  christos 	  else
    789   1.1.1.2  christos 	    flag_compress_debug = DEFAULT_COMPRESSED_DEBUG_ALGORITHM;
    790   1.1.1.2  christos 	  break;
    791   1.1.1.2  christos 
    792   1.1.1.4  christos 	case OPTION_NOCOMPRESS_DEBUG:
    793   1.1.1.2  christos 	  flag_compress_debug = COMPRESS_DEBUG_NONE;
    794   1.1.1.2  christos 	  break;
    795       1.1     skrll 
    796       1.1     skrll 	case OPTION_DEBUG_PREFIX_MAP:
    797       1.1     skrll 	  add_debug_prefix_map (optarg);
    798       1.1     skrll 	  break;
    799       1.1     skrll 
    800       1.1     skrll 	case OPTION_DEFSYM:
    801       1.1     skrll 	  {
    802       1.1     skrll 	    char *s;
    803       1.1     skrll 	    valueT i;
    804       1.1     skrll 	    struct defsym_list *n;
    805       1.1     skrll 
    806       1.1     skrll 	    for (s = optarg; *s != '\0' && *s != '='; s++)
    807       1.1     skrll 	      ;
    808       1.1     skrll 	    if (*s == '\0')
    809       1.1     skrll 	      as_fatal (_("bad defsym; format is --defsym name=value"));
    810  1.1.1.11  christos 	    *s++ = '\0';
    811   1.1.1.5  christos 	    i = bfd_scan_vma (s, NULL, 0);
    812       1.1     skrll 	    n = XNEW (struct defsym_list);
    813       1.1     skrll 	    n->next = defsyms;
    814       1.1     skrll 	    n->name = optarg;
    815       1.1     skrll 	    n->value = i;
    816       1.1     skrll 	    defsyms = n;
    817       1.1     skrll 	  }
    818       1.1     skrll 	  break;
    819       1.1     skrll 
    820       1.1     skrll #ifdef HAVE_ITBL_CPU
    821       1.1     skrll 	case 't':
    822       1.1     skrll 	  {
    823       1.1     skrll 	    /* optarg is the name of the file containing the instruction
    824       1.1     skrll 	       formats, opcodes, register names, etc.  */
    825       1.1     skrll 	    if (optarg == NULL)
    826       1.1     skrll 	      {
    827       1.1     skrll 		as_warn (_("no file name following -t option"));
    828       1.1     skrll 		break;
    829       1.1     skrll 	      }
    830       1.1     skrll 
    831       1.1     skrll 	    /* Parse the file and add the new instructions to our internal
    832       1.1     skrll 	       table.  If multiple instruction tables are specified, the
    833       1.1     skrll 	       information from this table gets appended onto the existing
    834  1.1.1.10  christos 	       internal table.  */
    835       1.1     skrll 	    if (itbl_parse (optarg) != 0)
    836  1.1.1.10  christos 	      as_fatal (_("failed to read instruction table %s\n"),
    837       1.1     skrll 			optarg);
    838       1.1     skrll 	  }
    839       1.1     skrll 	  break;
    840       1.1     skrll #endif
    841       1.1     skrll 
    842       1.1     skrll 	case OPTION_DEPFILE:
    843       1.1     skrll 	  start_dependencies (optarg);
    844       1.1     skrll 	  break;
    845       1.1     skrll 
    846       1.1     skrll 	case 'g':
    847       1.1     skrll 	  /* Some backends, eg Alpha and Mips, use the -g switch for their
    848       1.1     skrll 	     own purposes.  So we check here for an explicit -g and allow
    849       1.1     skrll 	     the backend to decide if it wants to process it.  */
    850       1.1     skrll 	  if (   old_argv[optind - 1][1] == 'g'
    851       1.1     skrll 	      && md_parse_option (optc, optarg))
    852       1.1     skrll 	    continue;
    853   1.1.1.9  christos 
    854   1.1.1.9  christos 	  /* We end up here for any -gsomething-not-already-a-long-option.
    855   1.1.1.9  christos 	     give some useful feedback on not (yet) supported -gdwarfxxx
    856   1.1.1.9  christos 	     versions/sections/options.  */
    857   1.1.1.9  christos 	  if (startswith (old_argv[optind - 1], "-gdwarf"))
    858   1.1.1.9  christos 	    as_fatal (_("unknown DWARF option %s\n"), old_argv[optind - 1]);
    859   1.1.1.9  christos 	  else if (old_argv[optind - 1][1] == 'g' && optarg != NULL)
    860   1.1.1.9  christos 	    as_fatal (_("unknown option `%s'"), old_argv[optind - 1]);
    861       1.1     skrll 
    862       1.1     skrll 	  if (md_debug_format_selector)
    863       1.1     skrll 	    debug_type = md_debug_format_selector (& use_gnu_debug_info_extensions);
    864   1.1.1.9  christos 	  else if (IS_ELF)
    865   1.1.1.9  christos 	    {
    866   1.1.1.9  christos 	      debug_type = DEBUG_DWARF2;
    867   1.1.1.9  christos 	      dwarf_level = 2;
    868       1.1     skrll 	    }
    869       1.1     skrll 	  else
    870       1.1     skrll 	    debug_type = DEBUG_STABS;
    871       1.1     skrll 	  break;
    872       1.1     skrll 
    873       1.1     skrll 	case OPTION_GSTABS_PLUS:
    874       1.1     skrll 	  use_gnu_debug_info_extensions = 1;
    875       1.1     skrll 	  /* Fall through.  */
    876       1.1     skrll 	case OPTION_GSTABS:
    877       1.1     skrll 	  debug_type = DEBUG_STABS;
    878       1.1     skrll 	  break;
    879   1.1.1.9  christos 
    880   1.1.1.9  christos 	case OPTION_GDWARF_2:
    881   1.1.1.9  christos 	  debug_type = DEBUG_DWARF2;
    882   1.1.1.9  christos 	  dwarf_level = 2;
    883   1.1.1.9  christos 	  break;
    884   1.1.1.9  christos 
    885   1.1.1.9  christos 	case OPTION_GDWARF_3:
    886   1.1.1.9  christos 	  debug_type = DEBUG_DWARF2;
    887   1.1.1.9  christos 	  dwarf_level = 3;
    888   1.1.1.9  christos 	  break;
    889   1.1.1.9  christos 
    890   1.1.1.9  christos 	case OPTION_GDWARF_4:
    891   1.1.1.9  christos 	  debug_type = DEBUG_DWARF2;
    892   1.1.1.9  christos 	  dwarf_level = 4;
    893   1.1.1.9  christos 	  break;
    894   1.1.1.9  christos 
    895       1.1     skrll 	case OPTION_GDWARF_5:
    896   1.1.1.9  christos 	  debug_type = DEBUG_DWARF2;
    897       1.1     skrll 	  dwarf_level = 5;
    898       1.1     skrll 	  break;
    899   1.1.1.4  christos 
    900   1.1.1.9  christos 	case OPTION_GDWARF_SECTIONS:
    901   1.1.1.4  christos 	  flag_dwarf_sections = true;
    902   1.1.1.4  christos 	  break;
    903  1.1.1.10  christos 
    904  1.1.1.10  christos #if defined (TE_PE) && defined (O_secrel)
    905  1.1.1.10  christos 	case OPTION_GCODEVIEW:
    906  1.1.1.10  christos 	  debug_type = DEBUG_CODEVIEW;
    907  1.1.1.10  christos 	  break;
    908  1.1.1.10  christos #endif
    909   1.1.1.8  christos 
    910   1.1.1.8  christos         case OPTION_GDWARF_CIE_VERSION:
    911   1.1.1.8  christos 	  flag_dwarf_cie_version = atoi (optarg);
    912   1.1.1.8  christos           /* The available CIE versions are 1 (DWARF 2), 3 (DWARF 3), and 4
    913   1.1.1.8  christos              (DWARF 4 and 5).  */
    914   1.1.1.8  christos 	  if (flag_dwarf_cie_version < 1
    915   1.1.1.8  christos               || flag_dwarf_cie_version == 2
    916   1.1.1.8  christos               || flag_dwarf_cie_version > 4)
    917   1.1.1.9  christos             as_fatal (_("Invalid --gdwarf-cie-version `%s'"), optarg);
    918   1.1.1.9  christos 	  switch (flag_dwarf_cie_version)
    919   1.1.1.9  christos 	    {
    920   1.1.1.9  christos 	    case 1:
    921   1.1.1.9  christos 	      if (dwarf_level < 2)
    922   1.1.1.9  christos 		dwarf_level = 2;
    923   1.1.1.9  christos 	      break;
    924   1.1.1.9  christos 	    case 3:
    925   1.1.1.9  christos 	      if (dwarf_level < 3)
    926   1.1.1.9  christos 		dwarf_level = 3;
    927   1.1.1.9  christos 	      break;
    928   1.1.1.9  christos 	    default:
    929   1.1.1.9  christos 	      if (dwarf_level < 4)
    930   1.1.1.9  christos 		dwarf_level = 4;
    931   1.1.1.9  christos 	      break;
    932   1.1.1.8  christos 	    }
    933   1.1.1.8  christos 	  break;
    934       1.1     skrll 
    935       1.1     skrll 	case 'J':
    936       1.1     skrll 	  flag_signed_overflow_ok = 1;
    937       1.1     skrll 	  break;
    938       1.1     skrll 
    939       1.1     skrll #ifndef WORKING_DOT_WORD
    940       1.1     skrll 	case 'K':
    941       1.1     skrll 	  flag_warn_displacement = 1;
    942       1.1     skrll 	  break;
    943       1.1     skrll #endif
    944       1.1     skrll 	case 'L':
    945       1.1     skrll 	  flag_keep_locals = 1;
    946       1.1     skrll 	  break;
    947  1.1.1.11  christos 
    948       1.1     skrll #ifndef NO_LISTING
    949       1.1     skrll 	case OPTION_LISTING_LHS_WIDTH:
    950       1.1     skrll 	  listing_lhs_width = atoi (optarg);
    951       1.1     skrll 	  if (listing_lhs_width_second < listing_lhs_width)
    952       1.1     skrll 	    listing_lhs_width_second = listing_lhs_width;
    953       1.1     skrll 	  break;
    954       1.1     skrll 	case OPTION_LISTING_LHS_WIDTH2:
    955  1.1.1.11  christos 	  {
    956       1.1     skrll 	    unsigned int tmp = atoi (optarg);
    957       1.1     skrll 
    958       1.1     skrll 	    if (tmp > listing_lhs_width)
    959       1.1     skrll 	      listing_lhs_width_second = tmp;
    960       1.1     skrll 	  }
    961       1.1     skrll 	  break;
    962       1.1     skrll 	case OPTION_LISTING_RHS_WIDTH:
    963       1.1     skrll 	  listing_rhs_width = atoi (optarg);
    964       1.1     skrll 	  break;
    965       1.1     skrll 	case OPTION_LISTING_CONT_LINES:
    966       1.1     skrll 	  listing_lhs_cont_lines = atoi (optarg);
    967  1.1.1.11  christos 	  break;
    968       1.1     skrll #endif /* NO_LISTING */
    969       1.1     skrll 
    970       1.1     skrll 	case 'M':
    971       1.1     skrll 	  flag_mri = 1;
    972       1.1     skrll #ifdef TC_M68K
    973       1.1     skrll 	  flag_m68k_mri = 1;
    974       1.1     skrll #endif
    975       1.1     skrll 	  break;
    976       1.1     skrll 
    977       1.1     skrll 	case 'R':
    978       1.1     skrll 	  flag_readonly_data_in_text = 1;
    979       1.1     skrll 	  break;
    980       1.1     skrll 
    981       1.1     skrll 	case 'W':
    982       1.1     skrll 	  flag_no_warnings = 1;
    983       1.1     skrll 	  break;
    984       1.1     skrll 
    985       1.1     skrll 	case OPTION_WARN:
    986       1.1     skrll 	  flag_no_warnings = 0;
    987       1.1     skrll 	  flag_fatal_warnings = 0;
    988       1.1     skrll 	  break;
    989       1.1     skrll 
    990       1.1     skrll 	case OPTION_WARN_FATAL:
    991       1.1     skrll 	  flag_no_warnings = 0;
    992       1.1     skrll 	  flag_fatal_warnings = 1;
    993       1.1     skrll 	  break;
    994  1.1.1.11  christos 
    995  1.1.1.11  christos 	case OPTION_NOINFO:
    996  1.1.1.11  christos 	  flag_no_information = true;
    997  1.1.1.11  christos 	  break;
    998  1.1.1.11  christos 
    999  1.1.1.11  christos 	case OPTION_INFO:
   1000  1.1.1.11  christos 	  flag_no_information = false;
   1001  1.1.1.11  christos 	  break;
   1002       1.1     skrll 
   1003       1.1     skrll #if defined OBJ_ELF || defined OBJ_MAYBE_ELF
   1004       1.1     skrll 	case OPTION_EXECSTACK:
   1005       1.1     skrll 	  flag_execstack = 1;
   1006       1.1     skrll 	  flag_noexecstack = 0;
   1007       1.1     skrll 	  break;
   1008       1.1     skrll 
   1009       1.1     skrll 	case OPTION_NOEXECSTACK:
   1010       1.1     skrll 	  flag_noexecstack = 1;
   1011       1.1     skrll 	  flag_execstack = 0;
   1012   1.1.1.2  christos 	  break;
   1013  1.1.1.10  christos 
   1014  1.1.1.10  christos # if defined (TARGET_USE_SCFI) && defined (TARGET_USE_GINSN)
   1015  1.1.1.10  christos 	case OPTION_SCFI:
   1016  1.1.1.10  christos 	  if (optarg && strcasecmp (optarg, "experimental") == 0)
   1017  1.1.1.10  christos 	    flag_synth_cfi = SYNTH_CFI_EXPERIMENTAL;
   1018  1.1.1.10  christos 	  else
   1019  1.1.1.10  christos 	    as_fatal (_("Invalid --scfi= option: `%s'; suggested option: experimental"),
   1020  1.1.1.10  christos 		      optarg);
   1021  1.1.1.10  christos 	  break;
   1022  1.1.1.10  christos # endif
   1023   1.1.1.2  christos 
   1024   1.1.1.2  christos 	case OPTION_SIZE_CHECK:
   1025   1.1.1.9  christos 	  if (strcasecmp (optarg, "error") == 0)
   1026   1.1.1.2  christos 	    flag_allow_nonconst_size = false;
   1027   1.1.1.9  christos 	  else if (strcasecmp (optarg, "warning") == 0)
   1028   1.1.1.2  christos 	    flag_allow_nonconst_size = true;
   1029   1.1.1.2  christos 	  else
   1030   1.1.1.2  christos 	    as_fatal (_("Invalid --size-check= option: `%s'"), optarg);
   1031   1.1.1.4  christos 	  break;
   1032   1.1.1.5  christos 
   1033   1.1.1.5  christos 	case OPTION_ELF_STT_COMMON:
   1034   1.1.1.5  christos 	  if (strcasecmp (optarg, "no") == 0)
   1035   1.1.1.5  christos 	    flag_use_elf_stt_common = 0;
   1036   1.1.1.5  christos 	  else if (strcasecmp (optarg, "yes") == 0)
   1037   1.1.1.5  christos 	    flag_use_elf_stt_common = 1;
   1038   1.1.1.5  christos 	  else
   1039   1.1.1.5  christos 	    as_fatal (_("Invalid --elf-stt-common= option: `%s'"),
   1040   1.1.1.5  christos 		      optarg);
   1041   1.1.1.5  christos 	  break;
   1042   1.1.1.4  christos 
   1043   1.1.1.4  christos 	case OPTION_SECTNAME_SUBST:
   1044   1.1.1.4  christos 	  flag_sectname_subst = 1;
   1045   1.1.1.7  christos 	  break;
   1046   1.1.1.7  christos 
   1047   1.1.1.7  christos 	case OPTION_ELF_BUILD_NOTES:
   1048   1.1.1.9  christos 	  if (strcasecmp (optarg, "no") == 0)
   1049   1.1.1.7  christos 	    flag_generate_build_notes = false;
   1050   1.1.1.9  christos 	  else if (strcasecmp (optarg, "yes") == 0)
   1051   1.1.1.7  christos 	    flag_generate_build_notes = true;
   1052   1.1.1.7  christos 	  else
   1053   1.1.1.7  christos 	    as_fatal (_("Invalid --generate-missing-build-notes option: `%s'"),
   1054   1.1.1.7  christos 		      optarg);
   1055   1.1.1.7  christos 	  break;
   1056  1.1.1.10  christos 
   1057  1.1.1.11  christos 	case OPTION_SFRAME:
   1058  1.1.1.11  christos 	  if (optarg)
   1059  1.1.1.11  christos 	    {
   1060  1.1.1.11  christos 	      if (strcasecmp (optarg, "no") == 0)
   1061  1.1.1.11  christos 		flag_gen_sframe = GEN_SFRAME_DISABLED;
   1062  1.1.1.11  christos 	      else if (strcasecmp (optarg, "yes") == 0)
   1063  1.1.1.11  christos 		flag_gen_sframe = GEN_SFRAME_ENABLED;
   1064  1.1.1.11  christos 	      else
   1065  1.1.1.11  christos 		as_fatal (_("Invalid --gsframe option: `%s'"), optarg);
   1066  1.1.1.11  christos 	    }
   1067  1.1.1.11  christos 	  else
   1068  1.1.1.10  christos 	    flag_gen_sframe = GEN_SFRAME_ENABLED;
   1069  1.1.1.10  christos 	  break;
   1070  1.1.1.12  christos 
   1071  1.1.1.12  christos 	case OPTION_SFRAME_3:
   1072  1.1.1.12  christos 	  flag_gen_sframe = GEN_SFRAME_ENABLED;
   1073  1.1.1.12  christos 	  flag_gen_sframe_version = GEN_SFRAME_VERSION_3;
   1074  1.1.1.12  christos 	  break;
   1075   1.1.1.7  christos 
   1076   1.1.1.7  christos #endif /* OBJ_ELF */
   1077       1.1     skrll 
   1078       1.1     skrll 	case 'Z':
   1079       1.1     skrll 	  flag_always_generate_output = 1;
   1080       1.1     skrll 	  break;
   1081       1.1     skrll 
   1082       1.1     skrll  	case OPTION_AL:
   1083       1.1     skrll 	  listing |= LISTING_LISTING;
   1084  1.1.1.10  christos 	  if (optarg)
   1085       1.1     skrll 	    listing_filename = notes_strdup (optarg);
   1086       1.1     skrll 	  break;
   1087       1.1     skrll 
   1088       1.1     skrll  	case OPTION_ALTERNATE:
   1089       1.1     skrll  	  optarg = old_argv [optind - 1];
   1090       1.1     skrll  	  while (* optarg == '-')
   1091       1.1     skrll  	    optarg ++;
   1092       1.1     skrll 
   1093       1.1     skrll  	  if (strcmp (optarg, "alternate") == 0)
   1094       1.1     skrll  	    {
   1095       1.1     skrll  	      flag_macro_alternate = 1;
   1096       1.1     skrll  	      break;
   1097       1.1     skrll  	    }
   1098       1.1     skrll  	  optarg ++;
   1099       1.1     skrll  	  /* Fall through.  */
   1100       1.1     skrll 
   1101       1.1     skrll 	case 'a':
   1102       1.1     skrll 	  if (optarg)
   1103       1.1     skrll 	    {
   1104       1.1     skrll 	      if (optarg != old_argv[optind] && optarg[-1] == '=')
   1105       1.1     skrll 		--optarg;
   1106       1.1     skrll 
   1107       1.1     skrll 	      if (md_parse_option (optc, optarg) != 0)
   1108       1.1     skrll 		break;
   1109       1.1     skrll 
   1110       1.1     skrll 	      while (*optarg)
   1111       1.1     skrll 		{
   1112       1.1     skrll 		  switch (*optarg)
   1113       1.1     skrll 		    {
   1114       1.1     skrll 		    case 'c':
   1115       1.1     skrll 		      listing |= LISTING_NOCOND;
   1116       1.1     skrll 		      break;
   1117       1.1     skrll 		    case 'd':
   1118       1.1     skrll 		      listing |= LISTING_NODEBUG;
   1119       1.1     skrll 		      break;
   1120       1.1     skrll 		    case 'g':
   1121       1.1     skrll 		      listing |= LISTING_GENERAL;
   1122       1.1     skrll 		      break;
   1123       1.1     skrll 		    case 'h':
   1124       1.1     skrll 		      listing |= LISTING_HLL;
   1125  1.1.1.10  christos 		      break;
   1126  1.1.1.10  christos 		    case 'i':
   1127  1.1.1.10  christos 		      listing |= LISTING_GINSN_SCFI;
   1128       1.1     skrll 		      break;
   1129       1.1     skrll 		    case 'l':
   1130       1.1     skrll 		      listing |= LISTING_LISTING;
   1131       1.1     skrll 		      break;
   1132       1.1     skrll 		    case 'm':
   1133       1.1     skrll 		      listing |= LISTING_MACEXP;
   1134       1.1     skrll 		      break;
   1135       1.1     skrll 		    case 'n':
   1136       1.1     skrll 		      listing |= LISTING_NOFORM;
   1137       1.1     skrll 		      break;
   1138       1.1     skrll 		    case 's':
   1139       1.1     skrll 		      listing |= LISTING_SYMBOLS;
   1140       1.1     skrll 		      break;
   1141  1.1.1.10  christos 		    case '=':
   1142       1.1     skrll 		      listing_filename = notes_strdup (optarg + 1);
   1143       1.1     skrll 		      optarg += strlen (listing_filename);
   1144       1.1     skrll 		      break;
   1145       1.1     skrll 		    default:
   1146       1.1     skrll 		      as_fatal (_("invalid listing option `%c'"), *optarg);
   1147       1.1     skrll 		      break;
   1148       1.1     skrll 		    }
   1149       1.1     skrll 		  optarg++;
   1150       1.1     skrll 		}
   1151       1.1     skrll 	    }
   1152       1.1     skrll 	  if (!listing)
   1153       1.1     skrll 	    listing = LISTING_DEFAULT;
   1154       1.1     skrll 	  break;
   1155       1.1     skrll 
   1156       1.1     skrll 	case 'D':
   1157       1.1     skrll 	  /* DEBUG is implemented: it debugs different
   1158       1.1     skrll 	     things from other people's assemblers.  */
   1159       1.1     skrll 	  flag_debug = 1;
   1160       1.1     skrll 	  break;
   1161       1.1     skrll 
   1162       1.1     skrll 	case 'f':
   1163       1.1     skrll 	  flag_no_comments = 1;
   1164       1.1     skrll 	  break;
   1165       1.1     skrll 
   1166       1.1     skrll 	case 'I':
   1167  1.1.1.10  christos 	  {			/* Include file directory.  */
   1168       1.1     skrll 	    char *temp = notes_strdup (optarg);
   1169       1.1     skrll 
   1170       1.1     skrll 	    add_include_dir (temp);
   1171       1.1     skrll 	    break;
   1172       1.1     skrll 	  }
   1173       1.1     skrll 
   1174  1.1.1.10  christos 	case 'o':
   1175       1.1     skrll 	  out_file_name = notes_strdup (optarg);
   1176       1.1     skrll 	  break;
   1177       1.1     skrll 
   1178       1.1     skrll 	case 'w':
   1179       1.1     skrll 	  break;
   1180       1.1     skrll 
   1181       1.1     skrll 	case 'X':
   1182       1.1     skrll 	  /* -X means treat warnings as errors.  */
   1183       1.1     skrll 	  break;
   1184       1.1     skrll 
   1185       1.1     skrll 	case OPTION_REDUCE_MEMORY_OVERHEADS:
   1186       1.1     skrll 	  break;
   1187       1.1     skrll 
   1188   1.1.1.9  christos 	case OPTION_HASH_TABLE_SIZE:
   1189       1.1     skrll 	  break;
   1190       1.1     skrll 	}
   1191       1.1     skrll     }
   1192       1.1     skrll 
   1193       1.1     skrll   free (shortopts);
   1194       1.1     skrll   free (longopts);
   1195       1.1     skrll 
   1196       1.1     skrll   *pargc = new_argc;
   1197       1.1     skrll   *pargv = new_argv;
   1198       1.1     skrll 
   1199       1.1     skrll #ifdef md_after_parse_args
   1200       1.1     skrll   md_after_parse_args ();
   1201       1.1     skrll #endif
   1202       1.1     skrll }
   1203  1.1.1.11  christos 
   1204  1.1.1.11  christos /* Pre-define a symbol with its name derived from TMPL (wrapping in
   1205  1.1.1.11  christos    GAS(...)), to value VAL.  */
   1206  1.1.1.11  christos 
   1207  1.1.1.11  christos void
   1208  1.1.1.11  christos predefine_symbol (const char *tmpl, valueT val)
   1209  1.1.1.11  christos {
   1210  1.1.1.11  christos   char *name = xasprintf ("GAS(%s)", tmpl);
   1211  1.1.1.11  christos   symbolS *s;
   1212  1.1.1.11  christos 
   1213  1.1.1.11  christos   /* Also put the symbol in the symbol table, if requested.  */
   1214  1.1.1.11  christos   if (flag_strip_local_absolute < 0)
   1215  1.1.1.11  christos     s = symbol_new (name, absolute_section, &zero_address_frag, val);
   1216  1.1.1.11  christos   else
   1217  1.1.1.11  christos     s = symbol_create (name, absolute_section, &zero_address_frag, val);
   1218  1.1.1.11  christos   S_CLEAR_EXTERNAL (s);
   1219  1.1.1.11  christos   symbol_table_insert (s);
   1220  1.1.1.11  christos 
   1221  1.1.1.11  christos   xfree (name);
   1222  1.1.1.11  christos }
   1223       1.1     skrll 
   1224       1.1     skrll static void
   1225       1.1     skrll dump_statistics (void)
   1226       1.1     skrll {
   1227       1.1     skrll   long run_time = get_run_time () - start_time;
   1228       1.1     skrll 
   1229       1.1     skrll   fprintf (stderr, _("%s: total time in assembly: %ld.%06ld\n"),
   1230       1.1     skrll 	   myname, run_time / 1000000, run_time % 1000000);
   1231       1.1     skrll 
   1232       1.1     skrll   subsegs_print_statistics (stderr);
   1233       1.1     skrll   write_print_statistics (stderr);
   1234       1.1     skrll   symbol_print_statistics (stderr);
   1235       1.1     skrll   read_print_statistics (stderr);
   1236       1.1     skrll 
   1237       1.1     skrll #ifdef tc_print_statistics
   1238       1.1     skrll   tc_print_statistics (stderr);
   1239       1.1     skrll #endif
   1240       1.1     skrll 
   1241       1.1     skrll #ifdef obj_print_statistics
   1242       1.1     skrll   obj_print_statistics (stderr);
   1243       1.1     skrll #endif
   1244       1.1     skrll }
   1245       1.1     skrll 
   1246       1.1     skrll /* Here to attempt 1 pass over each input file.
   1248       1.1     skrll    We scan argv[*] looking for filenames or exactly "" which is
   1249       1.1     skrll    shorthand for stdin. Any argv that is NULL is not a file-name.
   1250       1.1     skrll    We set need_pass_2 TRUE if, after this, we still have unresolved
   1251       1.1     skrll    expressions of the form (unknown value)+-(unknown value).
   1252       1.1     skrll 
   1253       1.1     skrll    Note the un*x semantics: there is only 1 logical input file, but it
   1254       1.1     skrll    may be a catenation of many 'physical' input files.  */
   1255       1.1     skrll 
   1256       1.1     skrll static void
   1257       1.1     skrll perform_an_assembly_pass (int argc, char ** argv)
   1258       1.1     skrll {
   1259       1.1     skrll   int saw_a_file = 0;
   1260       1.1     skrll 
   1261   1.1.1.3  christos   need_pass_2 = 0;
   1262       1.1     skrll 
   1263   1.1.1.3  christos #ifndef OBJ_MACH_O
   1264       1.1     skrll   subseg_set (text_section, 0);
   1265  1.1.1.11  christos #endif
   1266  1.1.1.11  christos 
   1267  1.1.1.11  christos   predefine_symbol ("version", BFD_VERSION);
   1268  1.1.1.11  christos   if (strstr (BFD_VERSION_STRING, "." XSTRING (BFD_VERSION_DATE)) != NULL)
   1269  1.1.1.12  christos     predefine_symbol ("date", BFD_VERSION_DATE);
   1270  1.1.1.12  christos 
   1271  1.1.1.12  christos #ifdef obj_begin
   1272  1.1.1.12  christos   obj_begin ();
   1273       1.1     skrll #endif
   1274       1.1     skrll 
   1275       1.1     skrll   /* This may add symbol table entries, which requires having an open BFD,
   1276       1.1     skrll      and sections already created.  */
   1277       1.1     skrll   md_begin ();
   1278       1.1     skrll #ifdef USING_CGEN
   1279       1.1     skrll   gas_cgen_begin ();
   1280       1.1     skrll #endif
   1281       1.1     skrll 
   1282       1.1     skrll   /* Skip argv[0].  */
   1283       1.1     skrll   argv++;
   1284       1.1     skrll   argc--;
   1285       1.1     skrll 
   1286       1.1     skrll   while (argc--)
   1287       1.1     skrll     {
   1288       1.1     skrll       if (*argv)
   1289       1.1     skrll 	{			/* Is it a file-name argument?  */
   1290       1.1     skrll 	  saw_a_file++;
   1291       1.1     skrll 	  /* argv->"" if stdin desired, else->filename.  */
   1292       1.1     skrll 	  read_a_source_file (*argv);
   1293       1.1     skrll 	}
   1294       1.1     skrll       argv++;			/* Completed that argv.  */
   1295       1.1     skrll     }
   1296       1.1     skrll   if (!saw_a_file)
   1297       1.1     skrll     read_a_source_file ("");
   1298  1.1.1.10  christos }
   1299  1.1.1.10  christos 
   1300       1.1     skrll static void
   1301  1.1.1.10  christos free_notes (void)
   1302  1.1.1.10  christos {
   1303       1.1     skrll   _obstack_free (&notes, NULL);
   1304  1.1.1.10  christos }
   1305       1.1     skrll 
   1306  1.1.1.10  christos /* Early initialisation, before gas prints messages.  */
   1307  1.1.1.10  christos 
   1308  1.1.1.10  christos static void
   1309       1.1     skrll gas_early_init (int *argcp, char ***argvp)
   1310   1.1.1.6  christos {
   1311       1.1     skrll   start_time = get_run_time ();
   1312   1.1.1.9  christos   signal_init ();
   1313       1.1     skrll 
   1314       1.1     skrll #ifdef HAVE_LC_MESSAGES
   1315       1.1     skrll   setlocale (LC_MESSAGES, "");
   1316       1.1     skrll #endif
   1317       1.1     skrll   setlocale (LC_CTYPE, "");
   1318       1.1     skrll   bindtextdomain (PACKAGE, LOCALEDIR);
   1319       1.1     skrll   textdomain (PACKAGE);
   1320       1.1     skrll 
   1321       1.1     skrll   if (debug_memory)
   1322       1.1     skrll     chunksize = 64;
   1323       1.1     skrll 
   1324       1.1     skrll #ifndef OBJ_DEFAULT_OUTPUT_FILE_NAME
   1325       1.1     skrll #define OBJ_DEFAULT_OUTPUT_FILE_NAME "a.out"
   1326       1.1     skrll #endif
   1327       1.1     skrll 
   1328       1.1     skrll   out_file_name = OBJ_DEFAULT_OUTPUT_FILE_NAME;
   1329   1.1.1.8  christos 
   1330   1.1.1.8  christos   hex_init ();
   1331       1.1     skrll   if (bfd_init () != BFD_INIT_MAGIC)
   1332  1.1.1.10  christos     as_fatal (_("libbfd ABI mismatch"));
   1333  1.1.1.10  christos 
   1334       1.1     skrll   obstack_begin (&notes, chunksize);
   1335  1.1.1.10  christos   xatexit (free_notes);
   1336  1.1.1.10  christos 
   1337  1.1.1.10  christos   myname = **argvp;
   1338   1.1.1.7  christos   xmalloc_set_program_name (myname);
   1339  1.1.1.10  christos   bfd_set_error_program_name (myname);
   1340   1.1.1.7  christos 
   1341  1.1.1.10  christos   expandargv (argcp, argvp);
   1342   1.1.1.7  christos 
   1343  1.1.1.10  christos   init_include_dir ();
   1344  1.1.1.10  christos 
   1345  1.1.1.10  christos #ifdef HOST_SPECIAL_INIT
   1346   1.1.1.8  christos   HOST_SPECIAL_INIT (*argcp, *argvp);
   1347  1.1.1.10  christos #endif
   1348  1.1.1.10  christos 
   1349  1.1.1.10  christos #ifdef USE_EMULATIONS
   1350  1.1.1.10  christos   select_emulation_mode (*argcp, *argvp);
   1351  1.1.1.10  christos #endif
   1352  1.1.1.11  christos }
   1353  1.1.1.11  christos 
   1354  1.1.1.11  christos /* Tack on format specific section data and create a proper section
   1355  1.1.1.11  christos    symbol for one of the standard bfd sections.  */
   1356  1.1.1.11  christos 
   1357  1.1.1.11  christos static void
   1358  1.1.1.11  christos bfd_std_section_init (const char *name)
   1359  1.1.1.11  christos {
   1360  1.1.1.11  christos   asection *sec = bfd_make_section_old_way (stdoutput, name);
   1361  1.1.1.11  christos   gas_assert (BFD_SEND (stdoutput, _new_section_hook, (stdoutput, sec)));
   1362  1.1.1.11  christos   subseg_new (name, 0);
   1363  1.1.1.10  christos }
   1364   1.1.1.7  christos 
   1365  1.1.1.10  christos /* The bulk of gas initialisation.  This is after args are parsed.  */
   1366  1.1.1.10  christos 
   1367  1.1.1.10  christos static void
   1368       1.1     skrll gas_init (void)
   1369       1.1     skrll {
   1370       1.1     skrll   symbol_begin ();
   1371       1.1     skrll   frag_init ();
   1372       1.1     skrll   subsegs_begin ();
   1373       1.1     skrll   read_begin ();
   1374  1.1.1.10  christos   input_scrub_begin ();
   1375       1.1     skrll   expr_begin ();
   1376  1.1.1.10  christos   eh_begin ();
   1377       1.1     skrll 
   1378  1.1.1.10  christos   macro_init ();
   1379       1.1     skrll 
   1380  1.1.1.10  christos   dwarf2_init ();
   1381  1.1.1.10  christos 
   1382       1.1     skrll   local_symbol_make (".gasversion.", absolute_section,
   1383  1.1.1.10  christos 		     &predefined_address_frag, BFD_VERSION / 10000UL);
   1384  1.1.1.10  christos 
   1385  1.1.1.10  christos   /* Note: Put new initialisation calls that don't depend on stdoutput
   1386  1.1.1.10  christos      being open above this point.  stdoutput must be open for anything
   1387  1.1.1.10  christos      that might use stdoutput objalloc memory, eg. calling bfd_alloc
   1388       1.1     skrll      or creating global symbols (via bfd_make_empty_symbol).  */
   1389   1.1.1.2  christos   xatexit (output_file_close);
   1390   1.1.1.2  christos   output_file_create (out_file_name);
   1391  1.1.1.10  christos   gas_assert (stdoutput != 0);
   1392  1.1.1.10  christos 
   1393  1.1.1.10  christos   /* Must be called before output_file_close.  xexit calls the xatexit
   1394  1.1.1.10  christos      list in reverse order.  */
   1395  1.1.1.10  christos   if (flag_print_statistics)
   1396   1.1.1.2  christos     xatexit (dump_statistics);
   1397       1.1     skrll 
   1398       1.1     skrll   dot_symbol_init ();
   1399       1.1     skrll 
   1400       1.1     skrll #ifdef tc_init_after_args
   1401       1.1     skrll   tc_init_after_args ();
   1402       1.1     skrll #endif
   1403       1.1     skrll 
   1404       1.1     skrll   itbl_init ();
   1405       1.1     skrll 
   1406       1.1     skrll   /* Now that we have fully initialized, and have created the output
   1407       1.1     skrll      file, define any symbols requested by --defsym command line
   1408       1.1     skrll      arguments.  */
   1409       1.1     skrll   while (defsyms != NULL)
   1410       1.1     skrll     {
   1411       1.1     skrll       symbolS *sym;
   1412   1.1.1.9  christos       struct defsym_list *next;
   1413   1.1.1.9  christos 
   1414       1.1     skrll       sym = symbol_new (defsyms->name, absolute_section,
   1415       1.1     skrll 			&zero_address_frag, defsyms->value);
   1416       1.1     skrll       /* Make symbols defined on the command line volatile, so that they
   1417       1.1     skrll 	 can be redefined inside a source file.  This makes this assembler's
   1418       1.1     skrll 	 behaviour compatible with earlier versions, but it may not be
   1419       1.1     skrll 	 completely intuitive.  */
   1420       1.1     skrll       S_SET_VOLATILE (sym);
   1421       1.1     skrll       symbol_table_insert (sym);
   1422       1.1     skrll       next = defsyms->next;
   1423       1.1     skrll       free (defsyms);
   1424  1.1.1.11  christos       defsyms = next;
   1425  1.1.1.11  christos     }
   1426  1.1.1.11  christos 
   1427  1.1.1.11  christos #ifndef OBJ_MACH_O
   1428  1.1.1.11  christos   /* Create the standard sections, and those the assembler uses
   1429  1.1.1.11  christos      internally.  */
   1430  1.1.1.11  christos   text_section = subseg_new (TEXT_SECTION_NAME, 0);
   1431  1.1.1.11  christos   data_section = subseg_new (DATA_SECTION_NAME, 0);
   1432  1.1.1.11  christos   bss_section = subseg_new (BSS_SECTION_NAME, 0);
   1433  1.1.1.11  christos   /* @@ FIXME -- we're setting the RELOC flag so that sections are assumed
   1434  1.1.1.11  christos      to have relocs, otherwise we don't find out in time.  */
   1435  1.1.1.11  christos   flagword applicable = bfd_applicable_section_flags (stdoutput);
   1436  1.1.1.11  christos   bfd_set_section_flags (text_section,
   1437  1.1.1.11  christos 			 applicable & (SEC_ALLOC | SEC_LOAD | SEC_RELOC
   1438  1.1.1.11  christos 				       | SEC_CODE | SEC_READONLY));
   1439  1.1.1.11  christos   bfd_set_section_flags (data_section,
   1440  1.1.1.11  christos 			 applicable & (SEC_ALLOC | SEC_LOAD | SEC_RELOC
   1441  1.1.1.11  christos 				       | SEC_DATA));
   1442  1.1.1.11  christos   bfd_set_section_flags (bss_section, applicable & SEC_ALLOC);
   1443  1.1.1.11  christos   seg_info (bss_section)->bss = 1;
   1444  1.1.1.11  christos #endif
   1445  1.1.1.11  christos   bfd_std_section_init (BFD_ABS_SECTION_NAME);
   1446  1.1.1.11  christos   bfd_std_section_init (BFD_UND_SECTION_NAME);
   1447  1.1.1.10  christos   reg_section = subseg_new ("*GAS `reg' section*", 0);
   1448       1.1     skrll   expr_section = subseg_new ("*GAS `expr' section*", 0);
   1449  1.1.1.10  christos }
   1450  1.1.1.10  christos 
   1451  1.1.1.10  christos int
   1452  1.1.1.11  christos main (int argc, char ** argv)
   1453  1.1.1.10  christos {
   1454  1.1.1.11  christos #ifndef NO_LISTING
   1455  1.1.1.10  christos   char ** argv_orig = argv;
   1456  1.1.1.10  christos #endif
   1457  1.1.1.10  christos   struct stat sob;
   1458  1.1.1.10  christos 
   1459  1.1.1.10  christos   gas_early_init (&argc, &argv);
   1460  1.1.1.10  christos 
   1461  1.1.1.10  christos   /* Call parse_args before gas_init so that switches like
   1462  1.1.1.10  christos      --hash-size can be honored.  */
   1463  1.1.1.10  christos   parse_args (&argc, &argv);
   1464  1.1.1.10  christos 
   1465  1.1.1.10  christos   if (argc > 1 && stat (out_file_name, &sob) == 0)
   1466  1.1.1.10  christos     {
   1467  1.1.1.10  christos       int i;
   1468  1.1.1.10  christos 
   1469  1.1.1.10  christos       for (i = 1; i < argc; ++i)
   1470  1.1.1.10  christos 	{
   1471  1.1.1.10  christos 	  struct stat sib;
   1472  1.1.1.10  christos 
   1473  1.1.1.10  christos 	  /* Check that the input file and output file are different.  */
   1474  1.1.1.10  christos 	  if (stat (argv[i], &sib) == 0
   1475  1.1.1.10  christos 	      && sib.st_ino == sob.st_ino
   1476  1.1.1.10  christos 	      /* POSIX emulating systems may support stat() but if the
   1477  1.1.1.10  christos 		 underlying file system does not support a file serial number
   1478  1.1.1.10  christos 		 of some kind then they will return 0 for the inode.  So
   1479  1.1.1.10  christos 		 two files with an inode of 0 may not actually be the same.
   1480  1.1.1.10  christos 		 On real POSIX systems no ordinary file will ever have an
   1481  1.1.1.10  christos 		 inode of 0.  */
   1482  1.1.1.10  christos 	      && sib.st_ino != 0
   1483  1.1.1.10  christos 	      /* Different files may have the same inode number if they
   1484  1.1.1.10  christos 		 reside on different devices, so check the st_dev field as
   1485  1.1.1.10  christos 		 well.  */
   1486  1.1.1.10  christos 	      && sib.st_dev == sob.st_dev
   1487  1.1.1.10  christos 	      /* PR 25572: Only check regular files.  Devices, sockets and so
   1488  1.1.1.10  christos 		 on might actually work as both input and output.  Plus there
   1489  1.1.1.10  christos 		 is a use case for using /dev/null as both input and output
   1490  1.1.1.10  christos 		 when checking for command line option support in a script:
   1491  1.1.1.10  christos 		   as --foo /dev/null -o /dev/null; if $? then ...  */
   1492  1.1.1.10  christos 	      && S_ISREG (sib.st_mode))
   1493  1.1.1.10  christos 	    {
   1494  1.1.1.10  christos 	      const char *saved_out_file_name = out_file_name;
   1495  1.1.1.10  christos 
   1496  1.1.1.10  christos 	      /* Don't let as_fatal remove the output file!  */
   1497  1.1.1.10  christos 	      out_file_name = NULL;
   1498  1.1.1.10  christos 	      as_fatal (_("The input '%s' and output '%s' files are the same"),
   1499  1.1.1.10  christos 			argv[i], saved_out_file_name);
   1500  1.1.1.10  christos 	    }
   1501  1.1.1.10  christos 	}
   1502  1.1.1.10  christos     }
   1503       1.1     skrll 
   1504       1.1     skrll   gas_init ();
   1505       1.1     skrll 
   1506       1.1     skrll   /* Assemble it.  */
   1507       1.1     skrll   perform_an_assembly_pass (argc, argv);
   1508       1.1     skrll 
   1509  1.1.1.10  christos   cond_finish_check (-1);
   1510  1.1.1.10  christos 
   1511       1.1     skrll #ifdef md_finish
   1512       1.1     skrll   md_finish ();
   1513       1.1     skrll #endif
   1514       1.1     skrll 
   1515       1.1     skrll #if defined OBJ_ELF || defined OBJ_MAYBE_ELF
   1516       1.1     skrll   if ((flag_execstack || flag_noexecstack)
   1517       1.1     skrll       && OUTPUT_FLAVOR == bfd_target_elf_flavour)
   1518       1.1     skrll     {
   1519       1.1     skrll       segT gnustack;
   1520   1.1.1.8  christos 
   1521       1.1     skrll       gnustack = subseg_new (".note.GNU-stack", 0);
   1522   1.1.1.4  christos       bfd_set_section_flags (gnustack,
   1523       1.1     skrll 			     SEC_READONLY | (flag_execstack ? SEC_CODE : 0));
   1524       1.1     skrll 
   1525       1.1     skrll     }
   1526  1.1.1.10  christos #endif
   1527  1.1.1.10  christos 
   1528       1.1     skrll   codeview_finish ();
   1529       1.1     skrll 
   1530       1.1     skrll   /* If we've been collecting dwarf2 .debug_line info, either for
   1531       1.1     skrll      assembly debugging or on behalf of the compiler, emit it now.  */
   1532   1.1.1.4  christos   dwarf2_finish ();
   1533       1.1     skrll 
   1534       1.1     skrll   /* If we constructed dwarf2 .eh_frame info, either via .cfi
   1535       1.1     skrll      directives from the user or by the backend, emit it now.  */
   1536   1.1.1.4  christos   cfi_finish ();
   1537   1.1.1.4  christos 
   1538   1.1.1.4  christos   keep_it = 0;
   1539   1.1.1.4  christos   if (seen_at_least_1_file ())
   1540   1.1.1.4  christos     {
   1541   1.1.1.4  christos       int n_warns, n_errs;
   1542   1.1.1.4  christos       char warn_msg[50];
   1543   1.1.1.4  christos       char err_msg[50];
   1544       1.1     skrll 
   1545   1.1.1.4  christos       write_object_file ();
   1546   1.1.1.4  christos 
   1547       1.1     skrll       n_warns = had_warnings ();
   1548   1.1.1.6  christos       n_errs = had_errors ();
   1549   1.1.1.6  christos 
   1550   1.1.1.6  christos       sprintf (warn_msg,
   1551   1.1.1.6  christos 	       ngettext ("%d warning", "%d warnings", n_warns), n_warns);
   1552   1.1.1.4  christos       sprintf (err_msg,
   1553   1.1.1.4  christos 	       ngettext ("%d error", "%d errors", n_errs), n_errs);
   1554   1.1.1.4  christos       if (flag_fatal_warnings && n_warns != 0)
   1555   1.1.1.4  christos 	{
   1556   1.1.1.4  christos 	  if (n_errs == 0)
   1557   1.1.1.4  christos 	    as_bad (_("%s, treating warnings as errors"), warn_msg);
   1558   1.1.1.4  christos 	  n_errs += n_warns;
   1559   1.1.1.4  christos 	}
   1560   1.1.1.4  christos 
   1561   1.1.1.4  christos       if (n_errs == 0)
   1562   1.1.1.4  christos 	keep_it = 1;
   1563   1.1.1.4  christos       else if (flag_always_generate_output)
   1564   1.1.1.4  christos 	{
   1565   1.1.1.4  christos 	  /* The -Z flag indicates that an object file should be generated,
   1566   1.1.1.4  christos 	     regardless of warnings and errors.  */
   1567   1.1.1.4  christos 	  keep_it = 1;
   1568   1.1.1.4  christos 	  fprintf (stderr, _("%s, %s, generating bad object file\n"),
   1569   1.1.1.4  christos 		   err_msg, warn_msg);
   1570       1.1     skrll 	}
   1571       1.1     skrll     }
   1572       1.1     skrll 
   1573       1.1     skrll   fflush (stderr);
   1574       1.1     skrll 
   1575       1.1     skrll #ifndef NO_LISTING
   1576       1.1     skrll   listing_print (listing_filename, argv_orig);
   1577       1.1     skrll #endif
   1578       1.1     skrll 
   1579       1.1     skrll   input_scrub_end ();
   1580       1.1     skrll 
   1581   1.1.1.4  christos   /* Use xexit instead of return, because under VMS environments they
   1582       1.1     skrll      may not place the same interpretation on the value given.  */
   1583       1.1     skrll   if (had_errors () != 0)
   1584       1.1     skrll     xexit (EXIT_FAILURE);
   1585       1.1     skrll 
   1586       1.1     skrll   /* Only generate dependency file if assembler was successful.  */
   1587       1.1     skrll   print_dependencies ();
   1588       1.1     skrll 
   1589                       xexit (EXIT_SUCCESS);
   1590                     }
   1591