diff options
author | Maciej W. Rozycki <macro@linux-mips.org> | 2004-07-20 17:55:02 +0000 |
---|---|---|
committer | Maciej W. Rozycki <macro@linux-mips.org> | 2004-07-20 17:55:02 +0000 |
commit | 01a3f561abcabb8b794dfa8a580691075dbf03c6 (patch) | |
tree | 7e806060344cc4f3715f331dceff425140ed5f61 /gas | |
parent | 1586d91e32ea5f8352ea442c38cd261c2de73d7a (diff) | |
download | binutils-01a3f561abcabb8b794dfa8a580691075dbf03c6.zip binutils-01a3f561abcabb8b794dfa8a580691075dbf03c6.tar.gz binutils-01a3f561abcabb8b794dfa8a580691075dbf03c6.tar.bz2 |
* config/tc-mips.c (append_insn): Handle constant expressions with
no associated relocation.
(mips_ip): Cancel the expression after use for the Q format
specifier.
(parse_relocation): Return no relocation for unsupported
operators.
(my_getSmallExpression): Return no relocation if no relocation
operators are used.
Diffstat (limited to 'gas')
-rw-r--r-- | gas/ChangeLog | 11 | ||||
-rw-r--r-- | gas/config/tc-mips.c | 15 |
2 files changed, 18 insertions, 8 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog index 450c086..33ac7fc 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,14 @@ +2004-07-20 Maciej W. Rozycki <macro@linux-mips.org> + + * config/tc-mips.c (append_insn): Handle constant expressions with + no associated relocation. + (mips_ip): Cancel the expression after use for the Q format + specifier. + (parse_relocation): Return no relocation for unsupported + operators. + (my_getSmallExpression): Return no relocation if no relocation + operators are used. + 2004-07-19 John David Anglin <dave.anglin@nrc-cnrc.gc.ca> * config/obj-som.c (adjust_stab_sections): Add prototype. diff --git a/gas/config/tc-mips.c b/gas/config/tc-mips.c index ab18cfd..108b912 100644 --- a/gas/config/tc-mips.c +++ b/gas/config/tc-mips.c @@ -2083,7 +2083,7 @@ append_insn (struct mips_cl_insn *ip, expressionS *address_expr, } fixp[0] = fixp[1] = fixp[2] = NULL; - if (address_expr != NULL && *reloc_type < BFD_RELOC_UNUSED) + if (address_expr != NULL && *reloc_type <= BFD_RELOC_UNUSED) { if (address_expr->X_op == O_constant) { @@ -2116,6 +2116,7 @@ append_insn (struct mips_cl_insn *ip, expressionS *address_expr, ip->insn_opcode |= (address_expr->X_add_number >> 16) & 0xffff; break; + case BFD_RELOC_UNUSED: case BFD_RELOC_LO16: case BFD_RELOC_MIPS_GOT_DISP: ip->insn_opcode |= address_expr->X_add_number & 0xffff; @@ -2151,7 +2152,7 @@ append_insn (struct mips_cl_insn *ip, expressionS *address_expr, internalError (); } } - else + else if (*reloc_type < BFD_RELOC_UNUSED) need_reloc: { reloc_howto_type *howto; @@ -8600,6 +8601,7 @@ do_msbd: ip->insn_opcode |= (imm_expr.X_add_number << (OP_SH_VSEL + (is_qh ? 2 : 1))); + imm_expr.X_op = O_absent; if (*s != ']') as_warn(_("Expecting ']' found '%s'"), s); else @@ -9813,7 +9815,7 @@ parse_relocation (char **str, bfd_reloc_code_real_type *reloc) { as_bad ("relocation %s isn't supported by the current ABI", percent_op[i].str); - *reloc = BFD_RELOC_LO16; + *reloc = BFD_RELOC_UNUSED; } return TRUE; } @@ -9825,8 +9827,7 @@ parse_relocation (char **str, bfd_reloc_code_real_type *reloc) expression in *EP and the relocations in the array starting at RELOC. Return the number of relocation operators used. - On exit, EXPR_END points to the first character after the expression. - If no relocation operators are used, RELOC[0] is set to BFD_RELOC_LO16. */ + On exit, EXPR_END points to the first character after the expression. */ static size_t my_getSmallExpression (expressionS *ep, bfd_reloc_code_real_type *reloc, @@ -9872,9 +9873,7 @@ my_getSmallExpression (expressionS *ep, bfd_reloc_code_real_type *reloc, expr_end = str; - if (reloc_index == 0) - reloc[0] = BFD_RELOC_LO16; - else + if (reloc_index != 0) { prev_reloc_op_frag = frag_now; for (i = 0; i < reloc_index; i++) |