* config/tc-tic30.c: #include stdarg.h or varargs.h.
[binutils-gdb.git] / gas / config / tc-i370.c
index 1805a097bd4f0bdf2c12f0f26b099da92a07f0e2..31d2f7a1fc33ed1a107e03e7f5543549537540f8 100644 (file)
@@ -1,6 +1,7 @@
 /* tc-i370.c -- Assembler for the IBM 360/370/390 instruction set.
    Loosely based on the ppc files by Linas Vepstas <linas@linas.org> 1998, 99
-   Copyright (C) 1994, 95, 96, 97, 98, 99, 2000 Free Software Foundation, Inc.
+   Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002
+   Free Software Foundation, Inc.
    Written by Ian Lance Taylor, Cygnus Support.
 
    This file is part of GAS, the GNU Assembler.
@@ -18,7 +19,7 @@
    You should have received a copy of the GNU General Public License
    along with GAS; see the file COPYING.  If not, write to the Free
    Software Foundation, 59 Temple Place - Suite 330, Boston, MA
-   02111-1307, USA. */
+   02111-1307, USA.  */
 
 /* This assembler implements a very hacked version of an elf-like thing
  * that gcc emits (when gcc is suitably hacked).  To make it behave more
@@ -28,8 +29,8 @@
  */
 
 #include <stdio.h>
-#include <ctype.h>
 #include "as.h"
+#include "safe-ctype.h"
 #include "subsegs.h"
 #include "struc-symbol.h"
 
@@ -75,18 +76,17 @@ const char EXP_CHARS[] = "eE";
    as in 0d1.0.  */
 const char FLT_CHARS[] = "dD";
 
