Update year range in copyright notice of binutils files
[deliverable/binutils-gdb.git] / gas / config / tc-m32c.c
index db9cc06849b2ebde90a10a416c26c0442e5ee7a8..d6531869668dd96581641389e837637379a5857f 100644 (file)
@@ -1,5 +1,5 @@
 /* tc-m32c.c -- Assembler for the Renesas M32C.
 /* tc-m32c.c -- Assembler for the Renesas M32C.
-   Copyright (C) 2005, 2006, 2007, 2008 Free Software Foundation.
+   Copyright (C) 2005-2019 Free Software Foundation, Inc.
    Contributed by RedHat.
 
    This file is part of GAS, the GNU Assembler.
    Contributed by RedHat.
 
    This file is part of GAS, the GNU Assembler.
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
    GNU General Public License for more details.
 
    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.  */
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+   MA 02110-1301, USA.  */
 
 #include "as.h"
 
 #include "as.h"
-#include "subsegs.h"     
+#include "subsegs.h"
 #include "symcat.h"
 #include "opcodes/m32c-desc.h"
 #include "opcodes/m32c-opc.h"
 #include "cgen.h"
 #include "elf/common.h"
 #include "elf/m32c.h"
 #include "symcat.h"
 #include "opcodes/m32c-desc.h"
 #include "opcodes/m32c-opc.h"
 #include "cgen.h"
 #include "elf/common.h"
 #include "elf/m32c.h"
-#include "libbfd.h"
 #include "safe-ctype.h"
 
 /* Structure to hold all of the different components
 #include "safe-ctype.h"
 
 /* Structure to hold all of the different components
@@ -105,7 +104,7 @@ set_isa (enum isa_attr isa_num)
 static void s_bss (int);
 
 int
 static void s_bss (int);
 
 int
-md_parse_option (int c, char * arg ATTRIBUTE_UNUSED)
+md_parse_option (int c, const char * arg ATTRIBUTE_UNUSED)
 {
   switch (c)
     {
 {
   switch (c)
     {
@@ -141,7 +140,7 @@ void
 md_show_usage (FILE * stream)
 {
   fprintf (stream, _(" M32C specific command line options:\n"));
 md_show_usage (FILE * stream)
 {
   fprintf (stream, _(" M32C specific command line options:\n"));
-} 
+}
 
 static void
 s_bss (int ignore ATTRIBUTE_UNUSED)
 
 static void
 s_bss (int ignore ATTRIBUTE_UNUSED)
@@ -200,7 +199,7 @@ m32c_md_end (void)
       /* Pad with nops for objdump.  */
       n_nops = (32 - ((insn_size) % 32)) / 8;
       for (i = 1; i <= n_nops; i++)
       /* Pad with nops for objdump.  */
       n_nops = (32 - ((insn_size) % 32)) / 8;
       for (i = 1; i <= n_nops; i++)
-       md_assemble ("nop");
+       md_assemble ((char *) "nop");
     }
 }
 
     }
 }
 
@@ -261,21 +260,21 @@ m32c_indirect_operand (char *str)
       if (s[0] == '[' && s[1] == '[')
        indirection[operand] = relative;
     }
       if (s[0] == '[' && s[1] == '[')
        indirection[operand] = relative;
     }
-   
+
   if (indirection[1] == none && indirection[2] == none)
     return FALSE;
   if (indirection[1] == none && indirection[2] == none)
     return FALSE;
-  
+
   operand = 1;
   ns_len = strlen (str);
   operand = 1;
   ns_len = strlen (str);
-  new_str = (char*) xmalloc (ns_len);
+  new_str = XNEWVEC (char, ns_len);
   ns = new_str;
   ns_end = ns + ns_len;
   ns = new_str;
   ns_end = ns + ns_len;
