* 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.
This commit is contained in:
Richard Sandiford 2010-11-13 11:59:21 +00:00
parent 361c311554
commit e391c02431
7 changed files with 351 additions and 12 deletions

View File

@ -1,3 +1,8 @@
2010-11-13 Richard Sandiford <rdsandiford@googlemail.com>
* config/tc-mips.c (macro_build): Remove gas_assert from 'o' case.
Use a restricted gas_assert for 'i' and 'j'.
2010-11-11 Mingming Sun <mingm.sun@gmail.com>
* config/tc-mips.c (mips_cpu_info_table): Add loongson3a in MIPS 64.

View File

@ -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;

View File

@ -1,3 +1,9 @@
2010-11-13 Richard Sandiford <rdsandiford@googlemail.com>
* 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.
2010-11-10 Richard Sandiford <richard.sandiford@linaro.org>
* gas/arm/plt-1.s, gas/arm/plt-1.d: New test.

View File

@ -0,0 +1,96 @@
#source: elf-rel28.s
#as: -n32
#objdump: -dr
#name: MIPS ELF reloc 28 (n32)
.*: file format .*
Disassembly of section \.text:
.* <foo>:
.*: dc840000 ld a0,0\(a0\)
.*: R_MIPS_CALL_HI16 bar
.*: dc840000 ld a0,0\(a0\)
.*: R_MIPS_CALL_LO16 bar
.*: dc840000 ld a0,0\(a0\)
.*: R_MIPS_CALL16 bar
.*: dc840000 ld a0,0\(a0\)
.*: R_MIPS_GOT_DISP bar
.*: dc840000 ld a0,0\(a0\)
.*: R_MIPS_GOT_PAGE bar
.*: dc840000 ld a0,0\(a0\)
.*: R_MIPS_GOT_OFST bar
.*: dc840000 ld a0,0\(a0\)
.*: R_MIPS_GOT_HI16 bar
.*: dc840000 ld a0,0\(a0\)
.*: R_MIPS_GOT_LO16 bar
.*: dc840000 ld a0,0\(a0\)
.*: R_MIPS_GOT16 bar
.*: dc840000 ld a0,0\(a0\)
.*: R_MIPS_GPREL16 bar
.*: dc840000 ld a0,0\(a0\)
.*: R_MIPS_16 bar
.*: dc840000 ld a0,0\(a0\)
.*: R_MIPS_HIGHEST bar
.*: dc840000 ld a0,0\(a0\)
.*: R_MIPS_HIGHER bar
.*: dc840000 ld a0,0\(a0\)
.*: R_MIPS_SUB bar
.*: dc840000 ld a0,0\(a0\)
.*: R_MIPS_TLS_GD bar
.*: dc840000 ld a0,0\(a0\)
.*: R_MIPS_TLS_LDM bar
.*: dc840000 ld a0,0\(a0\)
.*: R_MIPS_TLS_DTPREL_HI16 bar
.*: dc840000 ld a0,0\(a0\)
.*: R_MIPS_TLS_DTPREL_LO16 bar
.*: dc840000 ld a0,0\(a0\)
.*: R_MIPS_TLS_TPREL_HI16 bar
.*: dc840000 ld a0,0\(a0\)
.*: R_MIPS_TLS_TPREL_LO16 bar
.*: dc840000 ld a0,0\(a0\)
.*: R_MIPS_TLS_GOTTPREL bar
.*: fc840000 sd a0,0\(a0\)
.*: R_MIPS_CALL_HI16 bar
.*: fc840000 sd a0,0\(a0\)
.*: R_MIPS_CALL_LO16 bar
.*: fc840000 sd a0,0\(a0\)
.*: R_MIPS_CALL16 bar
.*: fc840000 sd a0,0\(a0\)
.*: R_MIPS_GOT_DISP bar
.*: fc840000 sd a0,0\(a0\)
.*: R_MIPS_GOT_PAGE bar
.*: fc840000 sd a0,0\(a0\)
.*: R_MIPS_GOT_OFST bar
.*: fc840000 sd a0,0\(a0\)
.*: R_MIPS_GOT_HI16 bar
.*: fc840000 sd a0,0\(a0\)
.*: R_MIPS_GOT_LO16 bar
.*: fc840000 sd a0,0\(a0\)
.*: R_MIPS_GOT16 bar
.*: fc840000 sd a0,0\(a0\)
.*: R_MIPS_GPREL16 bar
.*: fc840000 sd a0,0\(a0\)
.*: R_MIPS_16 bar
.*: fc840000 sd a0,0\(a0\)
.*: R_MIPS_HIGHEST bar
.*: fc840000 sd a0,0\(a0\)
.*: R_MIPS_HIGHER bar
.*: fc840000 sd a0,0\(a0\)
.*: R_MIPS_SUB bar
.*: fc840000 sd a0,0\(a0\)
.*: R_MIPS_TLS_GD bar
.*: fc840000 sd a0,0\(a0\)
.*: R_MIPS_TLS_LDM bar
.*: fc840000 sd a0,0\(a0\)
.*: R_MIPS_TLS_DTPREL_HI16 bar
.*: fc840000 sd a0,0\(a0\)
.*: R_MIPS_TLS_DTPREL_LO16 bar
.*: fc840000 sd a0,0\(a0\)
.*: R_MIPS_TLS_TPREL_HI16 bar
.*: fc840000 sd a0,0\(a0\)
.*: R_MIPS_TLS_TPREL_LO16 bar
.*: fc840000 sd a0,0\(a0\)
.*: R_MIPS_TLS_GOTTPREL bar
...

