S/390: Fix 16 bit pc relative relocs.
[deliverable/binutils-gdb.git] / gas / config / tc-i960.c
index 43a301bcb911f41f64de2c9a601fb705c2cd3773..70ac3798d85f2872bcd5ecd8661b0982d65a4cfd 100644 (file)
@@ -1,13 +1,11 @@
 /* tc-i960.c - All the i80960-specific stuff
-   Copyright 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
-   1999, 2000, 2001, 2002, 2003, 2005
-   Free Software Foundation, Inc.
+   Copyright (C) 1989-2016 Free Software Foundation, Inc.
 
    This file is part of GAS.
 
    GAS is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2, or (at your option)
+   the Free Software Foundation; either version 3, or (at your option)
    any later version.
 
    GAS is distributed in the hope that it will be useful,
         less than 4096 is specified, in which case we need neither a fixup nor
         a relocation directive.  */
 
-#include <stdio.h>
-
 #include "as.h"
 
 #include "safe-ctype.h"
-#include "obstack.h"
 
 #include "opcode/i960.h"
 
 
 extern char *input_line_pointer;
 
-#if !defined (BFD_ASSEMBLER) && !defined (BFD)
-#ifdef OBJ_COFF
-const int md_reloc_size = sizeof (struct reloc);
-#else /* OBJ_COFF */
-const int md_reloc_size = sizeof (struct relocation_info);
-#endif /* OBJ_COFF */
-#endif
-
 /* Local i80960 routines.  */
 struct memS;
 struct regop;
@@ -253,7 +240,7 @@ struct regop
    operands.  */
 static const struct
   {
-    char *reg_name;
+    const char *reg_name;
     int reg_num;
   }
 regnames[] =
@@ -348,7 +335,7 @@ regnames[] =
    'abase' (indirect addressing) registers.  */
 static const struct
 {
-  char *areg_name;
+  const char *areg_name;
   int areg_num;
 }
 aregs[] =
@@ -463,7 +450,7 @@ static int br_cnt;
 /* Name of the table of pointers to branches.  A local (i.e.,
    non-external) symbol.  */
 
-static void ctrl_fmt (char *, long, int);
+static void ctrl_fmt (const char *, long, int);
 
 \f
 void
@@ -508,7 +495,7 @@ md_begin (void)
    string is not consumed in the evaluation -- tolerate no dangling junk!  */
 
 static void
