X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gas%2Fconfig%2Ftc-mcore.c;h=ec03a296d2a64f6ed93a712d8b4aa34e9581dcef;hb=7766fd10024dc0587838fbc4608f3f8e30e17a26;hp=fa7c911e6851b7184593d92c3dd1658cfd81bd6a;hpb=ec2655a6a75bc61d21e6f8ddc1e9f9027a8914dd;p=deliverable%2Fbinutils-gdb.git diff --git a/gas/config/tc-mcore.c b/gas/config/tc-mcore.c index fa7c911e68..ec03a296d2 100644 --- a/gas/config/tc-mcore.c +++ b/gas/config/tc-mcore.c @@ -1,6 +1,5 @@ /* tc-mcore.c -- Assemble code for M*Core - Copyright 1999, 2000, 2001, 2002, 2003, 2005, 2006, 2007 - Free Software Foundation, Inc. + Copyright (C) 1999-2016 Free Software Foundation, Inc. This file is part of GAS, the GNU Assembler. @@ -142,7 +141,7 @@ static struct hash_control * opcode_hash_control; /* Opcode mnemonics. */ #define POOL_START_LABEL ".LS" static void -make_name (char * s, char * p, int n) +make_name (char * s, const char * p, int n) { static const char hex[] = "0123456789ABCDEF"; @@ -411,8 +410,8 @@ const pseudo_typeS md_pseudo_table[] = occupy can be taken into account when deciding whether or not to dump the current literal pool. XXX - currently we do not cope with the .space and .dcb.d directives. */ - { "ascii", mcore_stringer, 0 }, - { "asciz", mcore_stringer, 1 }, + { "ascii", mcore_stringer, 8 + 0 }, + { "asciz", mcore_stringer, 8 + 1 }, { "byte", mcore_cons, 1 }, { "dc", mcore_cons, 2 }, { "dc.b", mcore_cons, 1 }, @@ -430,7 +429,7 @@ const pseudo_typeS md_pseudo_table[] = { "quad", mcore_cons, 8 }, { "short", mcore_cons, 2 }, { "single", mcore_float_cons, 'f'}, - { "string", mcore_stringer, 1 }, + { "string", mcore_stringer, 8 + 1 }, { "word", mcore_cons, 2 }, { "fill", mcore_fill, 0 }, @@ -455,18 +454,18 @@ const pseudo_typeS md_pseudo_table[] = void md_begin (void) { - const mcore_opcode_info * opcode; - char * prev_name = ""; + const char * prev_name = ""; + unsigned int i; opcode_hash_control = hash_new (); /* Insert unique names into hash table. */ - for (opcode = mcore_table; opcode->name; opcode ++) + for (i = 0; i < ARRAY_SIZE (mcore_table); i++) { - if (! streq (prev_name, opcode->name)) + if (! streq (prev_name, mcore_table[i].name)) { - prev_name = opcode->name; - hash_insert (opcode_hash_control, opcode->name, (char *) opcode); + prev_name = mcore_table[i].name; + hash_insert (opcode_hash_control, mcore_table[i].name, (char *) &mcore_table[i]); } } } @@ -524,7 +523,7 @@ parse_reg (char * s, unsigned * reg) static struct Cregs { - char * name; + const char * name; unsigned int crnum; } cregs[] = @@ -612,7 +611,7 @@ parse_psrmod (char * s, unsigned * reg) char buf[10]; static struct psrmods { - char * name; + const char * name; unsigned int value; } psrmods[] = @@ -647,7 +646,7 @@ static char * parse_exp (char * s, expressionS * e) { char * save; - char * new; + char * new_pointer; /* Skip whitespace. */ while (ISSPACE (* s)) @@ -661,10 +660,10 @@ parse_exp (char * s, expressionS * e) if (e->X_op == O_absent) as_bad (_("missing operand")); - new = input_line_pointer; + new_pointer = input_line_pointer; input_line_pointer = save; - return new; + return new_pointer; } static int @@ -771,10 +770,10 @@ parse_imm (char * s, unsigned min, unsigned max) { - char * new; + char * new_pointer; expressionS e; - new = parse_exp (s, & e); + new_pointer = parse_exp (s, & e); if (e.X_op == O_absent) ; /* An error message has already been emitted. */ @@ -786,7 +785,7 @@ parse_imm (char * s, * val = e.X_add_number; - return new; + return new_pointer; } static char * @@ -859,7 +858,7 @@ md_assemble (char * str) unsigned off; unsigned isize; expressionS e; - char name[20]; + char name[21]; /* Drop leading whitespace. */ while (ISSPACE (* str)) @@ -980,7 +979,7 @@ md_assemble (char * str) as_bad (_("M340 specific opcode used when assembling for M210")); break; } - /* drop through... */ + /* Fall through. */ case O2: op_end = parse_reg (op_end + 1, & reg); inst |= reg; @@ -1599,6 +1598,9 @@ md_assemble (char * str) output[0] = INST_BYTE0 (inst); output[1] = INST_BYTE1 (inst); +#ifdef OBJ_ELF + dwarf2_emit_insn (2); +#endif check_literals (opcode->transfer, isize); } @@ -1616,77 +1618,11 @@ md_mcore_end (void) } /* Various routines to kill one day. */ -/* Equal to MAX_PRECISION in atof-ieee.c. */ -#define MAX_LITTLENUMS 6 - -/* Turn a string in input_line_pointer into a floating point constant of type - type, and store the appropriate bytes in *litP. The number of LITTLENUMS - emitted is stored in *sizeP. An error message is returned, or NULL on OK. */ -char * -md_atof (int type, char * litP, int * sizeP) +const char * +md_atof (int type, char * litP, int * sizeP) { - int prec; - LITTLENUM_TYPE words[MAX_LITTLENUMS]; - int i; - char * t; - - switch (type) - { - case 'f': - case 'F': - case 's': - case 'S': - prec = 2; - break; - - case 'd': - case 'D': - case 'r': - case 'R': - prec = 4; - break; - - case 'x': - case 'X': - prec = 6; - break; - - case 'p': - case 'P': - prec = 6; - break; - - default: - *sizeP = 0; - return _("Bad call to MD_NTOF()"); - } - - t = atof_ieee (input_line_pointer, type, words); - - if (t) - input_line_pointer = t; - - *sizeP = prec * sizeof (LITTLENUM_TYPE); - - if (! target_big_endian) - { - for (i = prec - 1; i >= 0; i--) - { - md_number_to_chars (litP, (valueT) words[i], - sizeof (LITTLENUM_TYPE)); - litP += sizeof (LITTLENUM_TYPE); - } - } - else - for (i = 0; i < prec; i++) - { - md_number_to_chars (litP, (valueT) words[i], - sizeof (LITTLENUM_TYPE)); - litP += sizeof (LITTLENUM_TYPE); - } - - return 0; + return ieee_md_atof (type, litP, sizeP, target_big_endian); } const char * md_shortopts = ""; @@ -1717,7 +1653,7 @@ struct option md_longopts[] = size_t md_longopts_size = sizeof (md_longopts); int -md_parse_option (int c, char * arg) +md_parse_option (int c, const char * arg) { switch (c) { @@ -1836,7 +1772,7 @@ md_convert_frag (bfd * abfd ATTRIBUTE_UNUSED, .align 2 0: .long disp 1: - + If the b!cond is 4 byte aligned, the literal which would go at x+4 will also be aligned. */ int first_inst = fragP->fr_fix + fragP->fr_address; @@ -1984,7 +1920,7 @@ md_apply_fix (fixS * fixP, segT segment ATTRIBUTE_UNUSED) { char * buf = fixP->fx_where + fixP->fx_frag->fr_literal; - char * file = fixP->fx_file ? fixP->fx_file : _("unknown"); + const char * file = fixP->fx_file ? fixP->fx_file : _("unknown"); const char * symname; /* Note: use offsetT because it is signed, valueT is unsigned. */ offsetT val = *valP; @@ -2201,7 +2137,7 @@ md_pcrel_from_section (fixS * fixp, segT sec ATTRIBUTE_UNUSED) || (S_GET_SEGMENT (fixp->fx_addsy) != sec))) { - assert (fixp->fx_size == 2); /* must be an insn */ + gas_assert (fixp->fx_size == 2); /* must be an insn */ return fixp->fx_size; } #endif @@ -2250,8 +2186,8 @@ tc_gen_reloc (asection * section ATTRIBUTE_UNUSED, fixS * fixp) break; } - rel = xmalloc (sizeof (arelent)); - rel->sym_ptr_ptr = xmalloc (sizeof (asymbol *)); + rel = XNEW (arelent); + rel->sym_ptr_ptr = XNEW (asymbol *); *rel->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy); rel->address = fixp->fx_frag->fr_address + fixp->fx_where; /* Always pass the addend along! */ @@ -2267,7 +2203,7 @@ tc_gen_reloc (asection * section ATTRIBUTE_UNUSED, fixS * fixp) /* Set howto to a garbage value so that we can keep going. */ rel->howto = bfd_reloc_type_lookup (stdoutput, BFD_RELOC_32); - assert (rel->howto != NULL); + gas_assert (rel->howto != NULL); } return rel;