[2/3] MIPS/GCC/test: Implement `-mcode-readable=yes' option test
diff mbox

Message ID alpine.DEB.2.20.17.1611110740390.10580@tp.orcam.me.uk
State Accepted
Headers show

Commit Message

Maciej W. Rozycki Nov. 11, 2016, 10:37 a.m. UTC
Add an assembly snippet for `mips_option_tests' to verify that 
instructions executed on the target board may freely access executable 
sections.

Depending on target board's execution environment, which may map 
executable pages with the Read Inhibit (RI) bit set in the TLB or may 
have a split SPRAM memory which directs instruction fetch and data read 
accesses to different parts of the memory, code may or may not be able 
to access parts of executable sections as data.

Therefore verify that data reads from executable sections both complete 
successfully and that correct data is retrieved (though with a small 
probability of a false positive).  Use MIPS16 execution to access data 
required as the `-mcode-readable=yes' option only affects MIPS16 code 
generation anyway, which however simplifies handling a little bit as 
PC-relative addressing can be used to calculate the location of data 
required, avoiding any issues if using the PIE or PIC code generation 
model.

Use the BREAK instruction to trap on a comparison check failure so that 
the effect is immediate and there is no need to wait for the test 
program to time out; resort to an infinite loop though in the unlikely 
event a Bp exception handler resumes execution beyond the trapping 
instruction.

NB there is no need to explicitly align data emitted with the `.word' 
pseudo-op, which is self-aligning.

	gcc/testsuite/
	* gcc.target/mips/mips.exp (mips_option_tests): Add 
	`-mcode-readable=yes' array element.
---
 OK to apply?

  Maciej

gcc-mips-test-option-tests-mcode-readable-yes.diff

Comments

Matthew Fortune Nov. 14, 2016, 10:39 a.m. UTC | #1
Maciej Rozycki <Maciej.Rozycki@imgtec.com> writes:
> 	gcc/testsuite/
> 	* gcc.target/mips/mips.exp (mips_option_tests): Add
> 	`-mcode-readable=yes' array element.
> ---
>  OK to apply?

OK, thanks.

Matthew

Patch
diff mbox

Index: gcc/gcc/testsuite/gcc.target/mips/mips.exp
===================================================================
--- gcc.orig/gcc/testsuite/gcc.target/mips/mips.exp	2016-11-09 18:56:48.283197623 +0000
+++ gcc/gcc/testsuite/gcc.target/mips/mips.exp	2016-11-11 08:49:53.345912380 +0000
@@ -401,6 +401,27 @@  set mips_option_tests(-mdspr2) {
     .set dspr2
     prepend $2,$3,11
 }
+set mips_option_tests(-mcode-readable=yes) {
+    move $2,$31
+    bal 1f
+    .set mips16
+    la $3,0f
+    lw $3,($3)
+    jr $31
+0:
+    .word 0xfacebead
+    .set nomips16
+    .align 2
+1:
+    ori $3,$31,1
+    jalr $3
+    li $4,0xfacebead
+    beq $3,$4,2f
+    break
+    b .
+2:
+    move $31,$2
+}
 
 # Canonicalize command-line option OPTION.
 proc mips_canonicalize_option { option } {