Hi Tixy,

I experienced another FAIL during test:

[11567.220477] Miscellaneous instructions
[11567.265397] ---------------------------------------------------------
[11567.342626] mrs      r0, cpsr        @ e10f0000
[11568.612656] FAIL: registers differ
[11568.653414] FAIL: Test mrs   r0, cpsr
[11568.695210] FAIL: Scenario 5
[11568.729709] initial_regs:
[11568.761083] r0  21522152 | r1  21522052 | r2  21522352 | r3  21522252
[11568.838301] r4  21522552 | r5  21522452 | r6  21522752 | r7  21522652
[11568.915526] r8  21522952 | r9  21522852 | r10 21522b52 | r11 21522a52
[11568.992748] r12 21522d52 | sp  ed343cf0 | lr  21522f52 | pc  bf11f590
[11569.069969] cpsr 58050013
[11569.101336] expected_regs:
[11569.133750] r0  58050013 | r1  21522052 | r2  21522352 | r3  21522252
[11569.210975] r4  21522552 | r5  21522452 | r6  21522752 | r7  21522652
[11569.288197] r8  21522952 | r9  21522852 | r10 21522b52 | r11 21522a52
[11569.365417] r12 21522d52 | sp  ed343cf0 | lr  21522f52 | pc  bf11f594
[11569.442634] cpsr 58050013
[11569.474010] result_regs:
[11569.504337] r0  58050113 | r1  21522052 | r2  21522352 | r3  21522252     
<--- see R0 in this line
[11569.581556] r4  21522552 | r5  21522452 | r6  21522752 | r7  21522652
[11569.658776] r8  21522952 | r9  21522852 | r10 21522b52 | r11 21522a52
[11569.736000] r12 21522d52 | sp  ed343cf0 | lr  21522f52 | pc  bf11f594
[11569.813222] cpsr 58050013
[11569.844593] mrspl    r7, cpsr        @ 510f7000
[11571.842652] mrs      r14, cpsr       @ e10fe000

The failure is raise when testing in "mrs r0, cpsr". The added bit is 
PSR_A_BIT, which
should be ignored.

So looks like this is also a problem in your test framework. If you don't have
enough time, you can give me some hints to deal with it.