-
 void
 md_show_usage (stream)
      FILE *stream;
 {
-  fprintf(stream, "\
+  fprintf (stream, "\
 S/370 options: (these have not yet been tested and may not work) \n\
 -u                     ignored\n\
 -mregnames             Allow symbolic names for registers\n\
 -mno-regnames          Do not allow symbolic names for registers\n");
 #ifdef OBJ_ELF
-  fprintf(stream, "\
+  fprintf (stream, "\
 -mrelocatable          support for GCC's -mrelocatble option\n\
 -mrelocatable-lib       support for GCC's -mrelocatble-lib option\n\
 -V                     print assembler version number\n");
@@ -116,7 +116,6 @@ static void i370_elf_lcomm PARAMS ((int));
 static void i370_elf_validate_fix PARAMS ((fixS *, segT));
 #endif
 
-
 \f
 /* The target specific pseudo-ops which we support.  */
 
@@ -159,11 +158,11 @@ const pseudo_typeS md_pseudo_table[] =
 /* ***************************************************************** */
 
 /* Whether to use user friendly register names.  */
-#define TARGET_REG_NAMES_P true
+#define TARGET_REG_NAMES_P TRUE
 
-static boolean reg_names_p = TARGET_REG_NAMES_P;
+static bfd_boolean reg_names_p = TARGET_REG_NAMES_P;
 
-static boolean register_name PARAMS ((expressionS *));
+static bfd_boolean register_name PARAMS ((expressionS *));
 static void i370_set_cpu PARAMS ((void));
 static i370_insn_t i370_insert_operand
   PARAMS ((i370_insn_t insn, const struct i370_operand *operand, offsetT val));
@@ -186,7 +185,6 @@ struct pd_reg
    1. r<reg_num> which has the value <reg_num>.
    2. r.<reg_num> which has the value <reg_num>.
 
-
    Each floating point register has predefined names of the form:
    1. f<reg_num> which has the value <reg_num>.
    2. f.<reg_num> which has the value <reg_num>.
@@ -194,7 +192,6 @@ struct pd_reg
    There are only four floating point registers, and these are
    commonly labelled 0,2,4 and 6.  Thus, there is no f1, f3, etc.
 
-
    There are individual registers as well:
    rbase or r.base has the value  3  (base register)
    rpgt or r.pgt   has the value  4  (page origin table pointer)
@@ -205,7 +202,7 @@ struct pd_reg
    dsa or r.dsa    has the value 13  (stack pointer)
    lr              has the value 14  (link reg)
 
-   The table is sorted. Suitable for searching by a binary search. */
+   The table is sorted. Suitable for searching by a binary search.  */
 
 static const struct pd_reg pre_defined_registers[] =
 {
@@ -222,7 +219,6 @@ static const struct pd_reg pre_defined_registers[] =
   { "f4", 4 },
   { "f6", 6 },
 
-
   { "dsa",13 },    /* stack pointer */
   { "lr", 14 },    /* Link Register */
   { "pgt", 4 },    /* Page Origin Table Pointer */
@@ -279,7 +275,7 @@ static const struct pd_reg pre_defined_registers[] =
 
 };
 
-#define REG_NAME_CNT        (sizeof(pre_defined_registers) / sizeof(struct pd_reg))
+#define REG_NAME_CNT        (sizeof (pre_defined_registers) / sizeof (struct pd_reg))
 
 /* Given NAME, find the register number associated with that name, return
    the integer value associated with the given name or -1 on failure.  */
@@ -320,14 +316,14 @@ reg_name_search (regs, regcount, name)
  *
  * in:        Input_line_pointer points to 1st char of operand.
  *
- * out:        A expressionS.
+ * out:        An expressionS.
  *      The operand may have been a register: in this case, X_op == O_register,
  *      X_add_number is set to the register number, and truth is returned.
  *        Input_line_pointer->(next non-blank) char after operand, or is in its
  *      original state.
  */
 
-static boolean
+static bfd_boolean
 register_name (expressionP)
      expressionS *expressionP;
 {
@@ -336,47 +332,47 @@ register_name (expressionP)
   char *start;
   char c;
 
-  /* Find the spelling of the operand */
+  /* Find the spelling of the operand */
   start = name = input_line_pointer;
-  if (name[0] == '%' && isalpha (name[1]))
+  if (name[0] == '%' && ISALPHA (name[1]))
     name = ++input_line_pointer;
 
   else if (!reg_names_p)
-    return false;
+    return FALSE;
 
   while (' ' == *name)
     name = ++input_line_pointer;
 
-  /* if its a number, treat it as a number */
-  /* if its alpha, look to see if it's in the register table */
-  if (!isalpha (name[0]))
+  /* If it's a number, treat it as a number.  If it's alpha, look to
+     see if it's in the register table.  */
+  if (!ISALPHA (name[0]))
     {
-      reg_number = get_single_number();
-      c = get_symbol_end ();
+      reg_number = get_single_number ();
     }
   else
     {
       c = get_symbol_end ();
       reg_number = reg_name_search (pre_defined_registers, REG_NAME_CNT, name);
+
+      /* Put back the delimiting char.  */
+      *input_line_pointer = c;
     }
 
-  /* if numeric, make sure its not out of bounds */
+  /* If numeric, make sure its not out of bounds.  */
   if ((0 <= reg_number) && (16 >= reg_number))
     {
       expressionP->X_op = O_register;
       expressionP->X_add_number = reg_number;
 
-      /* make the rest nice */
+      /* Make the rest nice.  */
       expressionP->X_add_symbol = NULL;
       expressionP->X_op_symbol = NULL;
-      *input_line_pointer = c;   /* put back the delimiting char */
-      return true;
+      return TRUE;
     }
 
-    /* reset the line as if we had not done anything */
-    *input_line_pointer = c;   /* put back the delimiting char */
-    input_line_pointer = start; /* reset input_line pointer */
-    return false;
+  /* Reset the line as if we had not done anything.  */
+  input_line_pointer = start;
+  return FALSE;
 }
 \f
 /* Local variables.  */
@@ -434,15 +430,15 @@ const int md_long_jump_size = 4;
 #endif
 \f
 #ifdef OBJ_ELF
-CONST char *md_shortopts = "l:um:K:VQ:";
+const char *md_shortopts = "l:um:K:VQ:";
 #else
-CONST char *md_shortopts = "um:";
+const char *md_shortopts = "um:";
 #endif
 struct option md_longopts[] =
 {
   {NULL, no_argument, NULL, 0}
 };
-size_t md_longopts_size = sizeof(md_longopts);
+size_t md_longopts_size = sizeof (md_longopts);
 
 int
 md_parse_option (c, arg)
@@ -483,10 +479,10 @@ md_parse_option (c, arg)
        i370_cpu = I370_OPCODE_370;
 
       else if (strcmp (arg, "regnames") == 0)
-       reg_names_p = true;
+       reg_names_p = TRUE;
 
       else if (strcmp (arg, "no-regnames") == 0)
-       reg_names_p = false;
+       reg_names_p = FALSE;
 
 #ifdef OBJ_ELF
       /* -mrelocatable/-mrelocatable-lib -- warn about initializations that require relocation */
@@ -533,7 +529,7 @@ md_parse_option (c, arg)
 \f
 /* Set i370_cpu if it is not already set.
    Currently defaults to the reasonable superset;
-   but can be made more fine grained if desred. */
+   but can be made more fine grained if desred.  */
 
 static void
 i370_set_cpu ()
@@ -541,7 +537,7 @@ i370_set_cpu ()
   const char *default_os  = TARGET_OS;
   const char *default_cpu = TARGET_CPU;
 
-  /* override with the superset for the moment. */
+  /* override with the superset for the moment.  */
   i370_cpu = I370_OPCODE_ESA390_SUPERSET;
   if (i370_cpu == 0)
     {
@@ -557,7 +553,7 @@ i370_set_cpu ()
 }
 
 /* Figure out the BFD architecture to use.  */
-// hack alert -- specify the different 370 architectures
+/* hack alert -- specify the different 370 architectures  */
 
 enum bfd_architecture
 i370_arch ()
@@ -576,12 +572,12 @@ md_begin ()
   const struct i370_opcode *op_end;
   const struct i370_macro *macro;
   const struct i370_macro *macro_end;
-  boolean dup_insn = false;
+  bfd_boolean dup_insn = FALSE;
 
   i370_set_cpu ();
 
 #ifdef OBJ_ELF
-  /* Set the ELF flags if desired. */
+  /* Set the ELF flags if desired.  */
   if (i370_flags)
     bfd_set_private_flags (stdoutput, i370_flags);
 #endif
@@ -602,7 +598,7 @@ md_begin ()
            if (retval != (const char *) NULL)
              {
                as_bad ("Internal assembler error for instruction %s", op->name);
-               dup_insn = true;
+               dup_insn = TRUE;
              }
          }
      }
@@ -621,7 +617,7 @@ md_begin ()
           if (retval != (const char *) NULL)
             {
               as_bad ("Internal assembler error for macro %s", macro->name);
-              dup_insn = true;
+              dup_insn = TRUE;
             }
         }
     }
