X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gas%2Fconfig%2Ftc-m32c.c;h=b28797b38e3f7cd33b3a254498f614f1dfac7f00;hb=d05584d3eeab4cb1c1d85d8dfdfef56827e03b3d;hp=f7b70a489344c2e2620b0db74c468eebec52eb98;hpb=b90efa5b79ac1524ec260f8eb89d1be37e0219a7;p=deliverable%2Fbinutils-gdb.git diff --git a/gas/config/tc-m32c.c b/gas/config/tc-m32c.c index f7b70a4893..b28797b38e 100644 --- a/gas/config/tc-m32c.c +++ b/gas/config/tc-m32c.c @@ -1,5 +1,5 @@ /* tc-m32c.c -- Assembler for the Renesas M32C. - Copyright (C) 2005-2015 Free Software Foundation, Inc. + Copyright (C) 2005-2016 Free Software Foundation, Inc. Contributed by RedHat. This file is part of GAS, the GNU Assembler. @@ -20,7 +20,7 @@ Boston, MA 02111-1307, USA. */ #include "as.h" -#include "subsegs.h" +#include "subsegs.h" #include "symcat.h" #include "opcodes/m32c-desc.h" #include "opcodes/m32c-opc.h" @@ -105,7 +105,7 @@ set_isa (enum isa_attr isa_num) 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) { @@ -141,7 +141,7 @@ void md_show_usage (FILE * stream) { fprintf (stream, _(" M32C specific command line options:\n")); -} +} static void s_bss (int ignore ATTRIBUTE_UNUSED) @@ -200,7 +200,7 @@ m32c_md_end (void) /* 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 +261,21 @@ m32c_indirect_operand (char *str) if (s[0] == '[' && s[1] == '[') indirection[operand] = relative; } - + if (indirection[1] == none && indirection[2] == none) return FALSE; - + 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; - + for (s = str; *s; s++) { if (s[0] == ',') operand = 2; - + if (s[0] == '[' && ! brace_n[operand]) { brace_n[operand] += 1; @@ -283,7 +283,7 @@ m32c_indirect_operand (char *str) if (indirection[operand] != none) continue; } - + else if (s[0] == '[' && brace_n[operand]) { brace_n[operand] += 1; @@ -315,13 +315,13 @@ m32c_indirect_operand (char *str) { fprintf (stderr, "Unmatched [[operand-%d]] %d\n", operand, brace_n[operand]); } - + if (indirection[1] != none && indirection[2] != none) - md_assemble ("src-dest-indirect"); + md_assemble ((char *) "src-dest-indirect"); else if (indirection[1] != none) - md_assemble ("src-indirect"); + md_assemble ((char *) "src-indirect"); else if (indirection[2] != none) - md_assemble ("dest-indirect"); + md_assemble ((char *) "dest-indirect"); md_assemble (new_str); free (new_str); @@ -345,7 +345,7 @@ md_assemble (char * str) insn.insn = m32c_cgen_assemble_insn (gas_cgen_cpu_desc, str, & insn.fields, insn.buffer, & errmsg); - + if (!insn.insn) { as_bad ("%s", errmsg); @@ -398,7 +398,7 @@ md_assemble (char * str) /* 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. */ @@ -410,7 +410,7 @@ valueT 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 * @@ -475,7 +475,7 @@ enum { M32C_MACRO_ADJNZ_3, M32C_MACRO_ADJNZ_4, M32C_MACRO_ADJNZ_5, -} M32C_Macros; +}; static struct { int insn; @@ -595,7 +595,7 @@ md_estimate_size_before_relax (fragS * fragP, segT segment ATTRIBUTE_UNUSED) } 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. @@ -1063,10 +1063,10 @@ tc_gen_reloc (asection *sec, fixS *fx) || 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); @@ -1155,7 +1155,7 @@ md_number_to_chars (char * buf, valueT val, int n) /* 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); @@ -1247,19 +1247,16 @@ m32c_fix_adjustable (fixS * fixP) } /* 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. */ - * 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 @@ -1267,28 +1264,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 - 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; + 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')) - 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')) - 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')) - 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')) - return restore_colon (2); + return restore_colon (i_l_p + 2, nul_char); return 0; }