aboutsummaryrefslogtreecommitdiff
path: root/gas/config/tc-mips.c
diff options
context:
space:
mode:
authorRichard Sandiford <rdsandiford@googlemail.com>2010-11-13 11:59:21 +0000
committerRichard Sandiford <rdsandiford@googlemail.com>2010-11-13 11:59:21 +0000
commite391c02431f9d5973f685981cfaf1edfb0970cdb (patch)
tree84b8b1aa7e494d4b59c61d84cd1699ac0c851c3b /gas/config/tc-mips.c
parent361c3115547239d39d2c4e57c67277d92f1c34a4 (diff)
downloadbinutils-e391c02431f9d5973f685981cfaf1edfb0970cdb.zip
binutils-e391c02431f9d5973f685981cfaf1edfb0970cdb.tar.gz
binutils-e391c02431f9d5973f685981cfaf1edfb0970cdb.tar.bz2
gas/
* config/tc-mips.c (macro_build): Remove gas_assert from 'o' case. Use a restricted gas_assert for 'i' and 'j'. gas/testsuite/ * gas/mips/elf-rel28.s, gas/mips/elf-rel28-n32.d, gas/mips/elf-rel28-n64.d: New test. * gas/mips/mips.exp: Run it.
Diffstat (limited to 'gas/config/tc-mips.c')
-rw-r--r--gas/config/tc-mips.c23
1 files changed, 11 insertions, 12 deletions
diff --git a/gas/config/tc-mips.c b/gas/config/tc-mips.c
index ddeb513..77397bb 100644
--- a/gas/config/tc-mips.c
+++ b/gas/config/tc-mips.c
@@ -3765,20 +3765,16 @@ macro_build (expressionS *ep, const char *name, const char *fmt, ...)
case 'i':
case 'j':
- case 'o':
macro_read_relocs (&args, r);
gas_assert (*r == BFD_RELOC_GPREL16
- || *r == BFD_RELOC_MIPS_LITERAL
- || *r == BFD_RELOC_MIPS_HIGHER
- || *r == BFD_RELOC_HI16_S
- || *r == BFD_RELOC_LO16
- || *r == BFD_RELOC_MIPS_GOT16
- || *r == BFD_RELOC_MIPS_CALL16
- || *r == BFD_RELOC_MIPS_GOT_DISP
- || *r == BFD_RELOC_MIPS_GOT_PAGE
- || *r == BFD_RELOC_MIPS_GOT_OFST
- || *r == BFD_RELOC_MIPS_GOT_LO16
- || *r == BFD_RELOC_MIPS_CALL_LO16);
+ || *r == BFD_RELOC_MIPS_HIGHER
+ || *r == BFD_RELOC_HI16_S
+ || *r == BFD_RELOC_LO16
+ || *r == BFD_RELOC_MIPS_GOT_OFST);
+ continue;
+
+ case 'o':
+ macro_read_relocs (&args, r);
continue;
case 'u':
@@ -9970,6 +9966,9 @@ do_msbd:
/* Check whether there is only a single bracketed expression
left. If so, it must be the base register and the
constant must be zero. */
+ offset_reloc[0] = BFD_RELOC_LO16;
+ offset_reloc[1] = BFD_RELOC_UNUSED;
+ offset_reloc[2] = BFD_RELOC_UNUSED;
if (*s == '(' && strchr (s + 1, '(') == 0)
{
offset_expr.X_op = O_constant;