@@ -661,14 +657,13 @@ i370_insert_operand (insn, operand, val)
 \f
 #ifdef OBJ_ELF
 /* Parse @got, etc. and return the desired relocation.
- * Currently, i370 does not support (don't really need to support) any
- * of these fancier markups ... for example, no one is going to
- * write 'L 6,=V(bogus)@got' it just doesn't make sense (at least to me).
- * So basically, we could get away with this routine returning
- * BFD_RELOC_UNUSED in all circumstances.  However, I'll leave
- * in for now in case someone ambitious finds a good use for this stuff ...
- * this routine was pretty much just copied from the powerpc code ...
- */
+   Currently, i370 does not support (don't really need to support) any
+   of these fancier markups ... for example, no one is going to
+   write 'L 6,=V(bogus)@got' it just doesn't make sense (at least to me).
+   So basically, we could get away with this routine returning
+   BFD_RELOC_UNUSED in all circumstances.  However, I'll leave
+   in for now in case someone ambitious finds a good use for this stuff ...
+   this routine was pretty much just copied from the powerpc code ...  */
 static bfd_reloc_code_real_type
 i370_elf_suffix (str_p, exp_p)
      char **str_p;
@@ -688,15 +683,18 @@ i370_elf_suffix (str_p, exp_p)
   int len;
   struct map_bfd *ptr;
 
-#define MAP(str,reloc) { str, sizeof(str)-1, reloc }
+#define MAP(str,reloc) { str, sizeof (str)-1, reloc }
 
   static struct map_bfd mapping[] =
   {
-    //     MAP ("l",           BFD_RELOC_LO16),
-    //     MAP ("h",           BFD_RELOC_HI16),
-    //     MAP ("ha",          BFD_RELOC_HI16_S),
-    MAP ("fixup",        BFD_RELOC_CTOR),          /* warnings with -mrelocatable */
-    { (char *)0,        0,     BFD_RELOC_UNUSED }
+#if 0
+    MAP ("l",          BFD_RELOC_LO16),
+    MAP ("h",          BFD_RELOC_HI16),
+    MAP ("ha",         BFD_RELOC_HI16_S),
+#endif
+    /* warnings with -mrelocatable.  */
+    MAP ("fixup",      BFD_RELOC_CTOR),
+    { (char *)0, 0,    BFD_RELOC_UNUSED }
   };
 
   if (*str++ != '@')
@@ -704,10 +702,10 @@ i370_elf_suffix (str_p, exp_p)
 
   for (ch = *str, str2 = ident;
        (str2 < ident + sizeof (ident) - 1
-        && (isalnum (ch) || ch == '@'));
+        && (ISALNUM (ch) || ch == '@'));
        ch = *++str)
     {
-      *str2++ = (islower (ch)) ? ch : tolower (ch);
+      *str2++ = TOLOWER (ch);
     }
 
   *str2 = '\0';
@@ -751,8 +749,8 @@ i370_elf_suffix (str_p, exp_p)
   return BFD_RELOC_UNUSED;
 }
 
-/* Like normal .long/.short/.word, except support @got, etc. */
-/* clobbers input_line_pointer, checks end-of-line. */
+/* Like normal .long/.short/.word, except support @got, etc.  */
+/* clobbers input_line_pointer, checks end-of-line.  */
 static void
 i370_elf_cons (nbytes)
      register int nbytes;        /* 1=.byte, 2=.word, 4=.long */
@@ -792,7 +790,7 @@ i370_elf_cons (nbytes)
     }
   while (*input_line_pointer++ == ',');
 
-  input_line_pointer--;                /* Put terminator back into stream. */
+  input_line_pointer--;                /* Put terminator back into stream.  */
   demand_empty_rest_of_line ();
 }
 
