This is the mail archive of the binutils-cvs@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb] MIPS/GAS: Sanitize `.option picX' pseudo-op


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=41a1578ed17cdd7c01c38389ac7c714c4f15cbf8

commit 41a1578ed17cdd7c01c38389ac7c714c4f15cbf8
Author: Maciej W. Rozycki <macro@imgtec.com>
Date:   Sat Apr 9 21:35:50 2016 +0100

    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:
---
 gas/ChangeLog                         | 10 ++++++++++
 gas/config/tc-mips.c                  |  2 +-
 gas/testsuite/gas/mips/mips.exp       |  3 +++
 gas/testsuite/gas/mips/option-pic-1.d | 18 ++++++++++++++++++
 gas/testsuite/gas/mips/option-pic-1.s | 16 ++++++++++++++++
 gas/testsuite/gas/mips/option-pic-2.l |  4 ++++
 gas/testsuite/gas/mips/option-pic-2.s |  4 ++++
 7 files changed, 56 insertions(+), 1 deletion(-)

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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]