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 (¬es, 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 (¬es, 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