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