X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gas%2Fconfig%2Ftc-mn10200.c;h=0558a3751d9bcce7ca0f7d27f0d8107eb61adc73;hb=de54374205650be71237ce51ef7981d30ddd78dc;hp=909652ef6e0e23df346914e00fc1554af2f48264;hpb=8ad7c533ee497f2c6a16cde705a565fcb97dfd12;p=deliverable%2Fbinutils-gdb.git diff --git a/gas/config/tc-mn10200.c b/gas/config/tc-mn10200.c index 909652ef6e..0558a3751d 100644 --- a/gas/config/tc-mn10200.c +++ b/gas/config/tc-mn10200.c @@ -1,12 +1,11 @@ /* tc-mn10200.c -- Assembler code for the Matsushita 10200 - Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, - 2005, 2006 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of GAS, the GNU Assembler. 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, @@ -19,7 +18,6 @@ the Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ -#include #include "as.h" #include "safe-ctype.h" #include "subsegs.h" @@ -135,7 +133,7 @@ static const struct reg_name other_registers[] = (sizeof (other_registers) / sizeof (struct reg_name)) /* reg_name_search does a binary search of the given register table - to see if "name" is a valid regiter name. Returns the register + to see if "name" is a valid register name. Returns the register number from the array on success, or -1 on failure. */ static int @@ -183,13 +181,12 @@ data_register_name (expressionS *expressionP) char c; /* Find the spelling of the operand. */ - start = name = input_line_pointer; - - c = get_symbol_end (); + start = input_line_pointer; + c = get_symbol_name (&name); reg_number = reg_name_search (data_registers, DATA_REG_NAME_CNT, name); /* Put back the delimiting char. */ - *input_line_pointer = c; + (void) restore_line_pointer (c); /* Look to see if it's in the register table. */ if (reg_number >= 0) @@ -228,13 +225,12 @@ address_register_name (expressionS *expressionP) char c; /* Find the spelling of the operand. */ - start = name = input_line_pointer; - - c = get_symbol_end (); + start = input_line_pointer; + c = get_symbol_name (&name); reg_number = reg_name_search (address_registers, ADDRESS_REG_NAME_CNT, name); /* Put back the delimiting char. */ - *input_line_pointer = c; + (void) restore_line_pointer (c); /* Look to see if it's in the register table. */ if (reg_number >= 0) @@ -273,13 +269,12 @@ other_register_name (expressionS *expressionP) char c; /* Find the spelling of the operand. */ - start = name = input_line_pointer; - - c = get_symbol_end (); + start = input_line_pointer; + c = get_symbol_name (&name); reg_number = reg_name_search (other_registers, OTHER_REG_NAME_CNT, name); /* Put back the delimiting char. */ - *input_line_pointer = c; + (void) restore_line_pointer (c); /* Look to see if it's in the register table. */ if (reg_number >= 0) @@ -308,7 +303,7 @@ none yet\n")); int md_parse_option (int c ATTRIBUTE_UNUSED, - char *arg ATTRIBUTE_UNUSED) + const char *arg ATTRIBUTE_UNUSED) { return 0; } @@ -319,42 +314,10 @@ md_undefined_symbol (char *name ATTRIBUTE_UNUSED) return 0; } -char * +const char * md_atof (int type, char *litp, int *sizep) { - int prec; - LITTLENUM_TYPE words[4]; - char *t; - int i; - - switch (type) - { - case 'f': - prec = 2; - break; - - case 'd': - prec = 4; - 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 * 2; - - for (i = prec - 1; i >= 0; i--) - { - md_number_to_chars (litp, (valueT) words[i], 2); - litp += 2; - } - - return NULL; + return ieee_md_atof (type, litp, sizep, FALSE); } void @@ -514,6 +477,7 @@ md_convert_frag (bfd *abfd ATTRIBUTE_UNUSED, break; case 0xff: opcode = 0xfe; + break; case 0xe8: opcode = 0xe9; break; @@ -594,6 +558,7 @@ md_convert_frag (bfd *abfd ATTRIBUTE_UNUSED, break; case 0xff: opcode = 0xfe; + break; case 0xe8: opcode = 0xe9; break; @@ -710,15 +675,15 @@ md_convert_frag (bfd *abfd ATTRIBUTE_UNUSED, valueT md_section_align (asection *seg, valueT addr) { - int align = bfd_get_section_alignment (stdoutput, seg); - return ((addr + (1 << align) - 1) & (-1 << align)); + int align = bfd_section_alignment (seg); + return ((addr + (1 << align) - 1) & -(1 << align)); } void md_begin (void) { - char *prev_name = ""; - register const struct mn10200_opcode *op; + const char *prev_name = ""; + const struct mn10200_opcode *op; mn10200_hash = hash_new (); @@ -783,7 +748,7 @@ arelent * tc_gen_reloc (asection *seg ATTRIBUTE_UNUSED, fixS *fixp) { arelent *reloc; - reloc = xmalloc (sizeof (arelent)); + reloc = XNEW (arelent); if (fixp->fx_subsy != NULL) { @@ -816,7 +781,7 @@ tc_gen_reloc (asection *seg ATTRIBUTE_UNUSED, fixS *fixp) return NULL; } reloc->address = fixp->fx_frag->fr_address + fixp->fx_where; - reloc->sym_ptr_ptr = xmalloc (sizeof (asymbol *)); + reloc->sym_ptr_ptr = XNEW (asymbol *); *reloc->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy); reloc->addend = fixp->fx_offset; return reloc; @@ -1012,32 +977,32 @@ md_assemble (char *str) } else if (operand->flags & MN10200_OPERAND_PSW) { - char *start = input_line_pointer; - char c = get_symbol_end (); + char *start; + char c = get_symbol_name (&start); if (strcmp (start, "psw") != 0) { - *input_line_pointer = c; + (void) restore_line_pointer (c); input_line_pointer = hold; str = hold; goto error; } - *input_line_pointer = c; + (void) restore_line_pointer (c); goto keep_going; } else if (operand->flags & MN10200_OPERAND_MDR) { - char *start = input_line_pointer; - char c = get_symbol_end (); + char *start; + char c = get_symbol_name (&start); if (strcmp (start, "mdr") != 0) { - *input_line_pointer = c; + (void) restore_line_pointer (c); input_line_pointer = hold; str = hold; goto error; } - *input_line_pointer = c; + (void) restore_line_pointer (c); goto keep_going; } else if (data_register_name (&ex)) @@ -1138,7 +1103,7 @@ md_assemble (char *str) break; } -keep_going: + keep_going: str = input_line_pointer; input_line_pointer = hold; @@ -1189,13 +1154,14 @@ keep_going: abort (); /* Write out the instruction. */ + dwarf2_emit_insn (size); if (relaxable && fc > 0) { /* On a 64-bit host the size of an 'int' is not the same as the size of a pointer, so we need a union to convert the opindex field of the fr_cgen structure into a char * so that it can be stored in the frag. We do not have - to worry about loosing accuracy as we are not going to + to worry about losing accuracy as we are not going to be even close to the 32bit limit of the int. */ union { @@ -1273,12 +1239,12 @@ keep_going: for (i = 0; i < fc; i++) { const struct mn10200_operand *operand; + int reloc_size; operand = &mn10200_operands[fixups[i].opindex]; if (fixups[i].reloc != BFD_RELOC_UNUSED) { reloc_howto_type *reloc_howto; - int size; int offset; fixS *fixP; @@ -1288,14 +1254,14 @@ keep_going: if (!reloc_howto) abort (); - size = bfd_get_reloc_size (reloc_howto); + reloc_size = bfd_get_reloc_size (reloc_howto); - if (size < 1 || size > 4) + if (reloc_size < 1 || reloc_size > 4) abort (); - offset = 4 - size; + offset = 4 - reloc_size; fixP = fix_new_exp (frag_now, f - frag_now->fr_literal + offset, - size, + reloc_size, &fixups[i].exp, reloc_howto->pc_relative, fixups[i].reloc); @@ -1304,11 +1270,11 @@ keep_going: next instruction, not from the start of the current instruction. */ if (reloc_howto->pc_relative) - fixP->fx_offset += size; + fixP->fx_offset += reloc_size; } else { - int reloc, pcrel, reloc_size, offset; + int reloc, pcrel, offset; fixS *fixP; reloc = BFD_RELOC_NONE; @@ -1368,4 +1334,3 @@ keep_going: } } } -