@@ -945,7 +943,7 @@ i370_ebcdic (unused)
       p = frag_more (nbytes);
       while (end > input_line_pointer)
        {
-         *p = ascebc [(unsigned char)(*input_line_pointer)];
+         *p = ascebc [(unsigned char) (*input_line_pointer)];
          ++p; ++input_line_pointer;
        }
       *p = '\0';
@@ -1119,7 +1117,7 @@ i370_elf_rdata (sect)
 
 /* Pseudo op to make file scope bss items */
 static void
-i370_elf_lcomm(unused)
+i370_elf_lcomm (unused)
      int unused;
 {
   register char *name;
@@ -1273,11 +1271,10 @@ i370_elf_validate_fix (fixp, seg)
 }
 #endif /* OBJ_ELF */
 
-
 \f
 #define LITERAL_POOL_SUPPORT
 #ifdef LITERAL_POOL_SUPPORT
-/* Provide support for literal pools within the text section. */
+/* Provide support for literal pools within the text section.  */
 /* Loosely based on similar code from tc-arm.c  */
 /*
  * We will use four symbols to locate four parts of the literal pool.
@@ -1329,13 +1326,13 @@ add_to_lit_pool (expressionS *exx, char *name, int sz)
 
   /* start a new pool, if necessary */
   if (8 == sz && NULL == longlong_poolP)
-    longlong_poolP = symbol_make_empty();
+    longlong_poolP = symbol_make_empty ();
   else if (4 == sz && NULL == word_poolP)
-    word_poolP = symbol_make_empty();
+    word_poolP = symbol_make_empty ();
   else if (2 == sz && NULL == short_poolP)
-    short_poolP = symbol_make_empty();
+    short_poolP = symbol_make_empty ();
   else if (1 == sz && NULL == byte_poolP)
-    byte_poolP = symbol_make_empty();
+    byte_poolP = symbol_make_empty ();
 
   /* Check if this literal value is already in the pool: */
   /* hack alert -- we should probably be checking expressions
@@ -1364,7 +1361,7 @@ add_to_lit_pool (expressionS *exx, char *name, int sz)
     {
       if (next_literal_pool_place > MAX_LITERAL_POOL_SIZE)
         {
-          as_bad("Literal Pool Overflow");
+          as_bad ("Literal Pool Overflow");
         }
 
       literals[next_literal_pool_place].exp = *exx;
@@ -1422,7 +1419,7 @@ add_to_lit_pool (expressionS *exx, char *name, int sz)
 static void
 symbol_locate (symbolP, name, segment, valu, frag)
      symbolS *symbolP;
-     CONST char *name;         /* It is copied, the caller can modify */
+     const char *name;         /* It is copied, the caller can modify */
      segT segment;             /* Segment identifier (SEG_<something>) */
      valueT valu;              /* Symbol value */
      fragS *frag;              /* Associated fragment */
@@ -1438,7 +1435,7 @@ symbol_locate (symbolP, name, segment, valu, frag)
 
   S_SET_SEGMENT (symbolP, segment);
   S_SET_VALUE (symbolP, valu);
-  symbol_clear_list_pointers(symbolP);
+  symbol_clear_list_pointers (symbolP);
 
   symbol_set_frag (symbolP, frag);
 
@@ -1480,7 +1477,7 @@ symbol_locate (symbolP, name, segment, valu, frag)
  * register operands. For example, "BL .L33" branch low
  * to .L33 RX form insn frequently terminates for-loops,
  */
