169 lines
6.6 KiB
Plaintext
169 lines
6.6 KiB
Plaintext
*** 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
|