View File

@ -0,0 +1,180 @@
#source: elf-rel28.s
#as: -64
#objdump: -dr
#name: MIPS ELF reloc 28 (n64)
.*: file format .*
Disassembly of section \.text:
.* <foo>:
.*: dc840000 ld a0,0\(a0\)
.*: R_MIPS_CALL_HI16 bar
.*: R_MIPS_NONE \*ABS\*
.*: R_MIPS_NONE \*ABS\*
.*: dc840000 ld a0,0\(a0\)
.*: R_MIPS_CALL_LO16 bar
.*: R_MIPS_NONE \*ABS\*
.*: R_MIPS_NONE \*ABS\*
.*: dc840000 ld a0,0\(a0\)
.*: R_MIPS_CALL16 bar
.*: R_MIPS_NONE \*ABS\*
.*: R_MIPS_NONE \*ABS\*
.*: dc840000 ld a0,0\(a0\)
.*: R_MIPS_GOT_DISP bar
.*: R_MIPS_NONE \*ABS\*
.*: R_MIPS_NONE \*ABS\*
.*: dc840000 ld a0,0\(a0\)
.*: R_MIPS_GOT_PAGE bar
.*: R_MIPS_NONE \*ABS\*
.*: R_MIPS_NONE \*ABS\*
.*: dc840000 ld a0,0\(a0\)
.*: R_MIPS_GOT_OFST bar
.*: R_MIPS_NONE \*ABS\*
.*: R_MIPS_NONE \*ABS\*
.*: dc840000 ld a0,0\(a0\)
.*: R_MIPS_GOT_HI16 bar
.*: R_MIPS_NONE \*ABS\*
.*: R_MIPS_NONE \*ABS\*
.*: dc840000 ld a0,0\(a0\)
.*: R_MIPS_GOT_LO16 bar
.*: R_MIPS_NONE \*ABS\*
.*: R_MIPS_NONE \*ABS\*
.*: dc840000 ld a0,0\(a0\)
.*: R_MIPS_GOT16 bar
.*: R_MIPS_NONE \*ABS\*
.*: R_MIPS_NONE \*ABS\*
.*: dc840000 ld a0,0\(a0\)
.*: R_MIPS_GPREL16 bar
.*: R_MIPS_NONE \*ABS\*
.*: R_MIPS_NONE \*ABS\*
.*: dc840000 ld a0,0\(a0\)
.*: R_MIPS_16 bar
.*: R_MIPS_NONE \*ABS\*
.*: R_MIPS_NONE \*ABS\*
.*: dc840000 ld a0,0\(a0\)
.*: R_MIPS_HIGHEST bar
.*: R_MIPS_NONE \*ABS\*
.*: R_MIPS_NONE \*ABS\*
.*: dc840000 ld a0,0\(a0\)
.*: R_MIPS_HIGHER bar
.*: R_MIPS_NONE \*ABS\*
.*: R_MIPS_NONE \*ABS\*
.*: dc840000 ld a0,0\(a0\)
.*: R_MIPS_SUB bar
.*: R_MIPS_NONE \*ABS\*
.*: R_MIPS_NONE \*ABS\*
.*: dc840000 ld a0,0\(a0\)
.*: R_MIPS_TLS_GD bar
.*: R_MIPS_NONE \*ABS\*
.*: R_MIPS_NONE \*ABS\*
.*: dc840000 ld a0,0\(a0\)
.*: R_MIPS_TLS_LDM bar
.*: R_MIPS_NONE \*ABS\*
.*: R_MIPS_NONE \*ABS\*
.*: dc840000 ld a0,0\(a0\)
.*: R_MIPS_TLS_DTPREL_HI16 bar
.*: R_MIPS_NONE \*ABS\*
.*: R_MIPS_NONE \*ABS\*
.*: dc840000 ld a0,0\(a0\)
.*: R_MIPS_TLS_DTPREL_LO16 bar
.*: R_MIPS_NONE \*ABS\*
.*: R_MIPS_NONE \*ABS\*
.*: dc840000 ld a0,0\(a0\)
.*: R_MIPS_TLS_TPREL_HI16 bar
.*: R_MIPS_NONE \*ABS\*
.*: R_MIPS_NONE \*ABS\*
.*: dc840000 ld a0,0\(a0\)
.*: R_MIPS_TLS_TPREL_LO16 bar
.*: R_MIPS_NONE \*ABS\*
.*: R_MIPS_NONE \*ABS\*
.*: dc840000 ld a0,0\(a0\)
.*: R_MIPS_TLS_GOTTPREL bar
.*: R_MIPS_NONE \*ABS\*
.*: R_MIPS_NONE \*ABS\*
.*: fc840000 sd a0,0\(a0\)
.*: R_MIPS_CALL_HI16 bar
.*: R_MIPS_NONE \*ABS\*
.*: R_MIPS_NONE \*ABS\*
.*: fc840000 sd a0,0\(a0\)
.*: R_MIPS_CALL_LO16 bar
.*: R_MIPS_NONE \*ABS\*
.*: R_MIPS_NONE \*ABS\*
.*: fc840000 sd a0,0\(a0\)
.*: R_MIPS_CALL16 bar
.*: R_MIPS_NONE \*ABS\*
.*: R_MIPS_NONE \*ABS\*
.*: fc840000 sd a0,0\(a0\)
.*: R_MIPS_GOT_DISP bar
.*: R_MIPS_NONE \*ABS\*
.*: R_MIPS_NONE \*ABS\*
.*: fc840000 sd a0,0\(a0\)
.*: R_MIPS_GOT_PAGE bar
.*: R_MIPS_NONE \*ABS\*
.*: R_MIPS_NONE \*ABS\*
.*: fc840000 sd a0,0\(a0\)
.*: R_MIPS_GOT_OFST bar
.*: R_MIPS_NONE \*ABS\*
.*: R_MIPS_NONE \*ABS\*
.*: fc840000 sd a0,0\(a0\)
.*: R_MIPS_GOT_HI16 bar
.*: R_MIPS_NONE \*ABS\*
.*: R_MIPS_NONE \*ABS\*
.*: fc840000 sd a0,0\(a0\)
.*: R_MIPS_GOT_LO16 bar
.*: R_MIPS_NONE \*ABS\*
.*: R_MIPS_NONE \*ABS\*
.*: fc840000 sd a0,0\(a0\)
.*: R_MIPS_GOT16 bar
.*: R_MIPS_NONE \*ABS\*
.*: R_MIPS_NONE \*ABS\*
.*: fc840000 sd a0,0\(a0\)
.*: R_MIPS_GPREL16 bar
.*: R_MIPS_NONE \*ABS\*
.*: R_MIPS_NONE \*ABS\*
.*: fc840000 sd a0,0\(a0\)
.*: R_MIPS_16 bar
.*: R_MIPS_NONE \*ABS\*
.*: R_MIPS_NONE \*ABS\*
.*: fc840000 sd a0,0\(a0\)
.*: R_MIPS_HIGHEST bar
.*: R_MIPS_NONE \*ABS\*
.*: R_MIPS_NONE \*ABS\*
.*: fc840000 sd a0,0\(a0\)
.*: R_MIPS_HIGHER bar
.*: R_MIPS_NONE \*ABS\*
.*: R_MIPS_NONE \*ABS\*
.*: fc840000 sd a0,0\(a0\)
.*: R_MIPS_SUB bar
.*: R_MIPS_NONE \*ABS\*
.*: R_MIPS_NONE \*ABS\*
.*: fc840000 sd a0,0\(a0\)
.*: R_MIPS_TLS_GD bar
.*: R_MIPS_NONE \*ABS\*
.*: R_MIPS_NONE \*ABS\*
.*: fc840000 sd a0,0\(a0\)
.*: R_MIPS_TLS_LDM bar
.*: R_MIPS_NONE \*ABS\*
.*: R_MIPS_NONE \*ABS\*
.*: fc840000 sd a0,0\(a0\)
.*: R_MIPS_TLS_DTPREL_HI16 bar
.*: R_MIPS_NONE \*ABS\*
.*: R_MIPS_NONE \*ABS\*
.*: fc840000 sd a0,0\(a0\)
.*: R_MIPS_TLS_DTPREL_LO16 bar
.*: R_MIPS_NONE \*ABS\*
.*: R_MIPS_NONE \*ABS\*
.*: fc840000 sd a0,0\(a0\)
.*: R_MIPS_TLS_TPREL_HI16 bar
.*: R_MIPS_NONE \*ABS\*
.*: R_MIPS_NONE \*ABS\*
.*: fc840000 sd a0,0\(a0\)
.*: R_MIPS_TLS_TPREL_LO16 bar
.*: R_MIPS_NONE \*ABS\*
.*: R_MIPS_NONE \*ABS\*
.*: fc840000 sd a0,0\(a0\)
.*: R_MIPS_TLS_GOTTPREL bar
.*: R_MIPS_NONE \*ABS\*
.*: R_MIPS_NONE \*ABS\*
\.\.\.