+
   for (s = str; *s; s++)
     {
       if (s[0] == ',')
        operand = 2;
   for (s = str; *s; s++)
     {
       if (s[0] == ',')
        operand = 2;
+
       if (s[0] == '[' && ! brace_n[operand])
        {
          brace_n[operand] += 1;
       if (s[0] == '[' && ! brace_n[operand])
        {
          brace_n[operand] += 1;
@@ -283,7 +282,7 @@ m32c_indirect_operand (char *str)
          if (indirection[operand] != none)
            continue;
        }
          if (indirection[operand] != none)
            continue;
        }
+
       else if (s[0] == '[' && brace_n[operand])
        {
          brace_n[operand] += 1;
       else if (s[0] == '[' && brace_n[operand])
        {
          brace_n[operand] += 1;
@@ -315,13 +314,13 @@ m32c_indirect_operand (char *str)
       {
        fprintf (stderr, "Unmatched [[operand-%d]] %d\n", operand, brace_n[operand]);
       }
       {
        fprintf (stderr, "Unmatched [[operand-%d]] %d\n", operand, brace_n[operand]);
       }
-       
+
   if (indirection[1] != none && indirection[2] != none)
   if (indirection[1] != none && indirection[2] != none)
-    md_assemble ("src-dest-indirect");
+    md_assemble ((char *) "src-dest-indirect");
   else if (indirection[1] != none)
   else if (indirection[1] != none)
-    md_assemble ("src-indirect");
+    md_assemble ((char *) "src-indirect");
   else if (indirection[2] != none)
   else if (indirection[2] != none)
-    md_assemble ("dest-indirect");
+    md_assemble ((char *) "dest-indirect");
 
   md_assemble (new_str);
   free (new_str);
 
   md_assemble (new_str);
   free (new_str);
@@ -345,7 +344,7 @@ md_assemble (char * str)
 
   insn.insn = m32c_cgen_assemble_insn
     (gas_cgen_cpu_desc, str, & insn.fields, insn.buffer, & errmsg);
 
   insn.insn = m32c_cgen_assemble_insn
     (gas_cgen_cpu_desc, str, & insn.fields, insn.buffer, & errmsg);
-  
+
   if (!insn.insn)
     {
       as_bad ("%s", errmsg);
   if (!insn.insn)
     {
       as_bad ("%s", errmsg);
@@ -359,6 +358,7 @@ md_assemble (char * str)
 
   last_insn_had_delay_slot
     = CGEN_INSN_ATTR_VALUE (insn.insn, CGEN_INSN_DELAY_SLOT);
 
   last_insn_had_delay_slot
     = CGEN_INSN_ATTR_VALUE (insn.insn, CGEN_INSN_DELAY_SLOT);
+  (void) last_insn_had_delay_slot;
   insn_size = CGEN_INSN_BITSIZE(insn.insn);
 
   rl_type = rl_for (insn);
   insn_size = CGEN_INSN_BITSIZE(insn.insn);
 
   rl_type = rl_for (insn);
@@ -397,7 +397,7 @@ md_assemble (char * str)
 /* The syntax in the manual says constants begin with '#'.
    We just ignore it.  */
 
 /* The syntax in the manual says constants begin with '#'.
    We just ignore it.  */
 
-void 
+void
 md_operand (expressionS * exp)
 {
   /* In case of a syntax error, escape back to try next syntax combo. */
 md_operand (expressionS * exp)
 {
   /* In case of a syntax error, escape back to try next syntax combo. */
@@ -409,7 +409,7 @@ valueT
 md_section_align (segT segment, valueT size)
 {
   int align = bfd_get_section_alignment (stdoutput, segment);
 md_section_align (segT segment, valueT size)
 {
   int align = bfd_get_section_alignment (stdoutput, segment);
-  return ((size + (1 << align) - 1) & (-1 << align));
+  return ((size + (1 << align) - 1) & -(1 << align));
 }
 
 symbolS *
 }
 
 symbolS *
@@ -474,7 +474,7 @@ enum {
   M32C_MACRO_ADJNZ_3,
   M32C_MACRO_ADJNZ_4,
   M32C_MACRO_ADJNZ_5,
   M32C_MACRO_ADJNZ_3,
   M32C_MACRO_ADJNZ_4,
   M32C_MACRO_ADJNZ_5,
-} M32C_Macros;
+};
 
 static struct {
   int insn;
 
 static struct {
   int insn;
@@ -594,7 +594,7 @@ md_estimate_size_before_relax (fragS * fragP, segT segment ATTRIBUTE_UNUSED)
     }
 
   return subtype_mappings[fragP->fr_subtype].bytes - (fragP->fr_fix - where);
     }
 
   return subtype_mappings[fragP->fr_subtype].bytes - (fragP->fr_fix - where);
-} 
+}
 
 /* *fragP has been relaxed to its final size, and now needs to have
    the bytes inside it modified to conform to the new size.
 
 /* *fragP has been relaxed to its final size, and now needs to have
    the bytes inside it modified to conform to the new size.
@@ -623,27 +623,20 @@ md_convert_frag (bfd *   abfd ATTRIBUTE_UNUSED,
 {
   int addend;
   int operand;
 {
   int addend;
   int operand;
-  int new_insn;
   int where = fragP->fr_opcode - fragP->fr_literal;
   int rl_where = fragP->fr_opcode - fragP->fr_literal;
   unsigned char *op = (unsigned char *)fragP->fr_opcode;
   int where = fragP->fr_opcode - fragP->fr_literal;
   int rl_where = fragP->fr_opcode - fragP->fr_literal;
   unsigned char *op = (unsigned char *)fragP->fr_opcode;
-  int op_base = 0;
-  int op_op = 0;
   int rl_addend = 0;
 
   addend = target_address_for (fragP) - (fragP->fr_address + where);
   int rl_addend = 0;
 
   addend = target_address_for (fragP) - (fragP->fr_address + where);
-  new_insn = subtype_mappings[fragP->fr_subtype].insn;
 
   fragP->fr_fix = where + subtype_mappings[fragP->fr_subtype].bytes;
 
 
   fragP->fr_fix = where + subtype_mappings[fragP->fr_subtype].bytes;
 
-  op_base = 0;
-
   switch (subtype_mappings[fragP->fr_subtype].insn)
     {
     case M32C_INSN_JCND16_5:
       op[1] = addend - 1;
       operand = M32C_OPERAND_LAB_8_8;
   switch (subtype_mappings[fragP->fr_subtype].insn)
     {
     case M32C_INSN_JCND16_5:
       op[1] = addend - 1;
       operand = M32C_OPERAND_LAB_8_8;
-      op_op = 1;
       rl_addend = 0x21;
       break;
 
       rl_addend = 0x21;
       break;
 
@@ -655,9 +648,6 @@ md_convert_frag (bfd *   abfd ATTRIBUTE_UNUSED,
       op[4] = (addend - 3) >> 8;
       operand = M32C_OPERAND_LAB_8_16;
       where += 2;
       op[4] = (addend - 3) >> 8;
       operand = M32C_OPERAND_LAB_8_16;
       where += 2;
-      new_insn = M32C_INSN_JMP16_W;
-      op_base = 2;
-      op_op = 3;
       rl_addend = 0x51;
       break;
 
       rl_addend = 0x51;
       break;
 
@@ -667,9 +657,6 @@ md_convert_frag (bfd *   abfd ATTRIBUTE_UNUSED,
       op[2] = 0xfc;
       operand = M32C_OPERAND_LAB_8_24;
       where += 2;
       op[2] = 0xfc;
       operand = M32C_OPERAND_LAB_8_24;
       where += 2;
-      new_insn = M32C_INSN_JMP16_A;
-      op_base = 2;
-      op_op = 3;
       rl_addend = 0x61;
       break;
 
       rl_addend = 0x61;
       break;
 
@@ -677,8 +664,6 @@ md_convert_frag (bfd *   abfd ATTRIBUTE_UNUSED,
     case M32C_INSN_JCND16:
       op[2] = addend - 2;
       operand = M32C_OPERAND_LAB_16_8;
     case M32C_INSN_JCND16:
       op[2] = addend - 2;
       operand = M32C_OPERAND_LAB_16_8;
-      op_base = 0;
-      op_op = 2;
       rl_addend = 0x31;
       break;
 
       rl_addend = 0x31;
       break;
 
@@ -690,9 +675,6 @@ md_convert_frag (bfd *   abfd ATTRIBUTE_UNUSED,
       op[5] = (addend - 4) >> 8;
       operand = M32C_OPERAND_LAB_8_16;
       where += 3;
       op[5] = (addend - 4) >> 8;
       operand = M32C_OPERAND_LAB_8_16;
       where += 3;
-      new_insn = M32C_INSN_JMP16_W;
-      op_base = 3;
-      op_op = 4;
       rl_addend = 0x61;
       break;
 
       rl_addend = 0x61;
       break;
 
@@ -702,17 +684,12 @@ md_convert_frag (bfd *   abfd ATTRIBUTE_UNUSED,
       op[3] = 0xfc;
       operand = M32C_OPERAND_LAB_8_24;
       where += 3;
       op[3] = 0xfc;
       operand = M32C_OPERAND_LAB_8_24;
       where += 3;
-      new_insn = M32C_INSN_JMP16_A;
-      op_base = 3;
-      op_op = 4;
       rl_addend = 0x71;
       break;
 
     case M32C_INSN_JMP16_S:
       op[0] = 0x60 | ((addend-2) & 0x07);
       operand = M32C_OPERAND_LAB_5_3;
       rl_addend = 0x71;
       break;
 
     case M32C_INSN_JMP16_S:
       op[0] = 0x60 | ((addend-2) & 0x07);
       operand = M32C_OPERAND_LAB_5_3;
-      op_base = 0;
-      op_op = 0;
       rl_addend = 0x10;
       break;
 
       rl_addend = 0x10;
       break;
 
@@ -720,8 +697,6 @@ md_convert_frag (bfd *   abfd ATTRIBUTE_UNUSED,
       op[0] = 0xfe;
       op[1] = addend - 1;
       operand = M32C_OPERAND_LAB_8_8;
       op[0] = 0xfe;
       op[1] = addend - 1;
       operand = M32C_OPERAND_LAB_8_8;
-      op_base = 0;
-      op_op = 1;
       rl_addend = 0x21;
       break;
 
       rl_addend = 0x21;
       break;
 
@@ -730,8 +705,6 @@ md_convert_frag (bfd *   abfd ATTRIBUTE_UNUSED,
       op[1] = addend - 1;
       op[2] = (addend - 1) >> 8;
       operand = M32C_OPERAND_LAB_8_16;
       op[1] = addend - 1;
       op[2] = (addend - 1) >> 8;
       operand = M32C_OPERAND_LAB_8_16;
-      op_base = 0;
-      op_op = 1;
       rl_addend = 0x31;
       break;
 
       rl_addend = 0x31;
       break;
 
@@ -741,16 +714,12 @@ md_convert_frag (bfd *   abfd ATTRIBUTE_UNUSED,
       op[2] = 0;
       op[3] = 0;
       operand = M32C_OPERAND_LAB_8_24;
       op[2] = 0;
       op[3] = 0;
       operand = M32C_OPERAND_LAB_8_24;
-      op_base = 0;
-      op_op = 1;
       rl_addend = 0x41;
       break;
 
     case M32C_INSN_JCND32:
       op[1] = addend - 1;
       operand = M32C_OPERAND_LAB_8_8;
       rl_addend = 0x41;
       break;
 
     case M32C_INSN_JCND32:
       op[1] = addend - 1;
       operand = M32C_OPERAND_LAB_8_8;
-      op_base = 0;
-      op_op = 1;
       rl_addend = 0x21;
       break;
 
       rl_addend = 0x21;
       break;
 
@@ -762,9 +731,6 @@ md_convert_frag (bfd *   abfd ATTRIBUTE_UNUSED,
       op[4] = (addend - 3) >> 8;
       operand = M32C_OPERAND_LAB_8_16;
       where += 2;
       op[4] = (addend - 3) >> 8;
       operand = M32C_OPERAND_LAB_8_16;
       where += 2;
-      new_insn = M32C_INSN_JMP32_W;
-      op_base = 2;
-      op_op = 3;
       rl_addend = 0x51;
       break;
 
       rl_addend = 0x51;
       break;
 
@@ -774,20 +740,13 @@ md_convert_frag (bfd *   abfd ATTRIBUTE_UNUSED,
       op[2] = 0xcc;
       operand = M32C_OPERAND_LAB_8_24;
       where += 2;
       op[2] = 0xcc;
       operand = M32C_OPERAND_LAB_8_24;
       where += 2;
-      new_insn = M32C_INSN_JMP32_A;
-      op_base = 2;
-      op_op = 3;
       rl_addend = 0x61;
       break;
 
       rl_addend = 0x61;
       break;
 
-
-
     case M32C_INSN_JMP32_S:
       addend = ((addend-2) & 0x07);
       op[0] = 0x4a | (addend & 0x01) | ((addend << 3) & 0x30);
       operand = M32C_OPERAND_LAB32_JMP_S;
     case M32C_INSN_JMP32_S:
       addend = ((addend-2) & 0x07);
       op[0] = 0x4a | (addend & 0x01) | ((addend << 3) & 0x30);
       operand = M32C_OPERAND_LAB32_JMP_S;
-      op_base = 0;
-      op_op = 0;
       rl_addend = 0x10;
       break;
 
       rl_addend = 0x10;
       break;
 
@@ -795,8 +754,6 @@ md_convert_frag (bfd *   abfd ATTRIBUTE_UNUSED,
       op[0] = 0xbb;
       op[1] = addend - 1;
       operand = M32C_OPERAND_LAB_8_8;
       op[0] = 0xbb;
       op[1] = addend - 1;
       operand = M32C_OPERAND_LAB_8_8;
-      op_base = 0;
-      op_op = 1;
       rl_addend = 0x21;
       break;
 
       rl_addend = 0x21;
       break;
 
@@ -805,8 +762,6 @@ md_convert_frag (bfd *   abfd ATTRIBUTE_UNUSED,
       op[1] = addend - 1;
       op[2] = (addend - 1) >> 8;
       operand = M32C_OPERAND_LAB_8_16;
       op[1] = addend - 1;
       op[2] = (addend - 1) >> 8;
       operand = M32C_OPERAND_LAB_8_16;
-      op_base = 0;
-      op_op = 1;
       rl_addend = 0x31;
       break;
 
       rl_addend = 0x31;
       break;
 
@@ -816,8 +771,6 @@ md_convert_frag (bfd *   abfd ATTRIBUTE_UNUSED,
       op[2] = 0;
       op[3] = 0;
       operand = M32C_OPERAND_LAB_8_24;
       op[2] = 0;
       op[3] = 0;
       operand = M32C_OPERAND_LAB_8_24;
-      op_base = 0;
-      op_op = 1;
       rl_addend = 0x41;
       break;
 
       rl_addend = 0x41;
       break;
 
@@ -827,8 +780,6 @@ md_convert_frag (bfd *   abfd ATTRIBUTE_UNUSED,
       op[1] = addend - 1;
       op[2] = (addend - 1) >> 8;
       operand = M32C_OPERAND_LAB_8_16;
       op[1] = addend - 1;
       op[2] = (addend - 1) >> 8;
       operand = M32C_OPERAND_LAB_8_16;
-      op_base = 0;
-      op_op = 1;
       rl_addend = 0x31;
       break;
 
       rl_addend = 0x31;
       break;
 
@@ -838,8 +789,6 @@ md_convert_frag (bfd *   abfd ATTRIBUTE_UNUSED,
       op[2] = 0;
       op[3] = 0;
       operand = M32C_OPERAND_LAB_8_24;
       op[2] = 0;
       op[3] = 0;
       operand = M32C_OPERAND_LAB_8_24;
-      op_base = 0;
-      op_op = 1;
       rl_addend = 0x41;
       break;
 
       rl_addend = 0x41;
       break;
 
@@ -848,8 +797,6 @@ md_convert_frag (bfd *   abfd ATTRIBUTE_UNUSED,
       op[1] = addend - 1;
       op[2] = (addend - 1) >> 8;
       operand = M32C_OPERAND_LAB_8_16;
       op[1] = addend - 1;
       op[2] = (addend - 1) >> 8;
       operand = M32C_OPERAND_LAB_8_16;
-      op_base = 0;
-      op_op = 1;
       rl_addend = 0x31;
       break;
 
       rl_addend = 0x31;
       break;
 
@@ -859,33 +806,30 @@ md_convert_frag (bfd *   abfd ATTRIBUTE_UNUSED,
       op[2] = 0;
       op[3] = 0;
       operand = M32C_OPERAND_LAB_8_24;
       op[2] = 0;
       op[3] = 0;
       operand = M32C_OPERAND_LAB_8_24;
-      op_base = 0;
-      op_op = 1;
       rl_addend = 0x41;
       break;
 
     case -M32C_MACRO_ADJNZ_2:
       rl_addend = 0x31;
       rl_addend = 0x41;
       break;
 
     case -M32C_MACRO_ADJNZ_2:
       rl_addend = 0x31;
-      op[2] = addend;
+      op[2] = addend - 2;
       operand = M32C_OPERAND_LAB_16_8;
       break;
     case -M32C_MACRO_ADJNZ_3:
       rl_addend = 0x41;
       operand = M32C_OPERAND_LAB_16_8;
       break;
     case -M32C_MACRO_ADJNZ_3:
       rl_addend = 0x41;
-      op[3] = addend;
+      op[3] = addend - 2;
       operand = M32C_OPERAND_LAB_24_8;
       break;
     case -M32C_MACRO_ADJNZ_4:
       rl_addend = 0x51;
       operand = M32C_OPERAND_LAB_24_8;
       break;
     case -M32C_MACRO_ADJNZ_4:
       rl_addend = 0x51;
-      op[4] = addend;
+      op[4] = addend - 2;
       operand = M32C_OPERAND_LAB_32_8;
       break;
     case -M32C_MACRO_ADJNZ_5:
       rl_addend = 0x61;
       operand = M32C_OPERAND_LAB_32_8;
       break;
     case -M32C_MACRO_ADJNZ_5:
       rl_addend = 0x61;
-      op[5] = addend;
+      op[5] = addend - 2;
       operand = M32C_OPERAND_LAB_40_8;
       break;
 
       operand = M32C_OPERAND_LAB_40_8;
       break;
 
-
     default:
       printf("\nHey!  Need more opcode converters! missing: %d %s\n\n",
             fragP->fr_subtype,
     default:
       printf("\nHey!  Need more opcode converters! missing: %d %s\n\n",
             fragP->fr_subtype,
@@ -909,16 +853,16 @@ md_convert_frag (bfd *   abfd ATTRIBUTE_UNUSED,
       || (m32c_relax && (operand != M32C_OPERAND_LAB_5_3
                         && operand != M32C_OPERAND_LAB32_JMP_S)))
     {
       || (m32c_relax && (operand != M32C_OPERAND_LAB_5_3
                         && operand != M32C_OPERAND_LAB32_JMP_S)))
     {
-      fixS *fixP;
-      assert (fragP->fr_cgen.insn != 0);
-      fixP = gas_cgen_record_fixup (fragP,
-                                   where,
-                                   fragP->fr_cgen.insn,
-                                   (fragP->fr_fix - where) * 8,
-                                   cgen_operand_lookup_by_num (gas_cgen_cpu_desc,
-                                                               operand),
-                                   fragP->fr_cgen.opinfo,
-                                   fragP->fr_symbol, fragP->fr_offset);
+      gas_assert (fragP->fr_cgen.insn != 0);
+      gas_cgen_record_fixup (fragP,
+                            where,
+                            fragP->fr_cgen.insn,
+                            (fragP->fr_fix - where) * 8,
+                            cgen_operand_lookup_by_num (gas_cgen_cpu_desc,
+                                                        operand),
+                            fragP->fr_cgen.opinfo,
+                            fragP->fr_symbol,
+                            fragP->fr_offset);
     }
 }
 \f
     }
 }
 \f
@@ -1074,10 +1018,9 @@ void
 m32c_cons_fix_new (fragS *     frag,
                   int          where,
                   int          size,
 m32c_cons_fix_new (fragS *     frag,
                   int          where,
                   int          size,
-                  expressionS *exp)
+                  expressionS *exp,
+                  bfd_reloc_code_real_type type)
 {
 {
-  bfd_reloc_code_real_type type;
-
   switch (size)
     {
     case 1:
   switch (size)
     {
     case 1:
@@ -1119,10 +1062,10 @@ tc_gen_reloc (asection *sec, fixS *fx)
       || fx->fx_r_type == BFD_RELOC_M32C_RL_2ADDR)
     {
       arelent * reloc;
       || fx->fx_r_type == BFD_RELOC_M32C_RL_2ADDR)
     {
       arelent * reloc;
-      reloc = xmalloc (sizeof (* reloc));
-      reloc->sym_ptr_ptr = xmalloc (sizeof (asymbol *));
+
+      reloc = XNEW (arelent);
+
+      reloc->sym_ptr_ptr = XNEW (asymbol *);
       *reloc->sym_ptr_ptr = symbol_get_bfdsym (fx->fx_addsy);
       reloc->address = fx->fx_frag->fr_address + fx->fx_where;
       reloc->howto = bfd_reloc_type_lookup (stdoutput, fx->fx_r_type);
       *reloc->sym_ptr_ptr = symbol_get_bfdsym (fx->fx_addsy);
       reloc->address = fx->fx_frag->fr_address + fx->fx_where;
       reloc->howto = bfd_reloc_type_lookup (stdoutput, fx->fx_r_type);
@@ -1211,7 +1154,7 @@ md_number_to_chars (char * buf, valueT val, int n)
 /* Equal to MAX_PRECISION in atof-ieee.c.  */
 #define MAX_LITTLENUMS 6
 
 /* Equal to MAX_PRECISION in atof-ieee.c.  */
 #define MAX_LITTLENUMS 6
 
-char *
+const char *
 md_atof (int type, char * litP, int * sizeP)
 {
   return ieee_md_atof (type, litP, sizeP, TRUE);
 md_atof (int type, char * litP, int * sizeP)
 {
   return ieee_md_atof (type, litP, sizeP, TRUE);
@@ -1303,19 +1246,16 @@ m32c_fix_adjustable (fixS * fixP)
 }
 
 /* Worker function for m32c_is_colon_insn().  */
 }
 
 /* Worker function for m32c_is_colon_insn().  */
-static char
-restore_colon (int advance_i_l_p_by)
+static int
+restore_colon (char *next_i_l_p, char *nul_char)
 {
 {
-  char c;
-
   /* Restore the colon, and advance input_line_pointer to
      the end of the new symbol.  */
   /* Restore the colon, and advance input_line_pointer to
      the end of the new symbol.  */
-  * input_line_pointer = ':';
-  input_line_pointer += advance_i_l_p_by;
-  c = * input_line_pointer;
-  * input_line_pointer = 0;
-
-  return c;
+  *input_line_pointer = *nul_char;
+  input_line_pointer = next_i_l_p;
+  *nul_char = *next_i_l_p;
+  *next_i_l_p = 0;
+  return 1;
 }
 
 /* Determines if the symbol starting at START and ending in
 }
 
 /* Determines if the symbol starting at START and ending in
@@ -1323,28 +1263,31 @@ restore_colon (int advance_i_l_p_by)
    (but which has now been replaced bu a NUL) is in fact an
    :Z, :S, :Q, or :G suffix.
    If it is, then it restores the colon, advances INPUT_LINE_POINTER
    (but which has now been replaced bu a NUL) is in fact an
    :Z, :S, :Q, or :G suffix.
    If it is, then it restores the colon, advances INPUT_LINE_POINTER
-   to the real end of the instruction/symbol, and returns the character
-   that really terminated the symbol.  Otherwise it returns 0.  */
-char
-m32c_is_colon_insn (char *start ATTRIBUTE_UNUSED)
+   to the real end of the instruction/symbol, saves the char there to
+   NUL_CHAR and pokes a NUL, and returns 1.  Otherwise it returns 0.  */
+int
+m32c_is_colon_insn (char *start ATTRIBUTE_UNUSED, char *nul_char)
 {
   char * i_l_p = input_line_pointer;
 
 {
   char * i_l_p = input_line_pointer;
 
+  if (*nul_char == '"')
+    ++i_l_p;
+
   /* Check to see if the text following the colon is 'G' */
   if (TOLOWER (i_l_p[1]) == 'g' && (i_l_p[2] == ' ' || i_l_p[2] == '\t'))
   /* Check to see if the text following the colon is 'G' */
   if (TOLOWER (i_l_p[1]) == 'g' && (i_l_p[2] == ' ' || i_l_p[2] == '\t'))
-    return restore_colon (2);
+    return restore_colon (i_l_p + 2, nul_char);
 
   /* Check to see if the text following the colon is 'Q' */
   if (TOLOWER (i_l_p[1]) == 'q' && (i_l_p[2] == ' ' || i_l_p[2] == '\t'))
 
   /* Check to see if the text following the colon is 'Q' */
   if (TOLOWER (i_l_p[1]) == 'q' && (i_l_p[2] == ' ' || i_l_p[2] == '\t'))
-    return restore_colon (2);
+    return restore_colon (i_l_p + 2, nul_char);
 
   /* Check to see if the text following the colon is 'S' */
   if (TOLOWER (i_l_p[1]) == 's' && (i_l_p[2] == ' ' || i_l_p[2] == '\t'))
 
   /* Check to see if the text following the colon is 'S' */
   if (TOLOWER (i_l_p[1]) == 's' && (i_l_p[2] == ' ' || i_l_p[2] == '\t'))
-    return restore_colon (2);
+    return restore_colon (i_l_p + 2, nul_char);
 
   /* Check to see if the text following the colon is 'Z' */
   if (TOLOWER (i_l_p[1]) == 'z' && (i_l_p[2] == ' ' || i_l_p[2] == '\t'))
 
   /* Check to see if the text following the colon is 'Z' */
   if (TOLOWER (i_l_p[1]) == 'z' && (i_l_p[2] == ' ' || i_l_p[2] == '\t'))
-    return restore_colon (2);
+    return restore_colon (i_l_p + 2, nul_char);
 
   return 0;
 }
 
   return 0;
 }
This page took 0.050872 seconds and 4 git commands to generate.