From: Maciej W. Rozycki Date: Sat, 9 Apr 2016 20:35:50 +0000 (+0100) Subject: MIPS/GAS: Sanitize `.option picX' pseudo-op X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=41a1578ed17cdd7c01c38389ac7c714c4f15cbf8;p=binutils-gdb.git 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. --- diff --git a/gas/ChangeLog b/gas/ChangeLog index da02325fd5e..eefeb2fc9b7 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,13 @@ +2016-04-09 Maciej W. Rozycki + + * 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 * config/tc-mips.c (s_option): Reject `.option picX' if VxWorks diff --git a/gas/config/tc-mips.c b/gas/config/tc-mips.c index 701744476f5..db3ec6775e2 100644 --- a/gas/config/tc-mips.c +++ b/gas/config/tc-mips.c @@ -15472,7 +15472,7 @@ s_option (int x ATTRIBUTE_UNUSED) { /* 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; diff --git a/gas/testsuite/gas/mips/mips.exp b/gas/testsuite/gas/mips/mips.exp index 02f76cc09cd..4d770cb7000 100644 --- a/gas/testsuite/gas/mips/mips.exp +++ b/gas/testsuite/gas/mips/mips.exp @@ -1474,6 +1474,9 @@ if { [istarget mips*-*-vxworks*] } { 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" \ "MIPS invalid PIC option in VxWorks PIC" run_list_test "option-pic-vxworks-2" "-mvxworks-pic" \ diff --git a/gas/testsuite/gas/mips/option-pic-1.d b/gas/testsuite/gas/mips/option-pic-1.d new file mode 100644 index 00000000000..da32af6a6ce --- /dev/null +++ b/gas/testsuite/gas/mips/option-pic-1.d @@ -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 + \.\.\. diff --git a/gas/testsuite/gas/mips/option-pic-1.s b/gas/testsuite/gas/mips/option-pic-1.s new file mode 100644 index 00000000000..6907049c3a5 --- /dev/null +++ b/gas/testsuite/gas/mips/option-pic-1.s @@ -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 diff --git a/gas/testsuite/gas/mips/option-pic-2.l b/gas/testsuite/gas/mips/option-pic-2.l new file mode 100644 index 00000000000..c6c5994fcae --- /dev/null +++ b/gas/testsuite/gas/mips/option-pic-2.l @@ -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' diff --git a/gas/testsuite/gas/mips/option-pic-2.s b/gas/testsuite/gas/mips/option-pic-2.s new file mode 100644 index 00000000000..9d3a5ea1084 --- /dev/null +++ b/gas/testsuite/gas/mips/option-pic-2.s @@ -0,0 +1,4 @@ + .abicalls + .option picfoo + .option pic0foo + .option pic0 foo