On 2014/12/10 1:11, Jon Medhurst (Tixy) wrote:
> These have extra 'checker' functions associated with them so lets make
> sure those get covered by testing. As they may create uninitialised
> space on the stack we also update the test code to ensure such space is
> consistent between test runs. This is done by disabling interrupts in
> setup_test_context().
> 
> Signed-off-by: Jon Medhurst <t...@linaro.org>
> ---
> 
> Sorry for the extra noise, sent this new version to correct whitespace
> and spelling errors in previous one.
> 
>  arch/arm/probes/kprobes/test-arm.c   | 17 +++++++++++++++--
>  arch/arm/probes/kprobes/test-core.c  |  9 +++++++++
>  arch/arm/probes/kprobes/test-thumb.c | 12 ++++++++++++
>  3 files changed, 36 insertions(+), 2 deletions(-)
> 
> diff --git a/arch/arm/probes/kprobes/test-arm.c 
> b/arch/arm/probes/kprobes/test-arm.c
> index fdeb300..9b3b1b4 100644
> --- a/arch/arm/probes/kprobes/test-arm.c
> +++ b/arch/arm/probes/kprobes/test-arm.c
> @@ -12,6 +12,7 @@
>  #include <linux/module.h>
>  #include <asm/system_info.h>
>  #include <asm/opcodes.h>
> +#include <asm/probes.h>
>  
>  #include "test-core.h"
>  
> @@ -478,6 +479,7 @@ void kprobe_arm_test_cases(void)
>       TEST_RPR(  "strh        r",0, VAL1,", [r",1, 48,", -r",2, 24,"]")
>       TEST_RPR(  "streqh      r",14,VAL2,", [r",11,0, ", r",12, 48,"]")
>       TEST_UNSUPPORTED(  "streqh      r14, [r13, r12]")
> +     TEST_UNSUPPORTED(  "streqh      r14, [r12, r13]")
>       TEST_RPR(  "strh        r",1, VAL1,", [r",2, 24,", r",3,  48,"]!")
>       TEST_RPR(  "strneh      r",12,VAL2,", [r",11,48,", -r",10,24,"]!")
>       TEST_RPR(  "strh        r",2, VAL1,", [r",3, 24,"], r",4, 48,"")
> @@ -502,6 +504,9 @@ void kprobe_arm_test_cases(void)
>       TEST_RP(   "strplh      r",12,VAL2,", [r",11,24,", #-4]!")
>       TEST_RP(   "strh        r",2, VAL1,", [r",3, 24,"], #48")
>       TEST_RP(   "strh        r",10,VAL2,", [r",9, 64,"], #-48")
> +     TEST_RP(   "strh        r",3, VAL1,", [r",13,TEST_MEMORY_SIZE,", 
> #-"__stringify(MAX_STACK_SIZE)"]!")
> +     TEST_UNSUPPORTED("strh r3, [r13, #-"__stringify(MAX_STACK_SIZE)"-8]!")
> +     TEST_RP(   "strh        r",4, VAL1,", [r",14,TEST_MEMORY_SIZE,", 
> #-"__stringify(MAX_STACK_SIZE)"-8]!")
>       TEST_UNSUPPORTED(__inst_arm(0xe1efc3b0) "       @ strh r12, [pc, #48]!")
>       TEST_UNSUPPORTED(__inst_arm(0xe0c9f3b0) "       @ strh pc, [r9], #48")
>  
> @@ -568,6 +573,7 @@ void kprobe_arm_test_cases(void)
>       TEST_RPR(  "strd        r",0, VAL1,", [r",1, 48,", -r",2,24,"]")
>       TEST_RPR(  "strccd      r",8, VAL2,", [r",11,0, ", r",12,48,"]")
>       TEST_UNSUPPORTED(  "strccd r8, [r13, r12]")
> +     TEST_UNSUPPORTED(  "strccd r8, [r12, r13]")
>       TEST_RPR(  "strd        r",4, VAL1,", [r",2, 24,", r",3, 48,"]!")
>       TEST_RPR(  "strcsd      r",12,VAL2,", [r",11,48,", -r",10,24,"]!")
>       TEST_RPR(  "strd        r",2, VAL1,", [r",5, 24,"], r",4,48,"")
> @@ -591,6 +597,9 @@ void kprobe_arm_test_cases(void)
>       TEST_RP(   "strvcd      r",12,VAL2,", [r",11,24,", #-16]!")
>       TEST_RP(   "strd        r",2, VAL1,", [r",4, 24,"], #48")
>       TEST_RP(   "strd        r",10,VAL2,", [r",9, 64,"], #-48")
> +     TEST_RP(   "strd        r",6, VAL1,", [r",13,TEST_MEMORY_SIZE,", 
> #-"__stringify(MAX_STACK_SIZE)"]!")
> +     TEST_UNSUPPORTED("strd r6, [r13, #-"__stringify(MAX_STACK_SIZE)"-8]!")
> +     TEST_RP(   "strd        r",4, VAL1,", [r",12,TEST_MEMORY_SIZE,", 
> #-"__stringify(MAX_STACK_SIZE)"-8]!")
>       TEST_UNSUPPORTED(__inst_arm(0xe1efc3f0) "       @ strd r12, [pc, #48]!")
>  
>       TEST_P(    "ldrd        r0, [r",0, 24,", #-8]")
> @@ -639,16 +648,20 @@ void kprobe_arm_test_cases(void)
>       TEST_RP( "str"byte"     r",12,VAL2,", [r",11,24,", #-4]!")              
> \
>       TEST_RP( "str"byte"     r",2, VAL1,", [r",3, 24,"], #48")               
> \
>       TEST_RP( "str"byte"     r",10,VAL2,", [r",9, 64,"], #-48")              
> \
> +     TEST_RP( "str"byte"     r",3, VAL1,", [r",13,TEST_MEMORY_SIZE,", 
> #-"__stringify(MAX_STACK_SIZE)"]!") \
> +     TEST_UNSUPPORTED("str"byte" r3, [r13, 
> #-"__stringify(MAX_STACK_SIZE)"-8]!")                             \
> +     TEST_RP( "str"byte"     r",4, VAL1,", [r",10,TEST_MEMORY_SIZE,", 
> #-"__stringify(MAX_STACK_SIZE)"-8]!") \
>       TEST_RPR("str"byte"     r",0, VAL1,", [r",1, 48,", -r",2, 24,"]")       
> \
>       TEST_RPR("str"byte"     r",14,VAL2,", [r",11,0, ", r",12, 48,"]")       
> \
> -     TEST_UNSUPPORTED("str"byte" r14, [r13, r12]")   \
> +     TEST_UNSUPPORTED("str"byte" r14, [r13, r12]")                           
> \
> +     TEST_UNSUPPORTED("str"byte" r14, [r12, r13]")                           
> \
>       TEST_RPR("str"byte"     r",1, VAL1,", [r",2, 24,", r",3,  48,"]!")      
> \
>       TEST_RPR("str"byte"     r",12,VAL2,", [r",11,48,", -r",10,24,"]!")      
> \
>       TEST_RPR("str"byte"     r",2, VAL1,", [r",3, 24,"], r",4, 48,"")        
> \
>       TEST_RPR("str"byte"     r",10,VAL2,", [r",9, 48,"], -r",11,24,"")       
> \
>       TEST_RPR("str"byte"     r",0, VAL1,", [r",1, 24,", r",2,  32,", asl 
> #1]")\
>       TEST_RPR("str"byte"     r",14,VAL2,", [r",11,0, ", r",12, 32,", lsr 
> #2]")\
> -     TEST_UNSUPPORTED("str"byte"     r14, [r13, r12, lsr #2]")\
> +     TEST_UNSUPPORTED("str"byte"     r14, [r13, r12, lsr #2]")               
> \
>       TEST_RPR("str"byte"     r",1, VAL1,", [r",2, 24,", r",3,  32,", asr 
> #3]!")\
>       TEST_RPR("str"byte"     r",12,VAL2,", [r",11,24,", r",10, 4,", ror 
> #31]!")\
>       TEST_P(  "ldr"byte"     r0, [r",0,  24,", #-2]")                        
> \
> diff --git a/arch/arm/probes/kprobes/test-core.c 
> b/arch/arm/probes/kprobes/test-core.c
> index 7ab633d..7c5ddd5 100644
> --- a/arch/arm/probes/kprobes/test-core.c
> +++ b/arch/arm/probes/kprobes/test-core.c
> @@ -1196,6 +1196,13 @@ static void setup_test_context(struct pt_regs *regs)
>                       regs->uregs[arg->reg] =
>                               (unsigned long)current_stack + arg->val;
>                       memory_needs_checking = true;
> +                     /*
> +                      * Test memory at an address below SP is in danger of
> +                      * being altered by an interrupt occurring and pushing
> +                      * data onto the stack. Disable interrupts to stop this.
> +                      */
> +                     if (arg->reg == 13)
> +                             regs->ARM_cpsr |= PSR_I_BIT;
>                       break;
>               }
>               case ARG_TYPE_MEM: {
> @@ -1272,6 +1279,8 @@ test_after_pre_handler(struct kprobe *p, struct pt_regs 
> *regs)
>  
>       /* Undo any changes done to SP by the test case */
>       regs->ARM_sp = (unsigned long)current_stack;
> +     /* Enable interrupts in case setup_test_context disabled them */
> +     regs->ARM_cpsr &= ~PSR_I_BIT;
>  
>       container_of(p, struct test_probe, kprobe)->hit = test_instance;
>       return 0;
> diff --git a/arch/arm/probes/kprobes/test-thumb.c 
> b/arch/arm/probes/kprobes/test-thumb.c
> index 6c6e9a9..e8cf193 100644
> --- a/arch/arm/probes/kprobes/test-thumb.c
> +++ b/arch/arm/probes/kprobes/test-thumb.c
> @@ -11,6 +11,7 @@
>  #include <linux/kernel.h>
>  #include <linux/module.h>
>  #include <asm/opcodes.h>
> +#include <asm/probes.h>
>  
>  #include "test-core.h"
>  
> @@ -416,6 +417,9 @@ void kprobe_thumb32_test_cases(void)
>       TEST_RR( "strd  r",14,VAL2,", r",12,VAL1,", [sp, #16]!")
>       TEST_RRP("strd  r",1, VAL1,", r",0, VAL2,", [r",7, 24,"], #16")
>       TEST_RR( "strd  r",7, VAL2,", r",8, VAL1,", [sp], #-16")
> +     TEST_RRP("strd  r",6, VAL1,", r",7, VAL2,", [r",13, TEST_MEMORY_SIZE,", 
> #-"__stringify(MAX_STACK_SIZE)"]!")
> +     TEST_UNSUPPORTED("strd r6, r7, [r13, 
> #-"__stringify(MAX_STACK_SIZE)"-8]!")
> +     TEST_RRP("strd  r",4, VAL1,", r",5, VAL2,", [r",14, TEST_MEMORY_SIZE,", 
> #-"__stringify(MAX_STACK_SIZE)"-8]!")
>       TEST_UNSUPPORTED(__inst_thumb32(0xe9efec04) "   @ strd  r14, r12, [pc, 
> #16]!")
>       TEST_UNSUPPORTED(__inst_thumb32(0xe8efec04) "   @ strd  r14, r12, [pc], 
> #16")
>  
> @@ -821,14 +825,22 @@ CONDITION_INSTRUCTIONS(22,
>       TEST_RP( "str"size"     r",14,VAL2,", [r",1, 256,  ", #-128]!")         
> \
>       TEST_RPR("str"size".w   r",0, VAL1,", [r",1, 0,", r",2, 4,"]")          
> \
>       TEST_RPR("str"size"     r",14,VAL2,", [r",10,0,", r",11,4,", lsl #1]")  
> \
> +     TEST_UNSUPPORTED("str"size"     r0, [r13, r1]")                         
> \
>       TEST_R(  "str"size".w   r",7, VAL1,", [sp, #24]")                       
> \
>       TEST_RP( "str"size".w   r",0, VAL2,", [r",0,0, "]")                     
> \
> +     TEST_RP( "str"size"     r",6, VAL1,", [r",13, TEST_MEMORY_SIZE,", 
> #-"__stringify(MAX_STACK_SIZE)"]!") \
> +     TEST_UNSUPPORTED("str"size"     r6, [r13, 
> #-"__stringify(MAX_STACK_SIZE)"-8]!")                 \
> +     TEST_RP( "str"size"     r",4, VAL2,", [r",12, TEST_MEMORY_SIZE,", 
> #-"__stringify(MAX_STACK_SIZE)"-8]!") \
>       TEST_UNSUPPORTED("str"size"t    r0, [r1, #4]")
>  
>       SINGLE_STORE("b")
>       SINGLE_STORE("h")
>       SINGLE_STORE("")
>  
> +     TEST_UNSUPPORTED(__inst_thumb32(0xf801000d) "   @ strb  r0, [r1, r13]")
> +     TEST_UNSUPPORTED(__inst_thumb32(0xf821000d) "   @ strh  r0, [r1, r13]")
> +     TEST_UNSUPPORTED(__inst_thumb32(0xf841000d) "   @ str   r0, [r1, r13]")
> +
>       TEST("str       sp, [sp]")
>       TEST_UNSUPPORTED(__inst_thumb32(0xf8cfe000) "   @ str   r14, [pc]")
>       TEST_UNSUPPORTED(__inst_thumb32(0xf8cef000) "   @ str   pc, [r14]")
> 


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to