MIPS/GAS: Sanitize `.option picX' pseudo-op

gas/
	* config/tc-mips.c (s_option): Sanitize `.option picX'
	pseudo-op.
	* testsuite/gas/mips/option-pic-1.d: New test.
	* testsuite/gas/mips/option-pic-2.l: New list test.
	* testsuite/gas/mips/option-pic-1.s: New test source.
	* testsuite/gas/mips/option-pic-2.s: New test source.
	* testsuite/gas/mips/mips.exp: Run the new tests.
This commit is contained in:
Maciej W. Rozycki 2016-04-09 21:35:50 +01:00
parent 668c5ebc09
commit 41a1578ed1
7 changed files with 56 additions and 1 deletions

View file

@ -1,3 +1,13 @@
2016-04-09 Maciej W. Rozycki <macro@imgtec.com>
* config/tc-mips.c (s_option): Sanitize `.option picX'
pseudo-op.
* testsuite/gas/mips/option-pic-1.d: New test.
* testsuite/gas/mips/option-pic-2.l: New list test.
* testsuite/gas/mips/option-pic-1.s: New test source.
* testsuite/gas/mips/option-pic-2.s: New test source.
* testsuite/gas/mips/mips.exp: Run the new tests.
2016-04-09 Maciej W. Rozycki <macro@imgtec.com> 2016-04-09 Maciej W. Rozycki <macro@imgtec.com>
* config/tc-mips.c (s_option): Reject `.option picX' if VxWorks * config/tc-mips.c (s_option): Reject `.option picX' if VxWorks

View file

@ -15472,7 +15472,7 @@ s_option (int x ATTRIBUTE_UNUSED)
{ {
/* FIXME: What does this mean? */ /* FIXME: What does this mean? */
} }
else if (strncmp (opt, "pic", 3) == 0) else if (strncmp (opt, "pic", 3) == 0 && ISDIGIT (opt[3]) && opt[4] == '\0')
{ {
int i; int i;

View file

@ -1474,6 +1474,9 @@ if { [istarget mips*-*-vxworks*] } {
run_dump_test "li-d" run_dump_test "li-d"
run_dump_test "option-pic-1"
run_list_test "option-pic-2" "" \
"MIPS invalid PIC option"
run_list_test "option-pic-vxworks-1" "-mvxworks-pic" \ run_list_test "option-pic-vxworks-1" "-mvxworks-pic" \
"MIPS invalid PIC option in VxWorks PIC" "MIPS invalid PIC option in VxWorks PIC"
run_list_test "option-pic-vxworks-2" "-mvxworks-pic" \ run_list_test "option-pic-vxworks-2" "-mvxworks-pic" \

View file

@ -0,0 +1,18 @@
#objdump: -dr --prefix-addresses --show-raw-insn
#name: MIPS PIC option
#as: -32
.*: +file format .*mips.*
Disassembly of section \.text:
[0-9a-f]+ <[^>]*> 8f820000 lw v0,0\(gp\)
[ ]*[0-9a-f]+: R_MIPS_GOT16 bar
[0-9a-f]+ <[^>]*> 3c020000 lui v0,0x0
[ ]*[0-9a-f]+: R_MIPS_HI16 bar
[0-9a-f]+ <[^>]*> 24420000 addiu v0,v0,0
[ ]*[0-9a-f]+: R_MIPS_LO16 bar
[0-9a-f]+ <[^>]*> 8f820000 lw v0,0\(gp\)
[ ]*[0-9a-f]+: R_MIPS_GOT16 bar
[0-9a-f]+ <[^>]*> 03e00008 jr ra
[0-9a-f]+ <[^>]*> 00000000 nop
\.\.\.

View file

@ -0,0 +1,16 @@
.abicalls
.text
.globl foo
.ent foo
foo:
la $2, bar
.option pic0 # Switch off!
la $2, bar
.option pic2 # Switch on!
la $2, bar
jr $ra
.end foo
# Force some (non-delay-slot) zero bytes, to make 'objdump' print ...
.align 4, 0
.space 16

View file

@ -0,0 +1,4 @@
.*: Assembler messages:
.*:2: Warning: unrecognized option "picfoo"
.*:3: Warning: unrecognized option "pic0foo"
.*:4: Error: junk at end of line, first unrecognized character is `f'

View file

@ -0,0 +1,4 @@
.abicalls
.option picfoo
.option pic0foo
.option pic0 foo