-parse_expr (char *textP,               /* Text of expression to be parsed.  */
+parse_expr (const char *textP,         /* Text of expression to be parsed.  */
            expressionS *expP)          /* Where to put the results of parsing.  */
 {
   char *save_in;               /* Save global here.  */
@@ -526,7 +513,7 @@ parse_expr (char *textP,            /* Text of expression to be parsed.  */
   else
     {
       save_in = input_line_pointer;    /* Save global.  */
-      input_line_pointer = textP;      /* Make parser work for us.  */
+      input_line_pointer = (char *) textP;     /* Make parser work for us.  */
 
       (void) expression (expP);
       if ((size_t) (input_line_pointer - textP) != strlen (textP))
@@ -571,13 +558,13 @@ emit (long instr)         /* Word to be output, host byte order.  */
                address displacement is greater than 13 bits.  */
 
 static void
-get_cdisp (char *dispP, /* Displacement as specified in source instruction.  */
-          char *ifmtP, /* "COBR" or "CTRL" (for use in error message).  */
+get_cdisp (const char *dispP, /* Displacement as specified in source instruction.  */
+          const char *ifmtP, /* "COBR" or "CTRL" (for use in error message).  */
           long instr,  /* Instruction needing the displacement.  */
           int numbits, /* # bits of displacement (13 for COBR, 24 for CTRL).  */
           int var_frag,/* 1 if varying length code fragment should be emitted;
                           0 if an address fix should be emitted.  */
-          int callj)   /* 1 if callj relocation should be done; else 0.  */       
+          int callj)   /* 1 if callj relocation should be done; else 0.  */
 {
   expressionS e;               /* Parsed expression.  */
   fixS *fixP;                  /* Structure describing needed address fix.  */
@@ -590,6 +577,7 @@ get_cdisp (char *dispP, /* Displacement as specified in source instruction.  */
     {
     case O_illegal:
       as_bad (_("expression syntax error"));
+      break;
 
     case O_symbol:
       if (S_GET_SEGMENT (e.X_add_symbol) == now_seg
@@ -815,7 +803,7 @@ parse_regop (struct regop *regopP,  /* Where to put description of register opera
 }
 
 /* get_ispec:  parse a memory operand for an index specification
-   
+
    Here, an "index specification" is taken to be anything surrounded
    by square brackets and NOT followed by anything else.
 
@@ -824,7 +812,7 @@ parse_regop (struct regop *regopP,  /* Where to put description of register opera
 
 static char *
 get_ispec (char *textP)  /* Pointer to memory operand from source instruction, no white space.  */
-          
+
 {
   /* Points to start of index specification.  */
   char *start;
@@ -1053,7 +1041,7 @@ parse_memop (memS *memP,  /* Where to put the results.  */
     case I_BIT:
       /* Treat missing displacement as displacement of 0.  */
       mode |= D_BIT;
-      /* Fall into next case.  */
+      /* Fall through.  */
     case D_BIT | A_BIT | I_BIT:
     case D_BIT | I_BIT:
       /* Set MEMB bit in mode, and OR in mode bits.  */
@@ -1079,7 +1067,7 @@ mem_fmt (char *args[],            /* args[0]->opcode mnemonic, args[1-3]->operands.  */
   char opdesc;                 /* Operand descriptor byte.  */
   memS instr;                  /* Description of binary to be output.  */
   char *outP;                  /* Where the binary was output to.  */
-  expressionS expr;            /* Parsed expression.  */
+  expressionS exp            /* Parsed expression.  */
   /* ->description of deferred address fixup.  */
   fixS *fixP;
 
@@ -1107,7 +1095,7 @@ mem_fmt (char *args[],            /* args[0]->opcode mnemonic, args[1-3]->operands.  */
 
   /* Parse the displacement; this must be done before emitting the
      opcode, in case it is an expression using `.'.  */
-  parse_expr (instr.e, &expr);
+  parse_expr (instr.e, &exp);
 
   /* Output opcode.  */
   outP = emit (instr.opcode);
@@ -1116,7 +1104,7 @@ mem_fmt (char *args[],            /* args[0]->opcode mnemonic, args[1-3]->operands.  */
     return;
 
   /* Process the displacement.  */
-  switch (expr.X_op)
+  switch (exp.X_op)
     {
     case O_illegal:
       as_bad (_("expression syntax error"));
@@ -1124,23 +1112,23 @@ mem_fmt (char *args[],          /* args[0]->opcode mnemonic, args[1-3]->operands.  */
 
     case O_constant:
       if (instr.disp == 32)
-       (void) emit (offs (expr));      /* Output displacement.  */
+       (void) emit (offs (exp));       /* Output displacement.  */
       else
        {
          /* 12-bit displacement.  */
-         if (offs (expr) & ~0xfff)
+         if (offs (exp) & ~0xfff)
            {
              /* Won't fit in 12 bits: convert already-output
                 instruction to MEMB format, output
                 displacement.  */
              mema_to_memb (outP);
-             (void) emit (offs (expr));
+             (void) emit (offs (exp));
            }
          else
            {
              /* WILL fit in 12 bits:  OR into opcode and
                 overwrite the binary we already put out.  */
-             instr.opcode |= offs (expr);
+             instr.opcode |= offs (exp);
              md_number_to_chars (outP, instr.opcode, 4);
            }
        }
@@ -1158,7 +1146,7 @@ mem_fmt (char *args[],            /* args[0]->opcode mnemonic, args[1-3]->operands.  */
       outP = emit ((long) 0);
       fixP = fix_new_exp (frag_now,
                          outP - frag_now->fr_literal,
-                         4, & expr, 0, NO_RELOC);
+                         4, &exp, 0, NO_RELOC);
       /* Steve's linker relaxing hack.  Mark this 32-bit relocation as
          being in the instruction stream, specifically as part of a callx
          instruction.  */
@@ -1259,7 +1247,7 @@ parse_ldconst (char *arg[])       /* See above.  */
     {
     default:
       /* We're dependent on one or more symbols -- use "lda".  */
-      arg[0] = "lda";
+      arg[0] = (char *) "lda";
       break;
 
     case O_constant:
@@ -1271,31 +1259,31 @@ parse_ldconst (char *arg[])     /* See above.  */
               ldconst  64,<reg>  -> shlo 8,3,<reg>
               ldconst  -1,<reg>  -> subo 1,0,<reg>
               ldconst -31,<reg>  -> subo 31,0,<reg>
-        
+
          Anything else becomes:
                 lda xxx,<reg>.  */
       n = offs (e);
       if ((0 <= n) && (n <= 31))
-       arg[0] = "mov";
+       arg[0] = (char *) "mov";
       else if ((-31 <= n) && (n <= -1))
        {
-         arg[0] = "subo";
+         arg[0] = (char *) "subo";
          arg[3] = arg[2];
          sprintf (buf, "%d", -n);
          arg[1] = buf;
-         arg[2] = "0";
+         arg[2] = (char *) "0";
        }
       else if ((32 <= n) && (n <= 62))
        {
-         arg[0] = "addo";
+         arg[0] = (char *) "addo";
          arg[3] = arg[2];
-         arg[1] = "31";
+         arg[1] = (char *) "31";
          sprintf (buf, "%d", n - 31);
          arg[2] = buf;
        }
       else if ((shift = shift_ok (n)) != 0)
        {
-         arg[0] = "shlo";
+         arg[0] = (char *) "shlo";
          arg[3] = arg[2];
          sprintf (buf, "%d", shift);
          arg[1] = buf;
@@ -1303,7 +1291,7 @@ parse_ldconst (char *arg[])       /* See above.  */
          arg[2] = buf2;
        }
       else
-       arg[0] = "lda";
+       arg[0] = (char *) "lda";
       break;
 
     case O_illegal:
@@ -1507,7 +1495,7 @@ brlab_next (void)
 }
 
 static void
-ctrl_fmt (char *targP,         /* Pointer to text of lone operand (if any).  */
+ctrl_fmt (const char *targP,           /* Pointer to text of lone operand (if any).  */
          long opcode,          /* Template of instruction.  */
          int num_ops)          /* Number of operands.  */
 {
@@ -1677,29 +1665,30 @@ md_assemble (char *textP)
          break;
        case REG:
          if (branch_predict)
-           as_warn (bp_error_msg);
+           as_warn ("%s", bp_error_msg);
          reg_fmt (args, oP);
          break;
        case MEM1:
          if (args[0][0] == 'c' && args[0][1] == 'a')
            {
              if (branch_predict)
-               as_warn (bp_error_msg);
+               as_warn ("%s", bp_error_msg);
              mem_fmt (args, oP, 1);
              break;
            }
+         /* Fall through.  */
        case MEM2:
        case MEM4:
        case MEM8:
        case MEM12:
        case MEM16:
          if (branch_predict)
-           as_warn (bp_error_msg);
+           as_warn ("%s", bp_error_msg);
          mem_fmt (args, oP, 0);
          break;
        case CALLJ:
          if (branch_predict)
-           as_warn (bp_error_msg);
+           as_warn ("%s", bp_error_msg);
          /* Output opcode & set up "fixup" (relocation); flag
             relocation as 'callj' type.  */
          know (oP->num_ops == 1);
@@ -1720,67 +1709,10 @@ md_number_to_chars (char *buf,
   number_to_chars_littleendian (buf, value, n);
 }
 
-#define MAX_LITTLENUMS 6
-#define LNUM_SIZE      sizeof (LITTLENUM_TYPE)
-
-/* md_atof:    convert ascii to floating point
-
-   Turn a string at input_line_pointer into a floating point constant of type
-   'type', and store the appropriate bytes at *litP.  The number of LITTLENUMS
-   emitted is returned at 'sizeP'.  An error message is returned, or a pointer
-   to an empty message if OK.
-
-   Note we call the i386 floating point routine, rather than complicating
-   things with more files or symbolic links.  */
-
-char *
+const char *
 md_atof (int type, char *litP, int *sizeP)
 {
-  LITTLENUM_TYPE words[MAX_LITTLENUMS];
-  LITTLENUM_TYPE *wordP;
-  int prec;
-  char *t;
-
-  switch (type)
-    {
-    case 'f':
-    case 'F':
-      prec = 2;
-      break;
-
-    case 'd':
-    case 'D':
-      prec = 4;
-      break;
-
-    case 't':
-    case 'T':
-      prec = 5;
-      type = 'x';              /* That's what atof_ieee() understands.  */
-      break;
-
-    default:
-      *sizeP = 0;
-      return _("Bad call to md_atof()");
-    }
-
-  t = atof_ieee (input_line_pointer, type, words);
-  if (t)
-    input_line_pointer = t;
-
-  *sizeP = prec * LNUM_SIZE;
-
-  /* Output the LITTLENUMs in REVERSE order in accord with i80960
-     word-order.  (Dunno why atof_ieee doesn't do it in the right
-     order in the first place -- probably because it's a hack of
-     atof_m68k.)  */
-  for (wordP = words + prec - 1; prec--;)
-    {
-      md_number_to_chars (litP, (long) (*wordP--), LNUM_SIZE);
-      litP += sizeof (LITTLENUM_TYPE);
-    }
-
-  return 0;
+  return ieee_md_atof (type, litP, sizeP, FALSE);
 }
 
 static void
@@ -1821,7 +1753,7 @@ md_number_to_field (char *instrP,         /* Pointer to instruction to be fixed.  */
     {
       /* Put bit field into instruction and write back in target
          * byte order.  */
-      val &= ~(-1 << (int) numbits);   /* Clear unused sign bits.  */
+      val &= ~(-(1 << (int) numbits)); /* Clear unused sign bits.  */
       instr |= val;
       md_number_to_chars (instrP, instr, 4);
     }
@@ -1879,7 +1811,7 @@ size_t md_longopts_size = sizeof (md_longopts);
 
 struct tabentry
 {
-  char *flag;
+  const char *flag;
   int arch;
 };
 static const struct tabentry arch_tab[] =
@@ -1897,7 +1829,7 @@ static const struct tabentry arch_tab[] =
 };
 
 int
-md_parse_option (int c, char *arg)
+md_parse_option (int c, const char *arg)
 {
   switch (c)
     {
@@ -1917,7 +1849,7 @@ md_parse_option (int c, char *arg)
     case 'A':
       {
        const struct tabentry *tp;
-       char *p = arg;
+       const char *p = arg;
 
        for (tp = arch_tab; tp->flag != NULL; tp++)
          if (!strcmp (p, tp->flag))
@@ -2050,17 +1982,10 @@ relax_cobr (fragS *fragP)       /* fragP->fr_opcode is assumed to point to
    If the fragment substate is 2, a 13-bit displacement was not enough.
    Replace the cobr with a two instructions (a compare and a branch).  */
 
-#ifndef BFD_ASSEMBLER
-void
-md_convert_frag (object_headers *headers ATTRIBUTE_UNUSED,
-                segT seg ATTRIBUTE_UNUSED,
-                fragS *fragP)
-#else
 void
 md_convert_frag (bfd *abfd ATTRIBUTE_UNUSED,
                 segT sec ATTRIBUTE_UNUSED,
                 fragS *fragP)
-#endif
 {
   /* Structure describing needed address fix.  */
   fixS *fixP;
@@ -2174,8 +2099,6 @@ brtab_emit (void)
   char buf[20];
   /* Where the binary was output to.  */
   char *p;
-  /* Pointer to description of deferred address fixup.  */
-  fixS *fixP;
 
   if (!instrument_branches)
     return;
@@ -2191,9 +2114,9 @@ brtab_emit (void)
     {
       sprintf (buf, "%s%d", BR_LABEL_BASE, i);
       p = emit (0);
-      fixP = fix_new (frag_now,
-                     p - frag_now->fr_literal,
-                     4, symbol_find (buf), 0, 0, NO_RELOC);
+      fix_new (frag_now,
+              p - frag_now->fr_literal,
+              4, symbol_find (buf), 0, 0, NO_RELOC);
     }
 }
 
@@ -2366,7 +2289,7 @@ parse_po (int po_num)     /* Pseudo-op number:  currently S_LEAFPROC or S_SYSPROC.
        passed fixup structure.  */
 
 int
-reloc_callj (fixS *fixP)  /* Relocation that can be done at assembly time.  */    
+reloc_callj (fixS *fixP)  /* Relocation that can be done at assembly time.  */
 {
   /* Points to the binary for the instruction being relocated.  */
   char *where;
@@ -2414,8 +2337,7 @@ s_endian (int ignore ATTRIBUTE_UNUSED)
   char *name;
   char c;
 
-  name = input_line_pointer;
-  c = get_symbol_end ();
+  c = get_symbol_name (&name);
   if (strcasecmp (name, "little") == 0)
     ;
   else if (strcasecmp (name, "big") == 0)
@@ -2423,7 +2345,7 @@ s_endian (int ignore ATTRIBUTE_UNUSED)
   else
     as_warn (_("ignoring unrecognized .endian type `%s'"), name);
 
-  *input_line_pointer = c;
+  (void) restore_line_pointer (c);
 
   demand_empty_rest_of_line ();
 }
@@ -2446,7 +2368,7 @@ md_pcrel_from (fixS *fixP)
 }
 
 void
-md_apply_fix3 (fixS *fixP,
+md_apply_fix (fixS *fixP,
               valueT *valP,
               segT seg ATTRIBUTE_UNUSED)
 {
@@ -2455,15 +2377,6 @@ md_apply_fix3 (fixS *fixP,
 
   if (!fixP->fx_bit_fixP)
     {
-#ifndef BFD_ASSEMBLER
-      /* For callx, we always want to write out zero, and emit a
-        symbolic relocation.  */
-      if (fixP->fx_bsr)
-       val = 0;
-
-      fixP->fx_addnumber = val;
-#endif
-
       md_number_to_imm (place, val, fixP->fx_size);
     }
   else if ((int) (size_t) fixP->fx_bit_fixP == 13
@@ -2546,33 +2459,6 @@ tc_bout_fix_to_chars (char *where,
 
 #endif /* OBJ_AOUT or OBJ_BOUT */
 
-#if defined (OBJ_COFF) && defined (BFD)
-short
-tc_coff_fix2rtype (fixS *fixP)
-{
-  if (fixP->fx_bsr)
-    abort ();
-
-  if (fixP->fx_pcrel == 0 && fixP->fx_size == 4)
-    return R_RELLONG;
-
-  if (fixP->fx_pcrel != 0 && fixP->fx_size == 4)
-    return R_IPRMED;
-
-  abort ();
-  return 0;
-}
-
-int
-tc_coff_sizemachdep (fragS *frag)
-{
-  if (frag->fr_next)
-    return frag->fr_next->fr_address - frag->fr_address;
-  else
-    return 0;
-}
-#endif
-
 /* Align an address by rounding it up to the specified boundary.  */
 
 valueT
@@ -2581,139 +2467,12 @@ md_section_align (segT seg,
 {
   int align;
 
-#ifdef BFD_ASSEMBLER
   align = bfd_get_section_alignment (stdoutput, seg);
-#else
-  align = section_alignment[(int) seg];
-#endif
-  return (addr + (1 << align) - 1) & (-1 << align);
+  return (addr + (1 << align) - 1) & -(1 << align);
 }
 
 extern int coff_flags;
 
-#ifdef OBJ_COFF
-void
-tc_headers_hook (object_headers *headers)
-{
-  switch (architecture)
-    {
-    case ARCH_KA:
-      coff_flags |= F_I960KA;
-      break;
-
-    case ARCH_KB:
-      coff_flags |= F_I960KB;
-      break;
-
-    case ARCH_MC:
-      coff_flags |= F_I960MC;
-      break;
-
-    case ARCH_CA:
-      coff_flags |= F_I960CA;
-      break;
-
-    case ARCH_JX:
-      coff_flags |= F_I960JX;
-      break;
-
-    case ARCH_HX:
-      coff_flags |= F_I960HX;
-      break;
-
-    default:
-      if (iclasses_seen == I_BASE)
-       coff_flags |= F_I960CORE;
-      else if (iclasses_seen & I_CX)
-       coff_flags |= F_I960CA;
-      else if (iclasses_seen & I_HX)
-       coff_flags |= F_I960HX;
-      else if (iclasses_seen & I_JX)
-       coff_flags |= F_I960JX;
-      else if (iclasses_seen & I_CX2)
-       coff_flags |= F_I960CA;
-      else if (iclasses_seen & I_MIL)
-       coff_flags |= F_I960MC;
-      else if (iclasses_seen & (I_DEC | I_FP))
-       coff_flags |= F_I960KB;
-      else
-       coff_flags |= F_I960KA;
-      break;
-    }
-
-  if (flag_readonly_data_in_text)
-    {
-      headers->filehdr.f_magic = I960RWMAGIC;
-      headers->aouthdr.magic = OMAGIC;
-    }
-  else
-    {
-      headers->filehdr.f_magic = I960ROMAGIC;
-      headers->aouthdr.magic = NMAGIC;
-    }                          /* set magic numbers */
-}
-
-#endif /* OBJ_COFF */
-
-#ifndef BFD_ASSEMBLER
-
-/* Things going on here:
-
-   For bout, We need to assure a couple of simplifying
-   assumptions about leafprocs for the linker: the leafproc
-   entry symbols will be defined in the same assembly in
-   which they're declared with the '.leafproc' directive;
-   and if a leafproc has both 'call' and 'bal' entry points
-   they are both global or both local.
-
-   For coff, the call symbol has a second aux entry that
-   contains the bal entry point.  The bal symbol becomes a
-   label.
-
-   For coff representation, the call symbol has a second aux entry that
-   contains the bal entry point.  The bal symbol becomes a label.  */
-
-void
-tc_crawl_symbol_chain (object_headers *headers ATTRIBUTE_UNUSED)
-{
-  symbolS *symbolP;
-
-  for (symbolP = symbol_rootP; symbolP; symbolP = symbol_next (symbolP))
-    {
-#ifdef OBJ_COFF
-      if (TC_S_IS_SYSPROC (symbolP))
-       {
-         /* Second aux entry already contains the sysproc number.  */
-         S_SET_NUMBER_AUXILIARY (symbolP, 2);
-         S_SET_STORAGE_CLASS (symbolP, C_SCALL);
-         S_SET_DATA_TYPE (symbolP, S_GET_DATA_TYPE (symbolP) | (DT_FCN << N_BTSHFT));
-         continue;
-       }
-#endif /* OBJ_COFF */
-
-      if (!TC_S_IS_BALNAME (symbolP) && !TC_S_IS_CALLNAME (symbolP))
-       continue;
-
-      if (!S_IS_DEFINED (symbolP))
-       as_bad (_("leafproc symbol '%s' undefined"), S_GET_NAME (symbolP));
-
-      if (TC_S_IS_CALLNAME (symbolP))
-       {
-         symbolS *balP = tc_get_bal_of_call (symbolP);
-
-         if (S_IS_EXTERNAL (symbolP) != S_IS_EXTERNAL (balP))
-           {
-             S_SET_EXTERNAL (symbolP);
-             S_SET_EXTERNAL (balP);
-             as_warn (_("Warning: making leafproc entries %s and %s both global\n"),
-                      S_GET_NAME (symbolP), S_GET_NAME (balP));
-           }                   /* externality mismatch */
-       }                       /* if callname */
-    }                          /* walk the symbol chain */
-}
-
-#endif /* ! BFD_ASSEMBLER */
-
 /* For aout or bout, the bal immediately follows the call.
 
    For coff, we cheat and store a pointer to the bal symbol in the
@@ -2841,8 +2600,6 @@ i960_validate_fix (fixS *fixP, segT this_segment_type ATTRIBUTE_UNUSED)
   return 1;
 }
 
-#ifdef BFD_ASSEMBLER
-
 /* From cgen.c:  */
 
 static short
@@ -2868,7 +2625,7 @@ tc_gen_reloc (asection *section ATTRIBUTE_UNUSED, fixS *fixP)
 {
   arelent * reloc;
 
-  reloc = xmalloc (sizeof (arelent));
+  reloc = XNEW (arelent);
 
   /* HACK: Is this right?  */
   fixP->fx_r_type = tc_bfd_fix2rtype (fixP);
@@ -2877,15 +2634,15 @@ tc_gen_reloc (asection *section ATTRIBUTE_UNUSED, fixS *fixP)
   if (reloc->howto == NULL)
     {
       as_bad_where (fixP->fx_file, fixP->fx_line,
-                   "internal error: can't export reloc type %d (`%s')",
+                   _("internal error: can't export reloc type %d (`%s')"),
                    fixP->fx_r_type,
                    bfd_get_reloc_code_name (fixP->fx_r_type));
       return NULL;
     }
 
-  assert (!fixP->fx_pcrel == !reloc->howto->pc_relative);
+  gas_assert (!fixP->fx_pcrel == !reloc->howto->pc_relative);
 
-  reloc->sym_ptr_ptr = xmalloc (sizeof (asymbol *));
+  reloc->sym_ptr_ptr = XNEW (asymbol *);
   *reloc->sym_ptr_ptr = symbol_get_bfdsym (fixP->fx_addsy);
   reloc->address = fixP->fx_frag->fr_address + fixP->fx_where;
   reloc->addend = fixP->fx_addnumber;
@@ -2895,8 +2652,6 @@ tc_gen_reloc (asection *section ATTRIBUTE_UNUSED, fixS *fixP)
 
 /* end from cgen.c */
 
-#endif /* BFD_ASSEMBLER */
-
 const pseudo_typeS md_pseudo_table[] =
 {
   {"bss", s_lcomm, 1},
This page took 0.048331 seconds and 4 git commands to generate.