gas/
* config/tc-mips.c (mips_fix_adjustable): On REL targets also reject PC-relative relocations. gas/testsuite/ * gas/mips/branch-misc-2.d: Adjust for relocation change. * gas/mips/branch-misc-2pic.d: Likewise. * gas/mips/branch-misc-4.d: New test for PC-relative relocation overflow. * gas/mips/branch-misc-4-64.d: Likewise. * gas/mips/branch-misc-4.s: Source for the new tests. * testsuite/gas/mips/mips.exp: Run the new tests.
This commit is contained in:
parent
5c4f07bae1
commit
ce70d90a3e
@ -1,3 +1,8 @@
|
|||||||
|
2011-02-28 Maciej W. Rozycki <macro@codesourcery.com>
|
||||||
|
|
||||||
|
* config/tc-mips.c (mips_fix_adjustable): On REL targets also
|
||||||
|
reject PC-relative relocations.
|
||||||
|
|
||||||
2011-02-28 Maciej W. Rozycki <macro@codesourcery.com>
|
2011-02-28 Maciej W. Rozycki <macro@codesourcery.com>
|
||||||
|
|
||||||
* config/tc-mips.c (md_convert_frag): Correct message
|
* config/tc-mips.c (md_convert_frag): Correct message
|
||||||
|
@ -14248,8 +14248,12 @@ mips_fix_adjustable (fixS *fixp)
|
|||||||
&& (S_GET_SEGMENT (fixp->fx_addsy)->flags & SEC_MERGE) != 0)
|
&& (S_GET_SEGMENT (fixp->fx_addsy)->flags & SEC_MERGE) != 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
/* There is no place to store an in-place offset for JALR relocations. */
|
/* There is no place to store an in-place offset for JALR relocations.
|
||||||
if (fixp->fx_r_type == BFD_RELOC_MIPS_JALR && HAVE_IN_PLACE_ADDENDS)
|
Likewise an in-range offset of PC-relative relocations may overflow
|
||||||
|
the in-place relocatable field if recalculated against the start
|
||||||
|
address of the symbol's containing section. */
|
||||||
|
if (HAVE_IN_PLACE_ADDENDS
|
||||||
|
&& (fixp->fx_pcrel || fixp->fx_r_type == BFD_RELOC_MIPS_JALR))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
#ifdef OBJ_ELF
|
#ifdef OBJ_ELF
|
||||||
|
@ -1,3 +1,13 @@
|
|||||||
|
2011-02-28 Maciej W. Rozycki <macro@codesourcery.com>
|
||||||
|
|
||||||
|
* gas/mips/branch-misc-2.d: Adjust for relocation change.
|
||||||
|
* gas/mips/branch-misc-2pic.d: Likewise.
|
||||||
|
* gas/mips/branch-misc-4.d: New test for PC-relative relocation
|
||||||
|
overflow.
|
||||||
|
* gas/mips/branch-misc-4-64.d: Likewise.
|
||||||
|
* gas/mips/branch-misc-4.s: Source for the new tests.
|
||||||
|
* testsuite/gas/mips/mips.exp: Run the new tests.
|
||||||
|
|
||||||
2011-02-28 Maciej W. Rozycki <macro@codesourcery.com>
|
2011-02-28 Maciej W. Rozycki <macro@codesourcery.com>
|
||||||
|
|
||||||
* gas/mips/relax-swap1.l: Adjust for message capitalization
|
* gas/mips/relax-swap1.l: Adjust for message capitalization
|
||||||
|
@ -39,6 +39,6 @@ Disassembly of section .text:
|
|||||||
[ ]*b0: R_MIPS_PC16 x2
|
[ ]*b0: R_MIPS_PC16 x2
|
||||||
0+00b4 <[^>]*> 00000000 nop
|
0+00b4 <[^>]*> 00000000 nop
|
||||||
0+00b8 <[^>]*> 1000ffff b 000000b8 <g6\+0x10>
|
0+00b8 <[^>]*> 1000ffff b 000000b8 <g6\+0x10>
|
||||||
[ ]*b8: R_MIPS_PC16 \.data
|
[ ]*b8: R_MIPS_PC16 \.Ldata
|
||||||
0+00bc <[^>]*> 00000000 nop
|
0+00bc <[^>]*> 00000000 nop
|
||||||
\.\.\.
|
\.\.\.
|
||||||
|
@ -40,6 +40,6 @@ Disassembly of section .text:
|
|||||||
[ ]*b0: R_MIPS_PC16 x2
|
[ ]*b0: R_MIPS_PC16 x2
|
||||||
0+00b4 <[^>]*> 00000000 nop
|
0+00b4 <[^>]*> 00000000 nop
|
||||||
0+00b8 <[^>]*> 1000ffff b 000000b8 <g6\+0x10>
|
0+00b8 <[^>]*> 1000ffff b 000000b8 <g6\+0x10>
|
||||||
[ ]*b8: R_MIPS_PC16 \.data
|
[ ]*b8: R_MIPS_PC16 \.Ldata
|
||||||
0+00bc <[^>]*> 00000000 nop
|
0+00bc <[^>]*> 00000000 nop
|
||||||
\.\.\.
|
\.\.\.
|
||||||
|
35
gas/testsuite/gas/mips/branch-misc-4-64.d
Normal file
35
gas/testsuite/gas/mips/branch-misc-4-64.d
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
#objdump: -dr --prefix-addresses --show-raw-insn
|
||||||
|
#name: MIPS branch-misc-4-64
|
||||||
|
#as: -64
|
||||||
|
#source: branch-misc-4.s
|
||||||
|
|
||||||
|
# Verify PC-relative relocations do not overflow.
|
||||||
|
|
||||||
|
.*: +file format .*mips.*
|
||||||
|
|
||||||
|
Disassembly of section \.text:
|
||||||
|
\.\.\.
|
||||||
|
[0-9a-f]+ <[^>]*> 10000000 b [0-9a-f]+ <foo\+0x[0-9a-f]+>
|
||||||
|
[ ]*[0-9a-f]+: R_MIPS_PC16 bar\+0xf+fffc
|
||||||
|
[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0xf+fffc
|
||||||
|
[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0xf+fffc
|
||||||
|
[0-9a-f]+ <[^>]*> 00000000 nop
|
||||||
|
[0-9a-f]+ <[^>]*> 10000000 b [0-9a-f]+ <foo\+0x[0-9a-f]+>
|
||||||
|
[ ]*[0-9a-f]+: R_MIPS_PC16 \.init\+0x4
|
||||||
|
[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x4
|
||||||
|
[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x4
|
||||||
|
[0-9a-f]+ <[^>]*> 00000000 nop
|
||||||
|
\.\.\.
|
||||||
|
|
||||||
|
Disassembly of section \.init:
|
||||||
|
[0-9a-f]+ <[^>]*> 10000000 b [0-9a-f]+ <bar\+0x[0-9a-f]+>
|
||||||
|
[ ]*[0-9a-f]+: R_MIPS_PC16 foo\+0xf+fffc
|
||||||
|
[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0xf+fffc
|
||||||
|
[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0xf+fffc
|
||||||
|
[0-9a-f]+ <[^>]*> 00000000 nop
|
||||||
|
[0-9a-f]+ <[^>]*> 10000000 b [0-9a-f]+ <bar\+0x[0-9a-f]+>
|
||||||
|
[ ]*[0-9a-f]+: R_MIPS_PC16 \.text\+0x40004
|
||||||
|
[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x40004
|
||||||
|
[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x40004
|
||||||
|
[0-9a-f]+ <[^>]*> 00000000 nop
|
||||||
|
\.\.\.
|
26
gas/testsuite/gas/mips/branch-misc-4.d
Normal file
26
gas/testsuite/gas/mips/branch-misc-4.d
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
#objdump: -dr --prefix-addresses --show-raw-insn
|
||||||
|
#name: MIPS branch-misc-4
|
||||||
|
#as: -32
|
||||||
|
|
||||||
|
# Verify PC-relative relocations do not overflow.
|
||||||
|
|
||||||
|
.*: +file format .*mips.*
|
||||||
|
|
||||||
|
Disassembly of section \.text:
|
||||||
|
\.\.\.
|
||||||
|
([0-9a-f]+) <[^>]*> 1000ffff b \1 <foo>
|
||||||
|
[ ]*[0-9a-f]+: R_MIPS_PC16 bar
|
||||||
|
[0-9a-f]+ <[^>]*> 00000000 nop
|
||||||
|
([0-9a-f]+) <[^>]*> 1000ffff b \1 <\.Lfoo>
|
||||||
|
[ ]*[0-9a-f]+: R_MIPS_PC16 \.Lbar
|
||||||
|
[0-9a-f]+ <[^>]*> 00000000 nop
|
||||||
|
\.\.\.
|
||||||
|
|
||||||
|
Disassembly of section \.init:
|
||||||
|
([0-9a-f]+) <[^>]*> 1000ffff b \1 <bar>
|
||||||
|
[ ]*[0-9a-f]+: R_MIPS_PC16 foo
|
||||||
|
[0-9a-f]+ <[^>]*> 00000000 nop
|
||||||
|
([0-9a-f]+) <[^>]*> 1000ffff b \1 <\.Lbar>
|
||||||
|
[ ]*[0-9a-f]+: R_MIPS_PC16 \.Lfoo
|
||||||
|
[0-9a-f]+ <[^>]*> 00000000 nop
|
||||||
|
\.\.\.
|
28
gas/testsuite/gas/mips/branch-misc-4.s
Normal file
28
gas/testsuite/gas/mips/branch-misc-4.s
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
# Source file to verify PC-relative relocations do not overflow.
|
||||||
|
|
||||||
|
.text
|
||||||
|
.space 0x40000
|
||||||
|
.globl foo
|
||||||
|
.ent foo
|
||||||
|
foo:
|
||||||
|
b bar
|
||||||
|
.Lfoo:
|
||||||
|
b .Lbar
|
||||||
|
.end foo
|
||||||
|
|
||||||
|
# Force at least 8 (non-delay-slot) zero bytes, to make 'objdump' print ...
|
||||||
|
.align 2
|
||||||
|
.space 8
|
||||||
|
|
||||||
|
.section .init, "ax", @progbits
|
||||||
|
.globl bar
|
||||||
|
.ent bar
|
||||||
|
bar:
|
||||||
|
b foo
|
||||||
|
.Lbar:
|
||||||
|
b .Lfoo
|
||||||
|
.end bar
|
||||||
|
|
||||||
|
# Force at least 8 (non-delay-slot) zero bytes, to make 'objdump' print ...
|
||||||
|
.align 2
|
||||||
|
.space 8
|
@ -830,6 +830,11 @@ if { [istarget mips*-*-vxworks*] } {
|
|||||||
run_dump_test "jalr2"
|
run_dump_test "jalr2"
|
||||||
|
|
||||||
run_dump_test_arches "aent" [mips_arch_list_matching mips1]
|
run_dump_test_arches "aent" [mips_arch_list_matching mips1]
|
||||||
|
|
||||||
|
run_dump_test_arches "branch-misc-4" \
|
||||||
|
[mips_arch_list_matching mips1]
|
||||||
|
run_dump_test_arches "branch-misc-4-64" \
|
||||||
|
[mips_arch_list_matching mips3]
|
||||||
}
|
}
|
||||||
|
|
||||||
if $has_newabi {
|
if $has_newabi {
|
||||||
|
Loading…
Reference in New Issue
Block a user