Add x86 gas -q option to quiet some x86 gas warnings.
authorAlan Modra <amodra@gmail.com>
Sat, 13 May 2000 12:49:55 +0000 (12:49 +0000)
committerAlan Modra <amodra@gmail.com>
Sat, 13 May 2000 12:49:55 +0000 (12:49 +0000)
Remove useless -m flag_do_long_jump from x86 gas.
If BFD_ASSEMBLER, store --defsym value in a bfd_vma, and use scan_bfd_vma.

gas/ChangeLog
gas/NEWS
gas/as.c
gas/config/tc-i386.c

index 742abf87b816d8e27aad62b4494b8b0fd1d6287e..5a028e4df8d866f439f63e2ec829f505d168e6a5 100644 (file)
@@ -1,3 +1,19 @@
+2000-05-13  Alan Modra  <alan@linuxcare.com.au>
+
+       * NEWS: Mention x86 .arch and -q.
+
+       * config/tc-i386.c (quiet_warnings): New.
+       (md_assemble): Use quiet_warnings.
+       (md_parse_option): Set quiet_warnings from -q.
+       (md_show_usage): Mention -q, delete -m.
+       (flag_do_long_jump): Delete.
+       (md_parse_option): Remove -m.
+       (md_show_usage): Remove -m.
+       (md_create_long_jump): Remove useless flag_do_long_jump code.
+
+       * as.c (parse_args): In case OPTION_DEFSYM, use a valueT to hold
+       the symbol value, and use bfd_scan_vma if BFD_ASSEMBLER.
+
 2000-05-13  Alan Modra  <alan@linuxcare.com.au>
            Alexander Sokolov <robocop@netlink.ru>
 
index 48df8446bd1e794cea42a4815ab4037e8c7626a9..3ba99a2caf1aab006ed7358c728187f37a298d78 100644 (file)
--- a/gas/NEWS
+++ b/gas/NEWS
@@ -4,6 +4,12 @@ Changes in 2.11:
 
 Support for IA-64.
 
+x86 gas has a new .arch pseudo op to specify the target CPU architecture.
+
+x86 gas -q command line option quietens warnings about register size changes
+due to suffix, indirect jmp/call without `*', stand-alone prefixes, and
+translating various deprecated floating point instructions.
+
 Changes in 2.10:
 
 Support for ATMEL AVR.
index 53a48c089b007649484187c129ee35c07a5dba82..f22120727ea4e19d97ba000a806b0a6b45761e29 100644 (file)
--- a/gas/as.c
+++ b/gas/as.c
@@ -546,7 +546,7 @@ the GNU General Public License.  This program has absolutely no warranty.\n"));
        case OPTION_DEFSYM:
          {
            char *s;
-           long i;
+           valueT i;
            struct defsym_list *n;
 
            for (s = optarg; *s != '\0' && *s != '='; s++)
@@ -554,7 +554,11 @@ the GNU General Public License.  This program has absolutely no warranty.\n"));
            if (*s == '\0')
              as_fatal (_("bad defsym; format is --defsym name=value"));
            *s++ = '\0';
+#ifdef BFD_ASSEMBLER
+           i = bfd_scan_vma (s, (const char **) NULL, 0);
+#else
            i = strtol (s, (char **) NULL, 0);
+#endif
            n = (struct defsym_list *) xmalloc (sizeof *n);
            n->next = defsyms;
            n->name = optarg;
index 2ba676d27da2ef0bdabc4a2e7a23795bbe50d43f..b131e41abf261c854a20dc8fd3b973a83877f4b1 100644 (file)
@@ -219,17 +219,11 @@ static expressionS disp_expressions[2], im_expressions[2];
 
 static int this_operand;         /* Current operand we are working on.  */
 
-static int flag_do_long_jump;    /* FIXME what does this do?  */
-
 static int flag_16bit_code;      /* 1 if we're writing 16-bit code,
                                     0 if 32-bit.  */
 
 static int intel_syntax = 0;     /* 1 for intel syntax, 0 if att syntax.  */
 
-static const char *cpu_arch_name = NULL; /* cpu name  */
-
-static unsigned int cpu_arch_flags = 0;  /* cpu feature flags  */
-
 static int allow_naked_reg = 0;   /* 1 if register prefix % not required  */
 
 static char stackop_size = '\0';  /* Used in 16 bit gcc mode to add an l
@@ -237,6 +231,12 @@ static char stackop_size = '\0';  /* Used in 16 bit gcc mode to add an l
                                     and pop instructions so that gcc has the
                                     same stack frame as in 32 bit mode.  */
 
+static int quiet_warnings = 0;   /* Non-zero to quieten some warnings. */
+
+static const char *cpu_arch_name = NULL; /* cpu name  */
+
+static unsigned int cpu_arch_flags = 0;  /* cpu feature flags  */
+
 /* Interface to relax_segment.
    There are 2 relax states for 386 jump insns: one for conditional &
    one for unconditional jumps.  This is because these two types of
@@ -1566,17 +1566,22 @@ md_assemble (line)
        return;
       }
 
-    if (!intel_syntax
-       && (i.types[0] & JumpAbsolute) != (t->operand_types[0] & JumpAbsolute))
+    if (!quiet_warnings)
       {
-       as_warn (_("indirect %s without `*'"), t->name);
-      }
+       if (!intel_syntax
+           && ((i.types[0] & JumpAbsolute)
+               != (t->operand_types[0] & JumpAbsolute)))
+         {
+           as_warn (_("indirect %s without `*'"), t->name);
+         }
 