-static boolean
+static bfd_boolean
 i370_addr_offset (expressionS *exx)
 {
   char *dot, *lab;
@@ -1492,11 +1489,11 @@ i370_addr_offset (expressionS *exx)
   lab = input_line_pointer;
   while (*lab && (',' != *lab) && ('(' != *lab))
     {
-      if (isdigit(*lab))
+      if (ISDIGIT (*lab))
        {
          all_digits = 1;
        }
-      else if (isalpha(*lab))
+      else if (ISALPHA (*lab))
        {
          if (!all_digits)
            {
@@ -1520,7 +1517,7 @@ i370_addr_offset (expressionS *exx)
   dot = strchr (input_line_pointer, '*');
 
   if (!dot && !islabel)
-    return false;
+    return FALSE;
 
   /* replace * with . and let expr munch on it.  */
   if (dot)
@@ -1528,7 +1525,7 @@ i370_addr_offset (expressionS *exx)
   expression (exx);
 
   /* OK, now we have to subtract the "using" location  */
-  /* normally branches appear in the text section only... */
+  /* normally branches appear in the text section only...  */
   if (0 == strncmp (now_seg->name, ".text", 5) || 0 > i370_using_other_regno)
     {
       i370_make_relative (exx, &i370_using_text_baseaddr);
@@ -1542,7 +1539,7 @@ i370_addr_offset (expressionS *exx)
   if (dot)
     *dot = '*';
 
-  return true;
+  return TRUE;
 }
 
 /* handle address constants of various sorts */
@@ -1553,7 +1550,7 @@ i370_addr_offset (expressionS *exx)
  *    =F'1234'        32-bit const int
  *    =H'1234'        16-bit const int
  */
-static boolean
+static bfd_boolean
 i370_addr_cons (expressionS *exp)
 {
   char *name;
@@ -1565,13 +1562,13 @@ i370_addr_cons (expressionS *exp)
   name = input_line_pointer;
   sym_name = input_line_pointer;
   /* Find the spelling of the operand */
-  if (name[0] == '=' && isalpha (name[1]))
+  if (name[0] == '=' && ISALPHA (name[1]))
     {
       name = ++input_line_pointer;
     }
   else
     {
-      return false;
+      return FALSE;
     }
   switch (name[0])
     {
@@ -1655,7 +1652,7 @@ i370_addr_cons (expressionS *exp)
              save = input_line_pointer;
              while (*save)
                {
-                 if (isxdigit(*save))
+                 if (ISXDIGIT (*save))
                    hex_len++;
                  save++;
                }
@@ -1689,17 +1686,17 @@ i370_addr_cons (expressionS *exp)
       if ((exp->X_op != O_constant) && (exp->X_op != O_big))
        {
          as_bad ("expression not a constant");
-         return false;
+         return FALSE;
        }
       add_to_lit_pool (exp, 0x0, cons_len);
       break;
 
     default:
       as_bad ("Unknown/unsupported address literal type");
-      return false;
+      return FALSE;
     }
 
-  return true;
+  return TRUE;
 }
 
 \f
@@ -1755,7 +1752,6 @@ i370_ltorg (ignore)
   else as_bad ("bad alignment of %d bytes in literal pool", biggest_literal_size);
   if (0 == biggest_align) biggest_align = 1;
 
-
   /* Align pool for short, word, double word accesses */
   frag_align (biggest_align, 0, 0);
   record_alignment (now_seg, biggest_align);
@@ -1763,7 +1759,7 @@ i370_ltorg (ignore)
   /* Note that the gas listing will print only the first five
    * entries in the pool .... wonder how to make it print more ...
    */
-  /* output largest literals first, then the smaller ones. */
+  /* output largest literals first, then the smaller ones.  */
   for (litsize=8; litsize; litsize /=2)
     {
       symbolS *current_poolP = NULL;
@@ -1801,7 +1797,7 @@ i370_ltorg (ignore)
               */
              if (literals[lit_count].sym_name)
                {
-                 symbolS * symP = symbol_make_empty();
+                 symbolS * symP = symbol_make_empty ();
                  symbol_locate (symP, literals[lit_count].sym_name, now_seg,
                                 (valueT) frag_now_fix (), frag_now);
                  symbol_table_insert (symP);
@@ -1841,13 +1837,13 @@ i370_using (ignore)
   char *star;
 
   /* if "*" appears in a using, it means "."  */
-  /* replace it with "." so that expr doesn't get confused. */
+  /* replace it with "." so that expr doesn't get confused.  */
   star = strchr (input_line_pointer, '*');
   if (star)
     *star = '.';
 
   /* the first arg to using will usually be ".", but it can
-   * be a more complex exprsssion too ... */
+   * be a more complex exprsssion too ...  */
   expression (&baseaddr);
   if (star)
     *star = '*';
@@ -1983,7 +1979,7 @@ md_assemble (str)
 #endif
 
   /* Get the opcode.  */
-  for (s = str; *s != '\0' && ! isspace (*s); s++)
+  for (s = str; *s != '\0' && ! ISSPACE (*s); s++)
     ;
   if (*s != '\0')
     *s++ = '\0';
@@ -2008,7 +2004,7 @@ md_assemble (str)
   insn = opcode->opcode;
 
   str = s;
-  while (isspace (*str))
+  while (ISSPACE (*str))
     ++str;
 
   /* I370 operands are either expressions or address constants.
@@ -2171,7 +2167,7 @@ md_assemble (str)
       hold = input_line_pointer;
       input_line_pointer = str;
 
-      /* register names are only allowed where there are registers ... */
+      /* register names are only allowed where there are registers ...  */
       if ((operand->flags & I370_OPERAND_GPR) != 0)
         {
           /* quickie hack to get past things like (,r13) */
@@ -2187,9 +2183,9 @@ md_assemble (str)
             }
         }
 
-      /* check for a address constant expression */
+      /* Check for an address constant expression.  */
       /* We will put PSW-relative addresses in the text section,
-       * and adress literals in the .data (or other) section. */
+       * and adress literals in the .data (or other) section.  */
       else if (i370_addr_cons (&ex))
        use_other=1;
       else if (i370_addr_offset (&ex))
@@ -2224,7 +2220,7 @@ md_assemble (str)
           /* Allow @HA, @L, @H on constants.
            * Well actually, no we don't; there really don't make sense
            * (at least not to me) for the i370.  However, this code is
-           * left here for any dubious future expansion reasons ... */
+           * left here for any dubious future expansion reasons ...  */
           char *orig_str = str;
 
           if ((reloc = i370_elf_suffix (&str, &ex)) != BFD_RELOC_UNUSED)
@@ -2293,7 +2289,7 @@ md_assemble (str)
        ++str;
     }
 
-  while (isspace (*str))
+  while (ISSPACE (*str))
     ++str;
 
   if (*str != '\0')
@@ -2325,7 +2321,7 @@ md_assemble (str)
      BFD_RELOC_UNUSED plus the operand index.  This lets us easily
      handle fixups for any operand type, although that is admittedly
      not a very exciting feature.  We pick a BFD reloc type in
-     md_apply_fix.  */
+     md_apply_fix3.  */
   for (i = 0; i < fc; i++)
     {
       const struct i370_operand *operand;
@@ -2343,7 +2339,7 @@ md_assemble (str)
          size = bfd_get_reloc_size (reloc_howto);
 
          if (size < 1 || size > 4)
-           abort();
+           abort ();
 
          printf (" gwana doo fixup %d \n", i);
          fixP = fix_new_exp (frag_now, f - frag_now->fr_literal, size,
@@ -2466,7 +2462,7 @@ i370_section_letter (letter, ptr_msg)
   if (letter == 'e')
     return SHF_EXCLUDE;
 
-  *ptr_msg = "Bad .section directive: want a,w,x,e in string";
+  *ptr_msg = "Bad .section directive: want a,e,w,x,M,S in string";
   return 0;
 }
 
@@ -2620,7 +2616,7 @@ md_atof (type, litp, sizep)
     }
 
   /* 360/370/390 have two float formats: an old, funky 360 single-precision
-   * format, and the ieee format.  Support only the ieee format. */
+   * format, and the ieee format.  Support only the ieee format.  */
   t = atof_ieee (input_line_pointer, type, words);
   if (t)
     input_line_pointer = t;
@@ -2684,7 +2680,6 @@ md_convert_frag (abfd, sec, fragp)
 
 /* We have no need to default values of symbols.  */
 
-/*ARGSUSED*/
 symbolS *
 md_undefined_symbol (name)
      char *name;
@@ -2705,7 +2700,6 @@ md_pcrel_from_section (fixp, sec)
   return fixp->fx_frag->fr_address + fixp->fx_where;
 }
 
-
 /* Apply a fixup to the object code.  This is called for all the
    fixups we generated by the call to fix_new_exp, above.  In the call
    above we used a reloc code which was the largest legal reloc code
@@ -2719,117 +2713,82 @@ md_pcrel_from_section (fixp, sec)
    going on here ...
 */
 
-int
-md_apply_fix3 (fixp, valuep, seg)
-     fixS *fixp;
-     valueT *valuep;
+void
+md_apply_fix3 (fixP, valP, seg)
+     fixS *fixP;
+     valueT * valP;
      segT seg;
 {
-  valueT value;
+  valueT value = * valP;
 
-  value = *valuep;
-  if (fixp->fx_addsy != NULL)
+  if (fixP->fx_addsy != NULL)
     {
-      /* Notes:
-         Branches to labels will come in here with fixp->fx_pcrel set to 1
-         and fixp->fx_subsy not null, and holding the value of the base
-         (i.e. the value of the .using). These we want to ignore.
-
-         'Strong' and 'weak' symbols will come in here with
-         fixp->fx_pcrel==0, fixp->fx_addsy defined, and
-         *valuep holding the value of the symbol.
-
-         'Strong' symbols will have S_GET_VALUE(fx_addsy) equal to zero,
-         whereas 'weak' symbols will have S_GET_VALUE(fx_addsy) set to the
-         symbol value (usually).
-
-         We want to subtract S_GET_VALUE(fx_addsy) if it set, and
-         for all practical purposes, do a fixup with value zero.  This
-         is because the linker/loader, at a later time, will do this
-         fixup with the correct value. If we fixup now with a value,
-         it will get double-fixed, leading to garbage.
-
-         Note that subsy will also be set for strong/weak symbols
-         when the user program was compiled with -g.  In that case,
-         subsy will hold the base address (i.e. the .using address).
-      */
-
-      if (fixp->fx_addsy->sy_used_in_reloc
-          && S_GET_SEGMENT (fixp->fx_addsy) != absolute_section
-          && S_GET_SEGMENT (fixp->fx_addsy) != undefined_section
-          && ! bfd_is_com_section (S_GET_SEGMENT (fixp->fx_addsy)))
-        value -= S_GET_VALUE (fixp->fx_addsy);
-
 #ifdef DEBUG
       printf ("\nmd_apply_fix3: symbol %s at 0x%x (%s:%d) val=0x%x addend=0x%x\n",
-             S_GET_NAME (fixp->fx_addsy),
-             fixp->fx_frag->fr_address + fixp->fx_where,
-             fixp->fx_file, fixp->fx_line,
-             S_GET_VALUE (fixp->fx_addsy), value);
+             S_GET_NAME (fixP->fx_addsy),
+             fixP->fx_frag->fr_address + fixP->fx_where,
+             fixP->fx_file, fixP->fx_line,
+             S_GET_VALUE (fixP->fx_addsy), value);
 #endif
     }
   else
-    {
-      fixp->fx_done = 1;
-      return 1;
-    }
+    fixP->fx_done = 1;
 
   /* Apply fixups to operands.  Note that there should be no relocations
      for any operands, since no instruction ever takes an operand
      that requires reloc.  */
-  if ((int) fixp->fx_r_type >= (int) BFD_RELOC_UNUSED)
+  if ((int) fixP->fx_r_type >= (int) BFD_RELOC_UNUSED)
     {
       int opindex;
       const struct i370_operand *operand;
       char *where;
       i370_insn_t insn;
 
-      opindex = (int) fixp->fx_r_type - (int) BFD_RELOC_UNUSED;
+      opindex = (int) fixP->fx_r_type - (int) BFD_RELOC_UNUSED;
 
       operand = &i370_operands[opindex];
 
 #ifdef DEBUG
       printf ("\nmd_apply_fix3: fixup operand %s at 0x%x in %s:%d addend=0x%x\n",
              operand->name,
-             fixp->fx_frag->fr_address + fixp->fx_where,
-             fixp->fx_file, fixp->fx_line,
+             fixP->fx_frag->fr_address + fixP->fx_where,
+             fixP->fx_file, fixP->fx_line,
              value);
 #endif
       /* Fetch the instruction, insert the fully resolved operand
          value, and stuff the instruction back again.
-         fisxp->fx_size is the length of the instruction. */
-      where = fixp->fx_frag->fr_literal + fixp->fx_where;
+         fisxp->fx_size is the length of the instruction.  */
+      where = fixP->fx_frag->fr_literal + fixP->fx_where;
       insn.i[0] = bfd_getb32 ((unsigned char *) where);
-      if (6 <= fixp->fx_size)
-       {    /* deal with 48-bit insn's */
-         insn.i[1] = bfd_getb32 (((unsigned char *) where)+4);
-       }
+
+      if (6 <= fixP->fx_size)
+       /* Deal with 48-bit insn's.  */
+       insn.i[1] = bfd_getb32 (((unsigned char *) where)+4);
+
       insn = i370_insert_operand (insn, operand, (offsetT) value);
       bfd_putb32 ((bfd_vma) insn.i[0], (unsigned char *) where);
-      if (6 <= fixp->fx_size)
-       {   /* deal with 48-bit insn's */
-         bfd_putb32 ((bfd_vma) insn.i[1], (((unsigned char *) where)+4));
-       }
 
-      /* we are done, right? right !! */
-      fixp->fx_done = 1;
-      if (fixp->fx_done)
-        {
-          /* Nothing else to do here.  */
-          return 1;
-        }
+      if (6 <= fixP->fx_size)
+       /* Deal with 48-bit insn's.  */
+       bfd_putb32 ((bfd_vma) insn.i[1], (((unsigned char *) where)+4));
+
+      /* We are done, right? right !!  */
+      fixP->fx_done = 1;
+      if (fixP->fx_done)
+       /* Nothing else to do here.  */
+       return;
 
       /* Determine a BFD reloc value based on the operand information.
         We are only prepared to turn a few of the operands into
         relocs.  In fact, we support *zero* operand relocations ...
         Why?  Because we are not expecting the compiler to generate
         any operands that need relocation.  Due to the 12-bit naturew of
-        i370 addressing, this would be unusual. */
+        i370 addressing, this would be unusual.  */
 #if 0
       if ((operand->flags & I370_OPERAND_RELATIVE) != 0
           && operand->bits == 12
           && operand->shift == 0)
-        fixp->fx_r_type = BFD_RELOC_I370_D12;
+        fixP->fx_r_type = BFD_RELOC_I370_D12;
       else
 #endif
         {
@@ -2838,61 +2797,60 @@ md_apply_fix3 (fixp, valuep, seg)
 
           /* Use expr_symbol_where to see if this is an expression
              symbol.  */
-          if (expr_symbol_where (fixp->fx_addsy, &sfile, &sline))
-            as_bad_where (fixp->fx_file, fixp->fx_line,
+          if (expr_symbol_where (fixP->fx_addsy, &sfile, &sline))
+            as_bad_where (fixP->fx_file, fixP->fx_line,
                          "unresolved expression that must be resolved");
           else
-            as_bad_where (fixp->fx_file, fixp->fx_line,
+            as_bad_where (fixP->fx_file, fixP->fx_line,
                          "unsupported relocation type");
-          fixp->fx_done = 1;
-          return 1;
+          fixP->fx_done = 1;
+          return;
         }
     }
   else
     {
       /* We branch to here if the fixup is not to a symbol that
-       * appears in an instruction operand, but is rather some
-       * declared storage.
-       */
+         appears in an instruction operand, but is rather some
+         declared storage.  */
 #ifdef OBJ_ELF
-      i370_elf_validate_fix (fixp, seg);
+      i370_elf_validate_fix (fixP, seg);
 #endif
 #ifdef DEBUG
       printf ("md_apply_fix3: reloc case %d in segment  %s %s:%d\n",
-             fixp->fx_r_type, segment_name (seg), fixp->fx_file, fixp->fx_line);
+             fixP->fx_r_type, segment_name (seg), fixP->fx_file, fixP->fx_line);
       printf ("\tcurrent fixup value is 0x%x \n", value);
 #endif
-      switch (fixp->fx_r_type)
+      switch (fixP->fx_r_type)
         {
         case BFD_RELOC_32:
         case BFD_RELOC_CTOR:
-          if (fixp->fx_pcrel)
-            fixp->fx_r_type = BFD_RELOC_32_PCREL;
-         /* fall through */
+          if (fixP->fx_pcrel)
+            fixP->fx_r_type = BFD_RELOC_32_PCREL;
+         /* Fall through.  */
 
         case BFD_RELOC_RVA:
         case BFD_RELOC_32_PCREL:
         case BFD_RELOC_32_BASEREL:
 #ifdef DEBUG
           printf ("\t32 bit relocation at 0x%x\n",
-                 fixp->fx_frag->fr_address + fixp->fx_where);
+                 fixP->fx_frag->fr_address + fixP->fx_where);
 #endif
-          md_number_to_chars (fixp->fx_frag->fr_literal + fixp->fx_where,
+          md_number_to_chars (fixP->fx_frag->fr_literal + fixP->fx_where,
                              value, 4);
           break;
 
         case BFD_RELOC_LO16:
         case BFD_RELOC_16:
-          if (fixp->fx_pcrel)
-            as_bad_where (fixp->fx_file, fixp->fx_line,
+          if (fixP->fx_pcrel)
+            as_bad_where (fixP->fx_file, fixP->fx_line,
                          "cannot emit PC relative %s relocation%s%s",
-                         bfd_get_reloc_code_name (fixp->fx_r_type),
-                         fixp->fx_addsy != NULL ? " against " : "",
-                         (fixp->fx_addsy != NULL
-                          ? S_GET_NAME (fixp->fx_addsy)
+                         bfd_get_reloc_code_name (fixP->fx_r_type),
+                         fixP->fx_addsy != NULL ? " against " : "",
+                         (fixP->fx_addsy != NULL
+                          ? S_GET_NAME (fixP->fx_addsy)
                           : ""));
 
-          md_number_to_chars (fixp->fx_frag->fr_literal + fixp->fx_where,
+          md_number_to_chars (fixP->fx_frag->fr_literal + fixP->fx_where,
                              value, 2);
           break;
 
@@ -2900,37 +2858,35 @@ md_apply_fix3 (fixp, valuep, seg)
              lis %r3,(L1-L2)@ha
              where L1 and L2 are defined later.  */
         case BFD_RELOC_HI16:
-          if (fixp->fx_pcrel)
+          if (fixP->fx_pcrel)
             abort ();
-          md_number_to_chars (fixp->fx_frag->fr_literal + fixp->fx_where,
+          md_number_to_chars (fixP->fx_frag->fr_literal + fixP->fx_where,
                              value >> 16, 2);
           break;
         case BFD_RELOC_HI16_S:
-          if (fixp->fx_pcrel)
+          if (fixP->fx_pcrel)
             abort ();
-          md_number_to_chars (fixp->fx_frag->fr_literal + fixp->fx_where,
+          md_number_to_chars (fixP->fx_frag->fr_literal + fixP->fx_where,
                              (value + 0x8000) >> 16, 2);
           break;
 
         case BFD_RELOC_8:
-          if (fixp->fx_pcrel)
+          if (fixP->fx_pcrel)
             abort ();
 
-          md_number_to_chars (fixp->fx_frag->fr_literal + fixp->fx_where,
+          md_number_to_chars (fixP->fx_frag->fr_literal + fixP->fx_where,
                              value, 1);
           break;
 
         default:
-          fprintf(stderr,
-                 "Gas failure, reloc value %d\n", fixp->fx_r_type);
-          fflush(stderr);
+          fprintf (stderr,
+                 "Gas failure, reloc value %d\n", fixP->fx_r_type);
+          fflush (stderr);
           abort ();
         }
     }
 
-  fixp->fx_addnumber = value;
-
-  return 1;
+  fixP->fx_addnumber = value;
 }
 
 /* Generate a reloc for a fixup.  */