Add support for PIC and APCS-FLOAT type binaries.
[deliverable/binutils-gdb.git] / gas / as.c
index 927580b80d081cf48a5fff0aad13f75b64ca444e..e5da50947f5ed0c75cae27c8dd96b089234cb122 100644 (file)
--- a/gas/as.c
+++ b/gas/as.c
 #include "output-file.h"
 #include "sb.h"
 #include "macro.h"
+#ifndef HAVE_ITBL_CPU
+#define itbl_parse(itbl_file) 1
+#define itbl_init()
+#endif
 
 #ifdef HAVE_SBRK
 #ifdef NEED_DECLARATION_SBRK
@@ -50,6 +54,9 @@ extern PTR sbrk ();
 #endif
 #endif
 
+static void show_usage PARAMS ((FILE *));
+static void parse_args PARAMS ((int *, char ***));
+static void dump_statistics PARAMS ((void));
 static void perform_an_assembly_pass PARAMS ((int argc, char **argv));
 static int macro_expr PARAMS ((const char *, int, sb *, int *));
 
@@ -57,6 +64,10 @@ int listing;                 /* true if a listing is wanted */
 
 static char *listing_filename = NULL;  /* Name of listing file.  */
 
+/* Type of debugging to generate.  */
+
+enum debug_info_type debug_type = DEBUG_NONE;
+
 /* Maximum level of macro nesting.  */
 
 int max_macro_nest = 100;
@@ -103,14 +114,14 @@ print_version_id ()
     return;
   printed = 1;
 
-  fprintf (stderr, "GNU assembler version %s (%s)", GAS_VERSION, TARGET_ALIAS);
+  fprintf (stderr, "GNU assembler version %s (%s)", VERSION, TARGET_ALIAS);
 #ifdef BFD_ASSEMBLER
   fprintf (stderr, ", using BFD version %s", BFD_VERSION);
 #endif
   fprintf (stderr, "\n");
 }
 
-void
+static void
 show_usage (stream)
      FILE *stream;
 {
@@ -120,6 +131,7 @@ show_usage (stream)
 Options:\n\
 -a[sub-option...]      turn on listings\n\
   Sub-options [default hls]:\n\
+  c    omit false conditionals\n\
   d    omit debugging directives\n\
   h    include high-level source\n\
   l    include assembly\n\
@@ -130,6 +142,7 @@ Options:\n\
 -D                     produce assembler debugging messages\n\
 --defsym SYM=VAL       define symbol SYM to given value\n\
 -f                     skip whitespace and comment preprocessing\n\
+--gstabs               generate stabs debugging information\n\
 --help                 show this message and exit\n\
 -I DIR                 add DIR to search list for .include directives\n\
 -J                     don't warn about signed overflow\n\
@@ -137,13 +150,14 @@ Options:\n\
 -L                     keep local symbols (starting with `L')\n");
   fprintf (stream, "\
 -M,--mri               assemble in MRI compatibility mode\n\
+--MD FILE              write dependency information in FILE (default none)\n\
 -nocpp                 ignored\n\
 -o OBJFILE             name the object-file output OBJFILE (default a.out)\n\
 -R                     fold data section into text section\n\
 --statistics           print various measured statistics from execution\n\
 --version              print assembler version number and exit\n\
 -W                     suppress warnings\n\
--t,--itbl INSTTBL      extend instruction set to include instrictions\n\
+--itbl INSTTBL         extend instruction set to include instructions\n\
                        matching the specifications defined in file INSTTBL\n\
 -w                     ignored\n\
 -X                     ignored\n\
@@ -159,10 +173,13 @@ Options:\n\
 
 extern struct emulation mipsbelf, mipslelf, mipself;
 extern struct emulation mipsbecoff, mipslecoff, mipsecoff;
+extern struct emulation i386coff, i386elf;
 
 static struct emulation *const emulations[] = { EMULATIONS };
 static const int n_emulations = sizeof (emulations) / sizeof (emulations[0]);
 
+static void select_emulation_mode PARAMS ((int, char **));
+
 static void
 select_emulation_mode (argc, argv)
      int argc;
@@ -249,7 +266,7 @@ common_emul_init ()
  * md_parse_option definitions in config/tc-*.c
  */
 
-void
+static void
 parse_args (pargc, pargv)
      int *pargc;
      char ***pargv;
@@ -278,8 +295,8 @@ parse_args (pargc, pargv)
       'v',
 #endif
       'w', 'X',
-         /* New option for extending instruction set (see also --itbl below) */
-         't',
+      /* New option for extending instruction set (see also --itbl below) */
+      't', ':',
       '\0'
     };
   struct option *longopts;
