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