aboutsummaryrefslogtreecommitdiff
path: root/gas
diff options
context:
space:
mode:
authorMaciej W. Rozycki <macro@imgtec.com>2016-04-09 21:35:50 +0100
committerMaciej W. Rozycki <macro@imgtec.com>2016-04-09 21:35:50 +0100
commit41a1578ed17cdd7c01c38389ac7c714c4f15cbf8 (patch)
tree945bc1648562062c921979ec450d66d7247eb957 /gas
parent668c5ebc0937ab5288d831d65de3057e56e2763f (diff)
downloadgdb-41a1578ed17cdd7c01c38389ac7c714c4f15cbf8.zip
gdb-41a1578ed17cdd7c01c38389ac7c714c4f15cbf8.tar.gz
gdb-41a1578ed17cdd7c01c38389ac7c714c4f15cbf8.tar.bz2
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.
Diffstat (limited to 'gas')
-rw-r--r--gas/ChangeLog10
-rw-r--r--gas/config/tc-mips.c2
-rw-r--r--gas/testsuite/gas/mips/mips.exp3
-rw-r--r--gas/testsuite/gas/mips/option-pic-1.d18
-rw-r--r--gas/testsuite/gas/mips/option-pic-1.s16
-rw-r--r--gas/testsuite/gas/mips/option-pic-2.l4
-rw-r--r--gas/testsuite/gas/mips/option-pic-2.s4
7 files changed, 56 insertions, 1 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index da02325..eefeb2f 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,5 +1,15 @@
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>
+
* config/tc-mips.c (s_option): Reject `.option picX' if VxWorks
PIC.
* testsuite/gas/mips/option-pic-vxworks-1.l: New list test.
diff --git a/gas/config/tc-mips.c b/gas/config/tc-mips.c
index 7017444..db3ec67 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 02f76cc..4d770cb 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 0000000..da32af6
--- /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 0000000..6907049
--- /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 0000000..c6c5994
--- /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 0000000..9d3a5ea
--- /dev/null
+++ b/gas/testsuite/gas/mips/option-pic-2.s
@@ -0,0 +1,4 @@
+ .abicalls
+ .option picfoo
+ .option pic0foo
+ .option pic0 foo