X-Git-Url: https://oss.titaniummirror.com/gitweb?p=msp430-binutils.git;a=blobdiff_plain;f=gas%2Fconfig%2Ftc-vax.c;fp=gas%2Fconfig%2Ftc-vax.c;h=33353dab4b02d7286aab4570d33a361dd4638840;hp=924f659ef85e9ee5e455208acce3fc10b8f2edb6;hb=88750007d7869f178f0ba528f41efd3b74c424cf;hpb=6df9443a374e2b81278c61b8afc0a1eef7db280b diff --git a/gas/config/tc-vax.c b/gas/config/tc-vax.c index 924f659..33353da 100644 --- a/gas/config/tc-vax.c +++ b/gas/config/tc-vax.c @@ -1,6 +1,6 @@ /* tc-vax.c - vax-specific - Copyright 1987, 1991, 1992, 1993, 1994, 1995, 1998, 2000, 2001, 2002, - 2003, 2004, 2005, 2006, 2007 + 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. This file is part of GAS, the GNU Assembler. @@ -396,23 +396,20 @@ md_estimate_size_before_relax (fragS *fragP, segT segment) || S_IS_WEAK (fragP->fr_symbol) || S_IS_EXTERNAL (fragP->fr_symbol))) { - if (p[0] & 0x10) - { - if (flag_want_pic) - as_fatal ("PIC reference to %s is indirect.\n", - S_GET_NAME (fragP->fr_symbol)); - } + /* Indirect references cannot go through the GOT or PLT, + let's hope they'll become local in the final link. */ + if ((ELF_ST_VISIBILITY (S_GET_OTHER (fragP->fr_symbol)) + != STV_DEFAULT) + || (p[0] & 0x10)) + reloc_type = BFD_RELOC_32_PCREL; + else if (((unsigned char *) fragP->fr_opcode)[0] == VAX_CALLS + || ((unsigned char *) fragP->fr_opcode)[0] == VAX_CALLG + || ((unsigned char *) fragP->fr_opcode)[0] == VAX_JSB + || ((unsigned char *) fragP->fr_opcode)[0] == VAX_JMP + || S_IS_FUNCTION (fragP->fr_symbol)) + reloc_type = BFD_RELOC_32_PLT_PCREL; else - { - if (((unsigned char *) fragP->fr_opcode)[0] == VAX_CALLS - || ((unsigned char *) fragP->fr_opcode)[0] == VAX_CALLG - || ((unsigned char *) fragP->fr_opcode)[0] == VAX_JSB - || ((unsigned char *) fragP->fr_opcode)[0] == VAX_JMP - || S_IS_FUNCTION (fragP->fr_symbol)) - reloc_type = BFD_RELOC_32_PLT_PCREL; - else - reloc_type = BFD_RELOC_32_GOT_PCREL; - } + reloc_type = BFD_RELOC_32_GOT_PCREL; } #endif switch (RELAX_STATE (fragP->fr_subtype)) @@ -852,6 +849,8 @@ static const struct vot {"jbcs", {"rlvbb?", 0x800000e3}}, {"jbsc", {"rlvbb?", 0x800000e4}}, {"jbcc", {"rlvbb?", 0x800000e5}}, + {"jbssi", {"rlvbb?", 0x800000e6}}, + {"jbcci", {"rlvbb?", 0x800000e7}}, {"jlbs", {"rlb?", 0x800000e8}}, {"jlbc", {"rlb?", 0x800000e9}}, @@ -959,11 +958,11 @@ vip_begin (int synthetic_too, /* 1 means include jXXX op-codes. */ op_hash = hash_new (); for (vP = votstrs; *vP->vot_name && !retval; vP++) - retval = hash_insert (op_hash, vP->vot_name, (PTR) &vP->vot_detail); + retval = hash_insert (op_hash, vP->vot_name, (void *) &vP->vot_detail); if (synthetic_too) for (vP = synthetic_votstrs; *vP->vot_name && !retval; vP++) - retval = hash_insert (op_hash, vP->vot_name, (PTR) &vP->vot_detail); + retval = hash_insert (op_hash, vP->vot_name, (void *) &vP->vot_detail); #ifndef CONST_TABLE vip_op_defaults (immediate, indirect, displen); @@ -2401,7 +2400,7 @@ tc_gen_reloc (asection *section ATTRIBUTE_UNUSED, fixS *fixp) #endif reloc->howto = bfd_reloc_type_lookup (stdoutput, code); - assert (reloc->howto != 0); + gas_assert (reloc->howto != 0); return reloc; } @@ -2714,6 +2713,7 @@ md_assemble (char *instruction_string) if (need_pass_2 || goofed) return; + dwarf2_emit_insn (0); /* Emit op-code. */ /* Remember where it is, in case we want to modify the op-code later. */ opcode_low_byteP = frag_more (v.vit_opcode_nbytes); @@ -3152,7 +3152,8 @@ md_assemble (char *instruction_string) if (flag_want_pic && operandP->vop_mode == 8 && this_add_symbol != NULL) { - as_warn (_("Symbol used as immediate operand in PIC mode.")); + as_warn (_("Symbol %s used as immediate operand in PIC mode."), + S_GET_NAME (this_add_symbol)); } #endif p[0] = (operandP->vop_mode << 4) | 0xF; @@ -3168,7 +3169,8 @@ md_assemble (char *instruction_string) min (sizeof (valueT), (size_t) nbytes)); if ((size_t) nbytes > sizeof (valueT)) - memset (p + 5, '\0', nbytes - sizeof (valueT)); + memset (p + 1 + sizeof (valueT), + '\0', nbytes - sizeof (valueT)); } else { @@ -3405,3 +3407,9 @@ vax_cons_fix_new (fragS *frag, int where, unsigned int nbytes, expressionS *exp) fix_new_exp (frag, where, (int) nbytes, exp, 0, r); vax_cons_special_reloc = NULL; } + +char * +md_atof (int type, char * litP, int * sizeP) +{ + return vax_md_atof (type, litP, sizeP); +}