blob: 53dd40bf01b2f60f352d67ee011eb1d10a34e155 [file] [log] [blame] [edit]
*** Variables ***
${initial_pc} 0x1000
${initial_sp} 0x3000
*** Keywords ***
Create Machine
Execute Command using sysbus
Execute Command mach create "risc-v"
Execute Command machine LoadPlatformDescriptionFromString "clint: IRQControllers.CoreLevelInterruptor @ sysbus 0x44000000 { frequency: 66000000 }"
Execute Command machine LoadPlatformDescriptionFromString "cpu: CPU.RiscV64 @ sysbus { timeProvider: clint; cpuType: \\"rv64gc_V\\" }"
Execute Command machine LoadPlatformDescriptionFromString "mem: Memory.MappedMemory @ sysbus 0x1000 { size: 0x40000 }"
Execute Command cpu PC ${initial_pc}
Execute Command cpu SP ${initial_sp}
Execute Command cpu AddPreStackAccessHook 'cpu.Log(LogLevel.Info, "StackAccess: 0x{0:X}, {1}, {2}", address, width, is_write)'
Create Log Tester 0
Read Hook Should Have Fired At
[Arguments] ${address} ${width}
${address}= Convert To Hex ${address} prefix=0x
Wait For Log Entry cpu: StackAccess: ${address}, ${width}, False
Write Hook Should Have Fired At
[Arguments] ${address} ${width}
${address}= Convert To Hex ${address} prefix=0x
Wait For Log Entry cpu: StackAccess: ${address}, ${width}, True
Execute Instruction
[Arguments] ${instruction}
Execute Command cpu AssembleBlock ${initial_pc} "${instruction}"
Execute Command cpu Step
*** Test Cases ***
Should Trigger Stack Access Hook On Lb
Create Machine
Execute Instruction lb a0, 0(sp)
Read Hook Should Have Fired At ${initial_sp} 8
Should Trigger Stack Access Hook At Correct Offset
Create Machine
Execute Instruction lb a0, 64(sp)
Read Hook Should Have Fired At ${${initial_sp} + 64} 8
Should Trigger Stack Access Hook On Lh
Create Machine
Execute Instruction lh a0, 0(sp)
Read Hook Should Have Fired At ${initial_sp} 16
Should Trigger Stack Access Hook On Lw
Create Machine
Execute Instruction lw a0, 0(sp)
Read Hook Should Have Fired At ${initial_sp} 32
Should Trigger Stack Access Hook On Ld
Create Machine
Execute Instruction ld a0, 0(sp)
Read Hook Should Have Fired At ${initial_sp} 64
Should Trigger Stack Access Hook On Sb
Create Machine
Execute Instruction sb a0, 0(sp)
Write Hook Should Have Fired At ${initial_sp} 8
Should Trigger Stack Access Hook On Sh
Create Machine
Execute Instruction sh a0, 0(sp)
Write Hook Should Have Fired At ${initial_sp} 16
Should Trigger Stack Access Hook On Sw
Create Machine
Execute Instruction sw a0, 0(sp)
Write Hook Should Have Fired At ${initial_sp} 32
Should Trigger Stack Access Hook On Sd
Create Machine
Execute Instruction sd a0, 0(sp)
Write Hook Should Have Fired At ${initial_sp} 64
Should Trigger Stack Access Hook On Lr
Create Machine
Execute Instruction lr.w a0, 0(sp)
Read Hook Should Have Fired At ${initial_sp} 32
Should Trigger Stack Access Hook On Sc
Create Machine
Execute Instruction sc.w a1, a0, 0(sp)
Write Hook Should Have Fired At ${initial_sp} 32
Should Trigger Stack Access Hook On Fld
Create Machine
Execute Instruction fld f0, 0(sp)
Read Hook Should Have Fired At ${initial_sp} 64
Should Trigger Stack Access Hook On Fsd
Create Machine
Execute Instruction fsd f0, 0(sp)
Write Hook Should Have Fired At ${initial_sp} 64
# Unit strided
Should Trigger Stack Access Hook On Vle8
Create Machine
Execute Command cpu AssembleBlock ${initial_pc} "vsetivli t0, 8, e8,m1,ta,ma; vle8.v v0, 0(sp)"
Execute Command cpu Step 2
FOR ${counter} IN RANGE 0 7
Read Hook Should Have Fired At ${${initial_sp}+${counter}} 8
END
Should Trigger Stack Access Hook On Vle64
Create Machine
Execute Command cpu AssembleBlock ${initial_pc} "vsetivli t0, 8, e64,m1,ta,ma; vle64.v v0, 0(sp)"
Execute Command cpu Step 2
FOR ${counter} IN RANGE 0 7
Read Hook Should Have Fired At ${${initial_sp}+(${counter}*8)} 64
END
Should Trigger Stack Access Hook On Vse8
Create Machine
Execute Command cpu AssembleBlock ${initial_pc} "vsetivli t0, 8, e8,m1,ta,ma; vse8.v v0, 0(sp)"
Execute Command cpu Step 2
FOR ${counter} IN RANGE 0 7
Write Hook Should Have Fired At ${${initial_sp}+${counter}} 8
END
Should Trigger Stack Access Hook On Vse64
Create Machine
Execute Command cpu AssembleBlock ${initial_pc} "vsetivli t0, 8, e64,m1,ta,ma; vse64.v v0, 0(sp)"
Execute Command cpu Step 2
FOR ${counter} IN RANGE 0 7
Write Hook Should Have Fired At ${${initial_sp}+${counter}*8} 64
END
# strided
Should Trigger Stack Access Hook On Vlse8
Create Machine
Execute Command cpu AssembleBlock ${initial_pc} "vsetivli t0, 8, e8,m1,ta,ma; li a0, 16; vlse8.v v0, 0(sp), a0"
Execute Command cpu Step 3
FOR ${counter} IN RANGE 0 7
Read Hook Should Have Fired At ${${initial_sp}+${counter}*16} 8
END
Should Trigger Stack Access Hook On Vlse64
Create Machine
Execute Command cpu AssembleBlock ${initial_pc} "vsetivli t0, 8, e64,m1,ta,ma; li a0, 128; vlse64.v v0, 0(sp), a0"
Execute Command cpu Step 3
FOR ${counter} IN RANGE 0 7
Read Hook Should Have Fired At ${${initial_sp}+${counter}*128} 64
END
Should Trigger Stack Access Hook On Vsse8
Create Machine
Execute Command cpu AssembleBlock ${initial_pc} "vsetivli t0, 8, e8,m1,ta,ma; li a0, 16; vsse8.v v0, 0(sp), a0"
Execute Command cpu Step 3
FOR ${counter} IN RANGE 0 7
Write Hook Should Have Fired At ${${initial_sp}+${counter}*16} 8
END
Should Trigger Stack Access Hook On Vsse64
Create Machine
Execute Command cpu AssembleBlock ${initial_pc} "vsetivli t0, 8, e64,m1,ta,ma; li a0, 128; vsse64.v v0, 0(sp), a0"
Execute Command cpu Step 3
FOR ${counter} IN RANGE 0 7
Write Hook Should Have Fired At ${${initial_sp}+${counter}*128} 64
END