-    if ((t->opcode_modifier & (IsPrefix|IgnoreSize)) == (IsPrefix|IgnoreSize))
-      {
-       /* Warn them that a data or address size prefix doesn't affect
-          assembly of the next line of code.  */
-       as_warn (_("stand-alone `%s' prefix"), t->name);
+       if ((t->opcode_modifier & (IsPrefix|IgnoreSize))
+           == (IsPrefix|IgnoreSize))
+         {
+           /* Warn them that a data or address size prefix doesn't
+              affect assembly of the next line of code.  */
+           as_warn (_("stand-alone `%s' prefix"), t->name);
+         }
       }
 
     /* Copy the template we found.  */
@@ -1692,7 +1697,8 @@ md_assemble (line)
                    )
                  {
 #if REGISTER_WARNINGS
-                   if ((i.tm.operand_types[op] & InOutPortReg) == 0)
+                   if (!quiet_warnings
+                       && (i.tm.operand_types[op] & InOutPortReg) == 0)
                      as_warn (_("using `%%%s' instead of `%%%s' due to `%c' suffix"),
                               (i.op[op].regs - (i.types[op] & Reg16 ? 8 : 16))->reg_name,
                               i.op[op].regs->reg_name,
@@ -1731,7 +1737,8 @@ md_assemble (line)
                }
 #if REGISTER_WARNINGS
              /* Warn if the e prefix on a general reg is missing.  */
-             else if ((i.types[op] & Reg16) != 0
+             else if (!quiet_warnings
+                      && (i.types[op] & Reg16) != 0
                       && (i.tm.operand_types[op] & (Reg32|Acc)) != 0)
                {
                  as_warn (_("using `%%%s' instead of `%%%s' due to `%c' suffix"),
@@ -1758,7 +1765,8 @@ md_assemble (line)
                }
 #if REGISTER_WARNINGS
              /* Warn if the e prefix on a general reg is present.  */
-             else if ((i.types[op] & Reg32) != 0
+             else if (!quiet_warnings
+                      && (i.types[op] & Reg32) != 0
                       && (i.tm.operand_types[op] & (Reg16|Acc)) != 0)
                {
                  as_warn (_("using `%%%s' instead of `%%%s' due to `%c' suffix"),
@@ -1934,7 +1942,7 @@ md_assemble (line)
            unsigned int op = (i.types[0] & (Reg | FloatReg)) ? 0 : 1;
            /* Register goes in low 3 bits of opcode. */
            i.tm.base_opcode |= i.op[op].regs->reg_num;
-           if ((i.tm.opcode_modifier & Ugh) != 0)
+           if (!quiet_warnings && (i.tm.opcode_modifier & Ugh) != 0)
              {
                /* Warn about some common errors, but press on regardless.
                   The first case can be generated by gcc (<= 2.8.1).  */
@@ -2191,7 +2199,7 @@ md_assemble (line)
              return;
          }
       }
-    else if ((i.tm.opcode_modifier & Ugh) != 0)
+    else if (!quiet_warnings && (i.tm.opcode_modifier & Ugh) != 0)
       {
        /* UnixWare fsub no args is alias for fsubp, fadd -> faddp, etc.  */
        as_warn (_("translating to `%sp'"), i.tm.name);
@@ -3927,25 +3935,14 @@ void
 md_create_long_jump (ptr, from_addr, to_addr, frag, to_symbol)
      char *ptr;
      addressT from_addr, to_addr;
-     fragS *frag;
-     symbolS *to_symbol;
+     fragS *frag ATTRIBUTE_UNUSED;
+     symbolS *to_symbol ATTRIBUTE_UNUSED;
 {
   offsetT offset;
 
-  if (flag_do_long_jump)
-    {
-      offset = to_addr - S_GET_VALUE (to_symbol);
-      md_number_to_chars (ptr, (valueT) 0xe9, 1);/* opcode for long jmp */
-      md_number_to_chars (ptr + 1, (valueT) offset, 4);
-      fix_new (frag, (ptr + 1) - frag->fr_literal, 4,
-              to_symbol, (offsetT) 0, 0, BFD_RELOC_32);
-    }
-  else
-    {
-      offset = to_addr - (from_addr + 5);
-      md_number_to_chars (ptr, (valueT) 0xe9, 1);
-      md_number_to_chars (ptr + 1, (valueT) offset, 4);
-    }
+  offset = to_addr - (from_addr + 5);
+  md_number_to_chars (ptr, (valueT) 0xe9, 1);
+  md_number_to_chars (ptr + 1, (valueT) offset, 4);
 }
 \f
 /* Apply a fixup (fixS) to segment data, once it has been determined
@@ -4275,13 +4272,14 @@ md_parse_option (c, arg)
 {
   switch (c)
     {
-    case 'm':
-      flag_do_long_jump = 1;
+    case 'q':
+      quiet_warnings = 1;
       break;
 
 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
-      /* -k: Ignore for FreeBSD compatibility.  */
-    case 'k':
+      /* -Qy, -Qn: SVR4 arguments controlling whether a .comment section
+        should be emitted or not.  FIXME: Not implemented.  */
+    case 'Q':
       break;
 
       /* -V: SVR4 argument to print version ID.  */
@@ -4289,20 +4287,14 @@ md_parse_option (c, arg)
       print_version_id ();
       break;
 
-      /* -Qy, -Qn: SVR4 arguments controlling whether a .comment section
-        should be emitted or not.  FIXME: Not implemented.  */
-    case 'Q':
+      /* -k: Ignore for FreeBSD compatibility.  */
+    case 'k':
       break;
 
     case 's':
       /* -s: On i386 Solaris, this tells the native assembler to use
          .stab instead of .stab.excl.  We always use .stab anyhow.  */
       break;
-
-    case 'q':
-      /* -q: On i386 Solaris, this tells the native assembler to do
-         fewer checks.  */
-      break;
 #endif
 
     default:
@@ -4315,15 +4307,16 @@ void
 md_show_usage (stream)
      FILE *stream;
 {
-  fprintf (stream, _("\
-  -m                     do long jump\n"));
 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
   fprintf (stream, _("\
-  -V                     print assembler version number\n\
-  -k                     ignored\n\
-  -Qy, -Qn               ignored\n\
-  -q                     ignored\n\
-  -s                     ignored\n"));
+  -Q                      ignored\n\
+  -V                      print assembler version number\n\
+  -k                      ignored\n\
+  -q                      quieten some warnings\n\
+  -s                      ignored\n"));
+#else
+  fprintf (stream, _("\
+  -q                      quieten some warnings\n"));
 #endif
 }