View File

@ -0,0 +1,48 @@
.ent foo
foo:
# Many of these do not make conceptual sense, but they should
# at least assemble.
ld $4,%call_hi(bar)($4)
ld $4,%call_lo(bar)($4)
ld $4,%call16(bar)($4)
ld $4,%got_disp(bar)($4)
ld $4,%got_page(bar)($4)
ld $4,%got_ofst(bar)($4)
ld $4,%got_hi(bar)($4)
ld $4,%got_lo(bar)($4)
ld $4,%got(bar)($4)
ld $4,%gp_rel(bar)($4)
ld $4,%half(bar)($4)
ld $4,%highest(bar)($4)
ld $4,%higher(bar)($4)
ld $4,%neg(bar)($4)
ld $4,%tlsgd(bar)($4)
ld $4,%tlsldm(bar)($4)
ld $4,%dtprel_hi(bar)($4)
ld $4,%dtprel_lo(bar)($4)
ld $4,%tprel_hi(bar)($4)
ld $4,%tprel_lo(bar)($4)
ld $4,%gottprel(bar)($4)
sd $4,%call_hi(bar)($4)
sd $4,%call_lo(bar)($4)
sd $4,%call16(bar)($4)
sd $4,%got_disp(bar)($4)
sd $4,%got_page(bar)($4)
sd $4,%got_ofst(bar)($4)
sd $4,%got_hi(bar)($4)
sd $4,%got_lo(bar)($4)
sd $4,%got(bar)($4)
sd $4,%gp_rel(bar)($4)
sd $4,%half(bar)($4)
sd $4,%highest(bar)($4)
sd $4,%higher(bar)($4)
sd $4,%neg(bar)($4)
sd $4,%tlsgd(bar)($4)
sd $4,%tlsldm(bar)($4)
sd $4,%dtprel_hi(bar)($4)
sd $4,%dtprel_lo(bar)($4)
sd $4,%tprel_hi(bar)($4)
sd $4,%tprel_lo(bar)($4)
sd $4,%gottprel(bar)($4)
.end foo

View File

@ -810,6 +810,11 @@ if { [istarget mips*-*-vxworks*] } {
run_dump_test_arches "elf-rel27" [mips_arch_list_all]
if $has_newabi {
run_dump_test "elf-rel28-n32"
run_dump_test "elf-rel28-n64"
}
if { !$no_mips16 } {
run_dump_test "${tmips}mips${el}16-e"
run_dump_test "${tmips}mips${el}16-f"