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