@@ -305,12 +322,16 @@ parse_args (pargc, pargv)
     {"defsym", required_argument, NULL, OPTION_DEFSYM},
 #define OPTION_INSTTBL (OPTION_STD_BASE + 8)
     /* New option for extending instruction set (see also -t above).
-     * The "-t file" or "--itbl file" option extends the basic set
-     * of valid instructions by reading "file", a text file containing
-     * a list of instruction formats.  The additional opcodes and their 
-     * formats are added to the built-in set of instructions, and
-     * mnemonics for new registers may also be defined.  */
-    {"itbl", required_argument, NULL, OPTION_INSTTBL}
+       The "-t file" or "--itbl file" option extends the basic set of
+       valid instructions by reading "file", a text file containing a
+       list of instruction formats.  The additional opcodes and their
+       formats are added to the built-in set of instructions, and
+       mnemonics for new registers may also be defined.  */
+    {"itbl", required_argument, NULL, OPTION_INSTTBL},
+#define OPTION_DEPFILE (OPTION_STD_BASE + 9)
+    {"MD", required_argument, NULL, OPTION_DEPFILE},
+#define OPTION_GSTABS (OPTION_STD_BASE + 10)
+    {"gstabs", no_argument, NULL, OPTION_GSTABS}
   };
 
   /* Construct the option lists from the standard list and the
@@ -393,8 +414,8 @@ parse_args (pargc, pargv)
 
        case OPTION_VERSION:
          /* This output is intended to follow the GNU standards document.  */
-         printf ("GNU assembler %s\n", GAS_VERSION);
-         printf ("Copyright 1996 Free Software Foundation, Inc.\n");
+         printf ("GNU assembler %s\n", VERSION);
+         printf ("Copyright 1997 Free Software Foundation, Inc.\n");
          printf ("\
 This program is free software; you may redistribute it under the terms of\n\
 the GNU General Public License.  This program has absolutely no warranty.\n");
@@ -450,6 +471,12 @@ the GNU General Public License.  This program has absolutely no warranty.\n");
               formats, opcodes, register names, etc. */
            struct itbl_file_list *n;
 
+           if (optarg == NULL)
+             {
+               as_warn ( "No file name following -t option\n" );
+               break;
+             }
+           
            n = (struct itbl_file_list *) xmalloc (sizeof *n);
            n->next = itbl_files;
            n->name = optarg;
@@ -460,15 +487,23 @@ the GNU General Public License.  This program has absolutely no warranty.\n");
               information from this table gets appended onto the existing 
               internal table. */
            itbl_files->name = xstrdup (optarg);
-           if (itbl_parse(itbl_files->name) != 0)
-           {
-             fprintf (stderr, "Failed to read instruction table %s\n", 
-                       itbl_files->name);
-             exit (EXIT_SUCCESS);
-           }
+           if (itbl_parse (itbl_files->name) != 0)
+             {
+               fprintf (stderr, "Failed to read instruction table %s\n", 
+                        itbl_files->name);
+               exit (EXIT_SUCCESS);
+             }
          }
          break;
 
+       case OPTION_DEPFILE:
+         start_dependencies (optarg);
+         break;
+
+       case OPTION_GSTABS:
+         debug_type = DEBUG_STABS;
+         break;
+
        case 'J':
          flag_signed_overflow_ok = 1;
          break;
@@ -509,6 +544,9 @@ the GNU General Public License.  This program has absolutely no warranty.\n");
                {
                  switch (*optarg)
                    {
+                   case 'c':
+                     listing |= LISTING_NOCOND;
+                     break;
                    case 'd':
                      listing |= LISTING_NODEBUG;
                      break;
@@ -576,7 +614,6 @@ the GNU General Public License.  This program has absolutely no warranty.\n");
   *pargv = new_argv;
 }
 
-static void dump_statistics ();
 static long start_time;
 
 int 
@@ -684,6 +721,8 @@ main (argc, argv)
 
   perform_an_assembly_pass (argc, argv);       /* Assemble it. */
 
+  cond_finish_check (-1);
+
 #ifdef md_end
   md_end ();
 #endif
@@ -722,6 +761,10 @@ main (argc, argv)
      may not place the same interpretation on the value given.  */
   if (had_errors () > 0)
     xexit (EXIT_FAILURE);
+
+  /* Only generate dependency file if assembler was successful.  */
+  print_dependencies ();
+
   xexit (EXIT_SUCCESS);
 }
 
This page took 0.026141 seconds and 4 git commands to generate.