mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-15 04:31:49 +08:00
gas/
* config/tc-mips.h (DIFF_EXPR_OK, CFI_DIFF_EXPR_OK): Define. * config/tc-mips.c (md_pcrel_from): Remove error message. (md_apply_fix): Convert PC-relative BFD_RELOC_32s to BFD_RELOC_32_PCREL. Report a specific error message for unhandled PC-relative expressions. Handle BFD_RELOC_8. gas/testsuite/ * gas/all/gas.exp: Remove XFAIL of forward.d for MIPS. * gas/mips/pcrel-1.s, gas/mips/pcrel-1.d, gas/mips/pcrel-2.s, gas/mips/pcrel-2.d, gas/mips/pcrel-3.s, gas/mips/pcrel-3.l, gas/mips/pcrel-4.s, gas/mips/pcrel-4-32.d, gas/mips/pcrel-4-n32.d, gas/mips/pcrel-4-64.d: New tests. * gas/mips/mips.exp: Run them. * gas/mips/lui-2.l: Tweak error message for line 7. ld/testsuite/ * ld-elf/merge.d: Remove MIPS XFAIL.
This commit is contained in:
parent
1bff71c325
commit
d56a8dda6d
@ -1,3 +1,11 @@
|
||||
2014-03-20 Richard Sandiford <rdsandiford@googlemail.com>
|
||||
|
||||
* config/tc-mips.h (DIFF_EXPR_OK, CFI_DIFF_EXPR_OK): Define.
|
||||
* config/tc-mips.c (md_pcrel_from): Remove error message.
|
||||
(md_apply_fix): Convert PC-relative BFD_RELOC_32s to
|
||||
BFD_RELOC_32_PCREL. Report a specific error message for unhandled
|
||||
PC-relative expressions. Handle BFD_RELOC_8.
|
||||
|
||||
2014-03-19 Jose E. Marchesi <jose.marchesi@oracle.com>
|
||||
|
||||
* config/tc-sparc.c (hpriv_reg_table): Added entries for
|
||||
|
@ -14057,15 +14057,7 @@ md_pcrel_from (fixS *fixP)
|
||||
/* Return the address of the delay slot. */
|
||||
return addr + 4;
|
||||
|
||||
case BFD_RELOC_32_PCREL:
|
||||
return addr;
|
||||
|
||||
default:
|
||||
/* We have no relocation type for PC relative MIPS16 instructions. */
|
||||
if (fixP->fx_addsy && S_GET_SEGMENT (fixP->fx_addsy) != now_seg)
|
||||
as_bad_where (fixP->fx_file, fixP->fx_line,
|
||||
_("PC relative MIPS16 instruction references"
|
||||
" a different section"));
|
||||
return addr;
|
||||
}
|
||||
}
|
||||
@ -14262,13 +14254,38 @@ md_apply_fix (fixS *fixP, valueT *valP, segT seg ATTRIBUTE_UNUSED)
|
||||
unsigned long insn;
|
||||
reloc_howto_type *howto;
|
||||
|
||||
/* We ignore generic BFD relocations we don't know about. */
|
||||
howto = bfd_reloc_type_lookup (stdoutput, fixP->fx_r_type);
|
||||
if (! howto)
|
||||
return;
|
||||
if (fixP->fx_pcrel)
|
||||
switch (fixP->fx_r_type)
|
||||
{
|
||||
case BFD_RELOC_16_PCREL_S2:
|
||||
case BFD_RELOC_MICROMIPS_7_PCREL_S1:
|
||||
case BFD_RELOC_MICROMIPS_10_PCREL_S1:
|
||||
case BFD_RELOC_MICROMIPS_16_PCREL_S1:
|
||||
case BFD_RELOC_32_PCREL:
|
||||
break;
|
||||
|
||||
case BFD_RELOC_32:
|
||||
fixP->fx_r_type = BFD_RELOC_32_PCREL;
|
||||
break;
|
||||
|
||||
default:
|
||||
as_bad_where (fixP->fx_file, fixP->fx_line,
|
||||
_("PC-relative reference to a different section"));
|
||||
break;
|
||||
}
|
||||
|
||||
/* Handle BFD_RELOC_8, since it's easy. Punt on other bfd relocations
|
||||
that have no MIPS ELF equivalent. */
|
||||
if (fixP->fx_r_type != BFD_RELOC_8)
|
||||
{
|
||||
howto = bfd_reloc_type_lookup (stdoutput, fixP->fx_r_type);
|
||||
if (!howto)
|
||||
return;
|
||||
}
|
||||
|
||||
gas_assert (fixP->fx_size == 2
|
||||
|| fixP->fx_size == 4
|
||||
|| fixP->fx_r_type == BFD_RELOC_8
|
||||
|| fixP->fx_r_type == BFD_RELOC_16
|
||||
|| fixP->fx_r_type == BFD_RELOC_64
|
||||
|| fixP->fx_r_type == BFD_RELOC_CTOR
|
||||
@ -14280,12 +14297,6 @@ md_apply_fix (fixS *fixP, valueT *valP, segT seg ATTRIBUTE_UNUSED)
|
||||
|
||||
buf = fixP->fx_frag->fr_literal + fixP->fx_where;
|
||||
|
||||
gas_assert (!fixP->fx_pcrel || fixP->fx_r_type == BFD_RELOC_16_PCREL_S2
|
||||
|| fixP->fx_r_type == BFD_RELOC_MICROMIPS_7_PCREL_S1
|
||||
|| fixP->fx_r_type == BFD_RELOC_MICROMIPS_10_PCREL_S1
|
||||
|| fixP->fx_r_type == BFD_RELOC_MICROMIPS_16_PCREL_S1
|
||||
|| fixP->fx_r_type == BFD_RELOC_32_PCREL);
|
||||
|
||||
/* Don't treat parts of a composite relocation as done. There are two
|
||||
reasons for this:
|
||||
|
||||
@ -14435,6 +14446,7 @@ md_apply_fix (fixS *fixP, valueT *valP, segT seg ATTRIBUTE_UNUSED)
|
||||
case BFD_RELOC_32:
|
||||
case BFD_RELOC_32_PCREL:
|
||||
case BFD_RELOC_16:
|
||||
case BFD_RELOC_8:
|
||||
/* If we are deleting this reloc entry, we must fill in the
|
||||
value now. This can happen if we have a .word which is not
|
||||
resolved when it appears but is later defined. */
|
||||
|
@ -189,4 +189,9 @@ extern int tc_mips_regname_to_dw2regnum (char *regname);
|
||||
#define DWARF2_DEFAULT_RETURN_COLUMN 31
|
||||
#define DWARF2_CIE_DATA_ALIGNMENT (-4)
|
||||
|
||||
#define DIFF_EXPR_OK
|
||||
/* We define DIFF_EXPR_OK because of R_MIPS_PC32, but we have no
|
||||
64-bit form for n64 CFIs. */
|
||||
#define CFI_DIFF_EXPR_OK 0
|
||||
|
||||
#endif /* TC_MIPS */
|
||||
|
@ -1,3 +1,13 @@
|
||||
2014-03-20 Richard Sandiford <rdsandiford@googlemail.com>
|
||||
|
||||
* gas/all/gas.exp: Remove XFAIL of forward.d for MIPS.
|
||||
* gas/mips/pcrel-1.s, gas/mips/pcrel-1.d, gas/mips/pcrel-2.s,
|
||||
gas/mips/pcrel-2.d, gas/mips/pcrel-3.s, gas/mips/pcrel-3.l,
|
||||
gas/mips/pcrel-4.s, gas/mips/pcrel-4-32.d, gas/mips/pcrel-4-n32.d,
|
||||
gas/mips/pcrel-4-64.d: New tests.
|
||||
* gas/mips/mips.exp: Run them.
|
||||
* gas/mips/lui-2.l: Tweak error message for line 7.
|
||||
|
||||
2014-03-20 Ilya Tocar <ilya.tocar@intel.com>
|
||||
|
||||
* gas/i386/avx512pf-intel.d: Change memory size for vgatherpf0qps,
|
||||
|
@ -99,7 +99,7 @@ case $target_triplet in {
|
||||
default {
|
||||
# Some targets don't manage to resolve BFD_RELOC_8 for constants.
|
||||
setup_xfail "alpha*-*-*" "*c30*-*-*" "*c4x*-*-*" \
|
||||
"d\[13\]0v*-*-*" "i860-*-*" "mips*-*-*" \
|
||||
"d\[13\]0v*-*-*" "i860-*-*" \
|
||||
"nds32*-*-*" "pdp11-*-*" "xtensa*-*-*"
|
||||
run_dump_test forward
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
.*\.s: Assembler messages:
|
||||
.*\.s:10: Error: invalid operands \(\*UND\* and \*UND\* sections\) for `/'
|
||||
.*\.s:7: Error: can't resolve `bar' {\*UND\* section} - `foo' {\.text section}
|
||||
.*\.s:7: Error: PC-relative reference to a different section
|
||||
.*\.s:8: Error: can't resolve `baz' {\*UND\* section} - `bar' {\*UND\* section}
|
||||
.*\.s:9: Error: can't resolve `\.text' {\.text section} - `baz' {\*UND\* section}
|
||||
|
@ -1169,4 +1169,13 @@ if { [istarget mips*-*-vxworks*] } {
|
||||
run_dump_test_arches "msa64" [mips_arch_list_matching mips64r2]
|
||||
run_dump_test_arches "msa-relax" [mips_arch_list_matching mips32r2]
|
||||
run_dump_test_arches "msa-branch" [mips_arch_list_matching mips32r2]
|
||||
|
||||
run_dump_test "pcrel-1"
|
||||
run_dump_test "pcrel-2"
|
||||
run_list_test "pcrel-3" "" "Invalid cross-section PC-relative references"
|
||||
run_dump_test "pcrel-4-32"
|
||||
if $has_newabi {
|
||||
run_dump_test "pcrel-4-n32"
|
||||
run_dump_test "pcrel-4-64"
|
||||
}
|
||||
}
|
||||
|
14
gas/testsuite/gas/mips/pcrel-1.d
Normal file
14
gas/testsuite/gas/mips/pcrel-1.d
Normal file
@ -0,0 +1,14 @@
|
||||
#objdump: -dr
|
||||
#name: Locally-resolvable PC-relative code references
|
||||
|
||||
.*: file format .*
|
||||
|
||||
Disassembly of section .text:
|
||||
|
||||
00000000 <func>:
|
||||
0: 3c040001 lui a0,0x1
|
||||
4: 2484800c addiu a0,a0,-32756
|
||||
...
|
||||
|
||||
00008010 <foo>:
|
||||
#pass
|
13
gas/testsuite/gas/mips/pcrel-1.s
Normal file
13
gas/testsuite/gas/mips/pcrel-1.s
Normal file
@ -0,0 +1,13 @@
|
||||
.text
|
||||
.ent func
|
||||
func:
|
||||
lui $4,%hi(foo-.)
|
||||
addiu $4,%lo(foo-.)
|
||||
.end func
|
||||
|
||||
.space 0x8008
|
||||
|
||||
.ent foo
|
||||
foo:
|
||||
nop
|
||||
.end foo
|
8
gas/testsuite/gas/mips/pcrel-2.d
Normal file
8
gas/testsuite/gas/mips/pcrel-2.d
Normal file
@ -0,0 +1,8 @@
|
||||
#objdump: -s
|
||||
#name: Locally-resolvable PC-relative data references
|
||||
#as: -EB
|
||||
|
||||
#...
|
||||
Contents of section \.data:
|
||||
0000 ff0f000e 0000000c 00000000 00000008 .*
|
||||
#pass
|
7
gas/testsuite/gas/mips/pcrel-2.s
Normal file
7
gas/testsuite/gas/mips/pcrel-2.s
Normal file
@ -0,0 +1,7 @@
|
||||
.data
|
||||
.byte 0xff
|
||||
.byte frob-.
|
||||
.half frob-.
|
||||
.word frob-.
|
||||
.quad frob-.
|
||||
frob:
|
7
gas/testsuite/gas/mips/pcrel-3.l
Normal file
7
gas/testsuite/gas/mips/pcrel-3.l
Normal file
@ -0,0 +1,7 @@
|
||||
.*: Assembler messages:
|
||||
.*:4: Error: PC-relative reference to a different section
|
||||
.*:5: Error: PC-relative reference to a different section
|
||||
.*:6: Error: PC-relative reference to a different section
|
||||
.*:9: Error: PC-relative reference to a different section
|
||||
.*:10: Error: PC-relative reference to a different section
|
||||
.*:11: Error: PC-relative reference to a different section
|
11
gas/testsuite/gas/mips/pcrel-3.s
Normal file
11
gas/testsuite/gas/mips/pcrel-3.s
Normal file
@ -0,0 +1,11 @@
|
||||
.text
|
||||
.ent func
|
||||
func:
|
||||
lui $4,%hi(foo-.)
|
||||
addiu $4,%lo(foo-.)
|
||||
lw $4,%got(foo-.)($gp)
|
||||
.end func
|
||||
|
||||
.byte foo-.
|
||||
.half foo-.
|
||||
.quad foo-.
|
18
gas/testsuite/gas/mips/pcrel-4-32.d
Normal file
18
gas/testsuite/gas/mips/pcrel-4-32.d
Normal file
@ -0,0 +1,18 @@
|
||||
#objdump: -sr
|
||||
#name: Valid cross-section PC-relative references (o32)
|
||||
#as: -32 -EB
|
||||
#source: pcrel-4.s
|
||||
|
||||
.*: file format .*
|
||||
|
||||
RELOCATION RECORDS FOR \[\.data\]:
|
||||
OFFSET TYPE VALUE
|
||||
00000000 R_MIPS_PC32 foo
|
||||
00000004 R_MIPS_PC32 foo
|
||||
00000008 R_MIPS_PC32 foo
|
||||
0000000c R_MIPS_PC32 foo
|
||||
|
||||
#...
|
||||
Contents of section \.data:
|
||||
0000 00000000 00000004 00000008 fffffff0 ................
|
||||
#pass
|
21
gas/testsuite/gas/mips/pcrel-4-64.d
Normal file
21
gas/testsuite/gas/mips/pcrel-4-64.d
Normal file
@ -0,0 +1,21 @@
|
||||
#objdump: -r
|
||||
#name: Valid cross-section PC-relative references (n64)
|
||||
#as: -64 -mips3
|
||||
#source: pcrel-4.s
|
||||
|
||||
.*: file format .*
|
||||
|
||||
RELOCATION RECORDS FOR \[\.data\]:
|
||||
OFFSET TYPE VALUE
|
||||
0+000 R_MIPS_PC32 foo
|
||||
0+000 R_MIPS_NONE \*ABS\*
|
||||
0+000 R_MIPS_NONE \*ABS\*
|
||||
0+004 R_MIPS_PC32 foo\+0x0+004
|
||||
0+004 R_MIPS_NONE \*ABS\*\+0x0+004
|
||||
0+004 R_MIPS_NONE \*ABS\*\+0x0+004
|
||||
0+008 R_MIPS_PC32 foo\+0x0+008
|
||||
0+008 R_MIPS_NONE \*ABS\*\+0x0+008
|
||||
0+008 R_MIPS_NONE \*ABS\*\+0x0+008
|
||||
0+00c R_MIPS_PC32 foo-0x0+010
|
||||
0+00c R_MIPS_NONE \*ABS\*-0x0+010
|
||||
0+00c R_MIPS_NONE \*ABS\*-0x0+010
|
13
gas/testsuite/gas/mips/pcrel-4-n32.d
Normal file
13
gas/testsuite/gas/mips/pcrel-4-n32.d
Normal file
@ -0,0 +1,13 @@
|
||||
#objdump: -r
|
||||
#name: Valid cross-section PC-relative references (n32)
|
||||
#as: -n32 -mips3
|
||||
#source: pcrel-4.s
|
||||
|
||||
.*: file format .*
|
||||
|
||||
RELOCATION RECORDS FOR \[\.data\]:
|
||||
OFFSET TYPE VALUE
|
||||
00000000 R_MIPS_PC32 foo
|
||||
00000004 R_MIPS_PC32 foo\+0x00000004
|
||||
00000008 R_MIPS_PC32 foo\+0x00000008
|
||||
0000000c R_MIPS_PC32 foo-0x00000010
|
6
gas/testsuite/gas/mips/pcrel-4.s
Normal file
6
gas/testsuite/gas/mips/pcrel-4.s
Normal file
@ -0,0 +1,6 @@
|
||||
.data
|
||||
.word foo-.
|
||||
.word foo-(.-4)
|
||||
.word foo+8-.
|
||||
.word foo-.-16
|
||||
|
@ -1,3 +1,7 @@
|
||||
2014-03-20 Richard Sandiford <rdsandiford@googlemail.com>
|
||||
|
||||
* ld-elf/merge.d: Remove MIPS XFAIL.
|
||||
|
||||
2014-03-20 Will Newton <will.newton@linaro.org>
|
||||
|
||||
* ld-arm/ifunc-14.rd: Update symbol values.
|
||||
|
@ -4,7 +4,7 @@
|
||||
#xfail: "arc-*-*" "avr-*-*" "bfin-*-*" "cr16-*-*" "cris*-*-*" "crx-*-*" "d10v-*-*" "d30v-*-*"
|
||||
#xfail: "dlx-*-*" "fr30-*-*" "frv-*-*" "hppa*64*-*-*" "h8300-*-*" "score-*-*"
|
||||
#xfail: "i370-*-*" "i860-*-*" "i960-*-*" "ip2k-*-*" "iq2000-*-*" "lm32-*-*"
|
||||
#xfail: "mcore-*-*" "mn102*-*-*" "mips*-*-*" "ms1-*-*" "mep-*-*"
|
||||
#xfail: "mcore-*-*" "mn102*-*-*" "ms1-*-*" "mep-*-*"
|
||||
#xfail: "or32-*-*" "pj-*-*" "sparc*-*-*" "tic6x-*-*" "vax-*-*" "xstormy16-*-*"
|
||||
#xfail: "xtensa*-*-*" "metag-*-*"
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user