*** Variables *** ${bin_out_signature}= ReTrace\x04 ${triple_and_model}= riscv32 rv32imacv *** Keywords *** Create Machine Versatile Execute Command using sysbus Execute Command include @scripts/single-node/versatile.resc Execute Command cpu PerformanceInMips 1 # the value of quantum is selected here to generate several blocks # of multiple instructions to check if the execution tracer can # disassemble blocks correctly Execute Command emulation SetGlobalQuantum "0.000004" Create Machine RISC-V 64-bit [Arguments] ${pc_hex} ${memory_per_cpu} Execute Command mach create Execute Command machine LoadPlatformDescriptionFromString "cpu: CPU.RiscV64 @ sysbus { cpuType: \\"rv64imacv\\"; timeProvider: empty }" IF ${memory_per_cpu} Execute Command machine LoadPlatformDescriptionFromString "mem: Memory.MappedMemory @ sysbus new Bus.BusPointRegistration { address: ${pc_hex}; cpu: cpu } { size: 0x40000 }" ELSE Execute Command machine LoadPlatformDescriptionFromString "mem: Memory.MappedMemory @ sysbus ${pc_hex} { size: 0x40000 }" END Execute Command sysbus.cpu PC ${pc_hex} Create Machine RISC-V 32-bit [Arguments] ${pc_hex} ${memory_per_cpu} Execute Command mach create Execute Command machine LoadPlatformDescriptionFromString "cpu: CPU.RiscV32 @ sysbus { cpuType: \\"rv32imacv\\"; timeProvider: empty }" IF ${memory_per_cpu} Execute Command machine LoadPlatformDescriptionFromString "mem: Memory.MappedMemory @ sysbus new Bus.BusPointRegistration { address: ${pc_hex}; cpu: cpu } { size: 0x40000 }" ELSE Execute Command machine LoadPlatformDescriptionFromString "mem: Memory.MappedMemory @ sysbus ${pc_hex} { size: 0x40000 }" END Trace The Execution On The Versatile Platform [Arguments] ${trace_format} Create Machine Versatile ${trace_file}= Allocate Temporary File Execute Command cpu CreateExecutionTracing "tracer" @${trace_file} ${trace_format} # exactly the amount of virtual time to execute 16 instructions Execute Command emulation RunFor "0.000016" Execute Command cpu DisableExecutionTracing ${output}= Get File ${trace_file} ${output_lines}= Split To Lines ${output} RETURN ${output_lines} Run And Trace Simple Program On RISC-V [Arguments] ${pc_start_hex} ${trace_format} ${is_binary} ${trace_file}= Allocate Temporary File Execute Command sysbus.cpu CreateExecutionTracing "tracer" "${trace_file}" ${trace_format} ${is_binary} ${pc}= Convert To Integer ${pc_start_hex} Execute Command sysbus.cpu PC ${pc} Execute Command sysbus WriteDoubleWord ${pc+0} 0x00000013 cpu # nop Execute Command sysbus WriteWord ${pc+4} 0x0001 cpu # nop Execute Command sysbus WriteDoubleWord ${pc+6} 0x00310093 cpu # addi x1, x2, 003 Execute Command sysbus.cpu Step 3 Execute Command sysbus.cpu DisableExecutionTracing IF ${is_binary} ${output}= Get Binary File ${trace_file} RETURN ${output} ELSE ${output}= Get File ${trace_file} ${output_lines}= Split To Lines ${output} RETURN ${output_lines} END Run RISC-V Program With Vcfg Instruction [Arguments] ${pc_hex} Execute Command sysbus.cpu MSTATUS 0x600 ${pc}= Convert To Integer ${pc_hex} Execute Command sysbus.cpu PC ${pc} Execute Command sysbus WriteDoubleWord ${pc+0} 0x00000013 # nop Execute Command sysbus WriteWord ${pc+4} 0x0001 # nop Execute Command sysbus WriteDoubleWord ${pc+6} 0x04007057 # vsetvli zero, zero, e8, m1, ta, mu Execute Command sysbus.cpu Step 3 Run RISC-V Program With Memory Access [Arguments] ${pc_hex} ${pc}= Convert To Integer ${pc_hex} Execute Command sysbus.cpu PC ${pc} Execute Command sysbus WriteDoubleWord ${pc+0} 0x305B7 cpu # lui a1, 48 Execute Command sysbus WriteWord ${pc+4} 0xe537 cpu # lui a0, 14 Execute Command sysbus WriteDoubleWord ${pc+8} 0xb52023 cpu # sw a1, 0(a0) Execute Command sysbus.cpu Step 3 Should Be Equal As Bytes [Arguments] ${bytes} ${str} ${str_bytes} Convert To Bytes ${str} Should Be Equal ${bytes} ${str_bytes} formatter=repr Should Dump 64-bit PCs On RISC-V [Arguments] ${memory_per_cpu} Create Machine RISC-V 64-bit 0x2000000000 ${memory_per_cpu} ${pcs}= Run And Trace Simple Program On RISC-V 0x2000000000 PC False Should Contain ${pcs}[0] 0x2000000000 Should Contain ${pcs}[1] 0x2000000004 Should Contain ${pcs}[2] 0x2000000006 Should Dump Disassembly On RISC-V [Arguments] ${memory_per_cpu} Create Machine RISC-V 32-bit 0x2000 ${memory_per_cpu} ${trace}= Run And Trace Simple Program On RISC-V 0x2000 Disassembly False Should Contain ${trace}[0] nop Should Contain ${trace}[1] nop Should Contain ${trace}[2] addi Should Be Able To Add Memory Accesses To The Trace On RISC-V [Arguments] ${memory_per_cpu} Create Machine RISC-V 32-bit 0x2000 ${memory_per_cpu} ${trace_filepath}= Allocate Temporary File Execute Command sysbus.cpu CreateExecutionTracing "tracer" "${trace_filepath}" Disassembly Execute Command tracer TrackMemoryAccesses Run RISC-V Program With Memory Access 0x2000 Execute Command sysbus.cpu DisableExecutionTracing ${output_file}= Get File ${trace_filepath} ${output_lines}= Split To Lines ${output_file} Should Contain ${output_lines}[0] lui a1, 48 Should Contain ${output_lines}[1] lui a0, 14 Should Contain ${output_lines}[2] sw a1, 0(a0) Should Contain ${output_lines}[3] MemoryWrite with address 0xE000 Should Be Able To Add Memory Accesses To The Trace In Binary Format On RISC-V [Arguments] ${memory_per_cpu} Create Machine RISC-V 32-bit 0x2000 ${memory_per_cpu} ${trace_filepath}= Allocate Temporary File Execute Command sysbus.cpu CreateExecutionTracing "tracer" "${trace_filepath}" PCAndOpcode True Execute Command tracer TrackMemoryAccesses Run RISC-V Program With Memory Access 0x2000 Execute Command sysbus.cpu DisableExecutionTracing ${output_file}= Get Binary File ${trace_filepath} Length Should Be ${output_file} 85 Should Be Equal As Bytes ${output_file}[00:08] ${bin_out_signature} # [0]: pc_width; [1]: include_opcode Should Be Equal As Bytes ${output_file}[08:10] \x04\x01 # [0]: uses_thumb_flag; [1]: triple_and_model_length; Should Be Equal As Bytes ${output_file}[10:12] \x00\x11 Should Be Equal As Bytes ${output_file}[12:29] ${triple_and_model} # [0:4]: pc; [4]: opcode_length; [5:9]: opcode; [10]: additional_data_type = None Should Be Equal As Bytes ${output_file}[29:39] \x00\x20\x00\x00\x04\xb7\x05\x03\x00\x00 Should Be Equal As Bytes ${output_file}[39:49] \x04\x20\x00\x00\x04\x37\xe5\x00\x00\x00 # [0:4]: pc; [4]: opcode_length; [5:9]: opcode; [10]: additional_data_type = MemoryAccess Should Be Equal As Bytes ${output_file}[49:59] \x08\x20\x00\x00\x04\x23\x20\xb5\x00\x01 # [0]: access_type; [1-9]: access_address Should Be Equal As Bytes ${output_file}[59:69] \x03\x00\xe0\x00\x00\x00\x00\x00\x00\x00 # [0-7]: access_value Should Be Equal As Bytes ${output_file}[69:77] \x00\x03\x00\x00\x00\x00\x00\x00 # [0-7]: physical_access_address Should Be Equal As Bytes ${output_file}[77:85] \xe0\x00\x00\x00\x00\x00\x00\x00 Should Dump 64-bit PCs As Binary On RISC-V [Arguments] ${memory_per_cpu} Create Machine RISC-V 64-bit 0x2000000000 ${memory_per_cpu} ${trace}= Run And Trace Simple Program On RISC-V 0x2000000000 PC True Length Should Be ${trace} 37 Should Be Equal As Bytes ${trace}[00:08] ${bin_out_signature} Should Be Equal As Bytes ${trace}[08:10] \x08\x00 Should Be Equal As Bytes ${trace}[10:19] \x00\x00\x00\x00\x20\x00\x00\x00\x00 Should Be Equal As Bytes ${trace}[19:28] \x04\x00\x00\x00\x20\x00\x00\x00\x00 Should Be Equal As Bytes ${trace}[28:37] \x06\x00\x00\x00\x20\x00\x00\x00\x00 Should Dump 32-bit PCs As Binary On RISC-V [Arguments] ${memory_per_cpu} Create Machine RISC-V 32-bit 0x2000 ${memory_per_cpu} ${trace}= Run And Trace Simple Program On RISC-V 0x2000 PC True Length Should Be ${trace} 25 Should Be Equal As Bytes ${trace}[00:08] ${bin_out_signature} Should Be Equal As Bytes ${trace}[08:10] \x04\x00 Should Be Equal As Bytes ${trace}[10:15] \x00\x20\x00\x00\x00 Should Be Equal As Bytes ${trace}[15:20] \x04\x20\x00\x00\x00 Should Be Equal As Bytes ${trace}[20:25] \x06\x20\x00\x00\x00 Should Dump Opcodes As Binary On RISC-V [Arguments] ${memory_per_cpu} Create Machine RISC-V 32-bit 0x2000 ${memory_per_cpu} ${trace}= Run And Trace Simple Program On RISC-V 0x2000 Opcode True Length Should Be ${trace} 45 Should Be Equal As Bytes ${trace}[00:08] ${bin_out_signature} Should Be Equal As Bytes ${trace}[08:10] \x00\x01 # [0]: uses_thumb_flag; [1]: triple_and_model_length; Should Be Equal As Bytes ${trace}[10:12] \x00\x11 Should Be Equal As Bytes ${trace}[12:29] ${triple_and_model} Should Be Equal As Bytes ${trace}[29:35] \x04\x13\x00\x00\x00\x00 Should Be Equal As Bytes ${trace}[35:39] \x02\x01\x00\x00 Should Be Equal As Bytes ${trace}[39:45] \x04\x93\x00\x31\x00\x00 Should Dump PCs And Opcodes As Binary On RISC-V [Arguments] ${memory_per_cpu} Create Machine RISC-V 32-bit 0x2000 ${memory_per_cpu} ${trace}= Run And Trace Simple Program On RISC-V 0x2000 PCAndOpcode True Length Should Be ${trace} 57 Should Be Equal As Bytes ${trace}[00:08] ${bin_out_signature} Should Be Equal As Bytes ${trace}[08:10] \x04\x01 # [0]: uses_thumb_flag; [1]: triple_and_model_length; Should Be Equal As Bytes ${trace}[10:12] \x00\x11 Should Be Equal As Bytes ${trace}[12:29] ${triple_and_model} Should Be Equal As Bytes ${trace}[29:33] \x00\x20\x00\x00 Should Be Equal As Bytes ${trace}[33:39] \x04\x13\x00\x00\x00\x00 Should Be Equal As Bytes ${trace}[39:43] \x04\x20\x00\x00 Should Be Equal As Bytes ${trace}[43:47] \x02\x01\x00\x00 Should Be Equal As Bytes ${trace}[47:51] \x06\x20\x00\x00 Should Be Equal As Bytes ${trace}[51:57] \x04\x93\x00\x31\x00\x00 Should Trace Consecutive Blocks On RISC-V [Arguments] ${memory_per_cpu} Create Machine RISC-V 32-bit 0x0 ${memory_per_cpu} Execute Command sysbus.cpu ExecutionMode Continuous # "li x1, 0" Execute Command sysbus WriteDoubleWord 0x200 0x93 cpu # "li x2, 10" Execute Command sysbus WriteDoubleWord 0x204 0x00a00113 cpu # "addi x1, x1, 1" Execute Command sysbus WriteDoubleWord 0x208 0x00108093 cpu # "bne x1, x2, 0x214" Execute Command sysbus WriteDoubleWord 0x20C 0x00209463 cpu # "j 0x300" Execute Command sysbus WriteDoubleWord 0x210 0x0f00006f cpu # "c.nop"s (compressed) Execute Command sysbus WriteDoubleWord 0x214 0x01 cpu Execute Command sysbus WriteDoubleWord 0x216 0x01 cpu # "nop"s Execute Command sysbus WriteDoubleWord 0x218 0x13 cpu Execute Command sysbus WriteDoubleWord 0x21C 0x13 cpu Execute Command sysbus WriteDoubleWord 0x220 0x13 cpu Execute Command sysbus WriteDoubleWord 0x224 0x13 cpu Execute Command sysbus WriteDoubleWord 0x228 0x13 cpu Execute Command sysbus WriteDoubleWord 0x22C 0x13 cpu Execute Command sysbus WriteDoubleWord 0x230 0x13 cpu Execute Command sysbus WriteDoubleWord 0x234 0x13 cpu Execute Command sysbus WriteDoubleWord 0x238 0x13 cpu Execute Command sysbus WriteDoubleWord 0x23C 0x13 cpu # "j +4" - just to break the block # this is to test the block chaining mechanism Execute Command sysbus WriteDoubleWord 0x240 0x0040006f cpu # "nop"s Execute Command sysbus WriteDoubleWord 0x244 0x13 cpu Execute Command sysbus WriteDoubleWord 0x248 0x13 cpu Execute Command sysbus WriteDoubleWord 0x24C 0x13 cpu Execute Command sysbus WriteDoubleWord 0x250 0x13 cpu Execute Command sysbus WriteDoubleWord 0x254 0x13 cpu Execute Command sysbus WriteDoubleWord 0x258 0x13 cpu Execute Command sysbus WriteDoubleWord 0x25C 0x13 cpu Execute Command sysbus WriteDoubleWord 0x260 0x13 cpu Execute Command sysbus WriteDoubleWord 0x264 0x13 cpu Execute Command sysbus WriteDoubleWord 0x268 0x13 cpu Execute Command sysbus WriteDoubleWord 0x26C 0x13 cpu # "j +4" - just to break the block Execute Command sysbus WriteDoubleWord 0x270 0x0040006f cpu # "nop"s Execute Command sysbus WriteDoubleWord 0x274 0x13 cpu Execute Command sysbus WriteDoubleWord 0x278 0x13 cpu Execute Command sysbus WriteDoubleWord 0x27C 0x13 cpu Execute Command sysbus WriteDoubleWord 0x280 0x13 cpu Execute Command sysbus WriteDoubleWord 0x284 0x13 cpu Execute Command sysbus WriteDoubleWord 0x288 0x13 cpu Execute Command sysbus WriteDoubleWord 0x28C 0x13 cpu Execute Command sysbus WriteDoubleWord 0x290 0x13 cpu Execute Command sysbus WriteDoubleWord 0x294 0x13 cpu Execute Command sysbus WriteDoubleWord 0x298 0x13 cpu Execute Command sysbus WriteDoubleWord 0x29C 0x13 cpu # "j 0x208" Execute Command sysbus WriteDoubleWord 0x2A0 0xf69ff06f cpu # "j 0x300" Execute Command sysbus WriteDoubleWord 0x300 0x6f cpu Execute Command sysbus.cpu PC 0x200 ${FILE}= Allocate Temporary File Execute Command sysbus.cpu CreateExecutionTracing "tracer" @${FILE} PC # run for 400 instructions Execute Command sysbus.cpu PerformanceInMips 1 Execute Command emulation RunFor "0.000400" # should reach the end of the execution ${pc}= Execute Command sysbus.cpu PC Should Contain ${pc} 0x300 Execute Command sysbus.cpu DisableExecutionTracing ${content}= Get File ${FILE} @{pcs}= Split To Lines ${content} Length Should Be ${pcs} 400 Should Be Equal ${pcs[0]} 0x200 Should Be Equal ${pcs[1]} 0x204 Should Be Equal ${pcs[2]} 0x208 Should Be Equal ${pcs[3]} 0x20C # here we skip a jump to 0x300 (it should fire at the very end) Should Be Equal ${pcs[4]} 0x214 Should Be Equal ${pcs[5]} 0x216 Should Be Equal ${pcs[6]} 0x218 Should Be Equal ${pcs[7]} 0x21C # first iteration of the loop Should Be Equal ${pcs[40]} 0x2A0 Should Be Equal ${pcs[41]} 0x208 # another iteration of the loop Should Be Equal ${pcs[79]} 0x2A0 Should Be Equal ${pcs[80]} 0x208 # and another Should Be Equal ${pcs[118]} 0x2A0 Should Be Equal ${pcs[119]} 0x208 # and the last one Should Be Equal ${pcs[352]} 0x2A0 Should Be Equal ${pcs[353]} 0x208 Should Be Equal ${pcs[354]} 0x20C Should Be Equal ${pcs[355]} 0x210 Should Be Equal ${pcs[356]} 0x300 Should Trace In ARM and Thumb State [Arguments] ${memory_per_cpu} Execute Command mach create Execute Command machine LoadPlatformDescriptionFromString "cpu: CPU.ARMv7A @ sysbus { cpuType: \\"cortex-a9\\" }" IF ${memory_per_cpu} Execute Command machine LoadPlatformDescriptionFromString "mem: Memory.MappedMemory @ sysbus new Bus.BusPointRegistration { address: 0x0; cpu: cpu } { size: 0x1000 }" ELSE Execute Command machine LoadPlatformDescriptionFromString "mem: Memory.MappedMemory @ sysbus 0x0 { size: 0x1000 }" END # nop (ARM) Execute Command sysbus WriteDoubleWord 0x00000000 0xe1a00000 cpu # blx 0x10 (ARM) Execute Command sysbus WriteDoubleWord 0x00000004 0xfa000001 cpu # nop (ARM) Execute Command sysbus WriteDoubleWord 0x00000008 0xe1a00000 cpu # wfi (ARM) Execute Command sysbus WriteDoubleWord 0x0000000c 0xe320f003 cpu # 2x nop (Thumb) Execute Command sysbus WriteDoubleWord 0x00000010 0x46c046c0 cpu # bx lr; nop (Thumb) Execute Command sysbus WriteDoubleWord 0x00000014 0x46c04770 cpu Execute Command sysbus.cpu PC 0x0 ${FILE}= Allocate Temporary File Execute Command sysbus.cpu CreateExecutionTracing "tracer" @${FILE} PC Execute Command emulation RunFor "0.0001" # should reach the end of the execution PC Should Be Equal 0x10 Execute Command sysbus.cpu DisableExecutionTracing ${content}= Get File ${FILE} @{pcs}= Split To Lines ${content} Length Should Be ${pcs} 7 Should Be Equal ${pcs[0]} 0x0 Should Be Equal ${pcs[1]} 0x4 Should Be Equal ${pcs[2]} 0x10 Should Be Equal ${pcs[3]} 0x12 Should Be Equal ${pcs[4]} 0x14 Should Be Equal ${pcs[5]} 0x8 Should Be Equal ${pcs[6]} 0xC *** Test Cases *** Should Dump PCs ${pcs}= Trace The Execution On The Versatile Platform PC Length Should Be ${pcs} 16 Should Be Equal ${pcs[0]} 0x8000 Should Be Equal ${pcs[1]} 0x8004 Should Be Equal ${pcs[2]} 0x8008 Should Be Equal ${pcs[3]} 0x359C08 Should Be Equal ${pcs[14]} 0x8010 Should Be Equal ${pcs[15]} 0x8014 Should Dump Opcodes ${opcodes}= Trace The Execution On The Versatile Platform Opcode Length Should Be ${opcodes} 16 Should Be Equal ${opcodes[0]} 0xE321F0D3 Should Be Equal ${opcodes[1]} 0xEE109F10 Should Be Equal ${opcodes[2]} 0xEB0D46FE Should Be Equal ${opcodes[3]} 0xE28F3030 Should Be Equal ${opcodes[14]} 0x0A0D470D Should Be Equal ${opcodes[15]} 0xE28F302C Should Dump Opcodes For Isolated Memory Create Machine RISC-V 32-bit 0x2000 memory_per_cpu=True ${trace}= Run And Trace Simple Program On RISC-V 0x2000 Opcode False Should Contain ${trace}[0] 0x00000013 Should Contain ${trace}[1] 0x0001 Should Contain ${trace}[2] 0x00310093 Should Dump PCs And Opcodes ${trace}= Trace The Execution On The Versatile Platform PCAndOpcode Length Should Be ${trace} 16 Should Be Equal ${trace[0]} 0x8000: 0xE321F0D3 Should Be Equal ${trace[1]} 0x8004: 0xEE109F10 Should Be Equal ${trace[2]} 0x8008: 0xEB0D46FE Should Be Equal ${trace[3]} 0x359C08: 0xE28F3030 Should Be Equal ${trace[14]} 0x8010: 0x0A0D470D Should Be Equal ${trace[15]} 0x8014: 0xE28F302C Should Dump PCs And Opcodes For Isolated Memory Create Machine RISC-V 32-bit 0x2000 memory_per_cpu=True ${trace}= Run And Trace Simple Program On RISC-V 0x2000 PCAndOpcode False Should Contain ${trace}[0] 0x2000: 0x00000013 Should Contain ${trace}[1] 0x2004: 0x0001 Should Contain ${trace}[2] 0x2006: 0x00310093 Should Dump 64-bit PCs Should Dump 64-bit PCs On RISC-V memory_per_cpu=False Should Dump 64-bit PCs For Isolated Memory Should Dump 64-bit PCs On RISC-V memory_per_cpu=True Should Dump Disassembly Should Dump Disassembly On RISC-V memory_per_cpu=False Should Dump Disassembly For Isolated Memory Should Dump Disassembly On RISC-V memory_per_cpu=True Should Be Able To Add Accesses To The Memory To The Trace Should Be Able To Add Memory Accesses To The Trace On RISC-V memory_per_cpu=False Should Be Able To Add Accesses To The Isolated Memory To The Trace Should Be Able To Add Memory Accesses To The Trace On RISC-V memory_per_cpu=True Should Be Able To Add Accesses To The Memory To The Trace In Binary Format Should Be Able To Add Memory Accesses To The Trace In Binary Format On RISC-V memory_per_cpu=False Should Be Able To Add Accesses To The Isolated Memory To The Trace In Binary Format Should Be Able To Add Memory Accesses To The Trace In Binary Format On RISC-V memory_per_cpu=True Should Dump 64-bit PCs As Binary Should Dump 64-bit PCs As Binary On RISC-V memory_per_cpu=False Should Dump 64-bit PCs As Binary For Isolated Memory Should Dump 64-bit PCs As Binary On RISC-V memory_per_cpu=True Should Dump 32-bit PCs As Binary Should Dump 32-bit PCs As Binary On RISC-V memory_per_cpu=False Should Dump 32-bit PCs As Binary For Isolated Memory Should Dump 32-bit PCs As Binary On RISC-V memory_per_cpu=True Should Dump Opcodes As Binary Should Dump Opcodes As Binary On RISC-V memory_per_cpu=False Should Dump Opcodes As Binary For Isolated Memory Should Dump Opcodes As Binary On RISC-V memory_per_cpu=True Should Dump PCs And Opcodes As Binary Should Dump PCs And Opcodes As Binary On RISC-V memory_per_cpu=False Should Dump PCs And Opcodes As Binary For Isolated Memory Should Dump PCs And Opcodes As Binary On RISC-V memory_per_cpu=True Should Trace Consecutive Blocks Should Trace Consecutive Blocks On RISC-V memory_per_cpu=False Should Trace Consecutive Blocks For Isolated Memory Should Trace Consecutive Blocks On RISC-V memory_per_cpu=True Should Trace ARM Core Should Trace In ARM and Thumb State memory_per_cpu=False Should Trace ARM Core With Isolated Memory Should Trace In ARM and Thumb State memory_per_cpu=True Should Trace The RISC-V Vector Configuration Create Machine RISC-V 32-bit 0x2000 memory_per_cpu=False ${trace_filepath}= Allocate Temporary File Execute Command sysbus.cpu CreateExecutionTracing "trace_name" "${trace_filepath}" Disassembly Execute Command trace_name TrackVectorConfiguration Run RISC-V Program With Vcfg Instruction 0x2000 Execute Command sysbus.cpu DisableExecutionTracing ${output_file}= Get File ${trace_filepath} Log ${output_file} ${output_lines}= Split To Lines ${output_file} Length Should Be ${output_lines} 4 Should Contain ${output_lines}[0] nop Should Contain ${output_lines}[1] nop Should Contain ${output_lines}[2] vsetvli zero, zero, e8, m1, ta, mu Should Contain ${output_lines}[3] Vector configured to VL: 0x0, VTYPE: 0x40 Should Be Able To Add Vector Configuration To The Trace In Binary Format Create Machine RISC-V 32-bit 0x2000 memory_per_cpu=False ${trace_filepath}= Allocate Temporary File Execute Command sysbus.cpu CreateExecutionTracing "trace_name" "${trace_filepath}" PCAndOpcode true Execute Command trace_name TrackVectorConfiguration Run RISC-V Program With Vcfg Instruction 0x2000 Execute Command sysbus.cpu DisableExecutionTracing ${output_file}= Get Binary File ${trace_filepath} Length Should Be ${output_file} 74 Should Be Equal As Bytes ${output_file}[00:08] ${bin_out_signature} Should Be Equal As Bytes ${output_file}[08:10] \x04\x01 # [0]: uses_thumb_flag; [1]: triple_and_model_length; Should Be Equal As Bytes ${output_file}[10:12] \x00\x11 Should Be Equal As Bytes ${output_file}[12:29] ${triple_and_model} # [0:4]: pc; [4]: opcode_length; [5:9]: opcode; [10]: additional_data_type = None Should Be Equal As Bytes ${output_file}[29:39] \x00\x20\x00\x00\x04\x13\x00\x00\x00\x00 # [0:4]: pc; [4]: opcode_length; [5:7]: opcode; [8]: additional_data_type = None Should Be Equal As Bytes ${output_file}[39:47] \x04\x20\x00\x00\x02\x01\x00\x00 # [0:4]: pc; [4]: opcode_length; [5:9]: opcode; [10]: additional_data_type = VectorConfiguration Should Be Equal As Bytes ${output_file}[47:57] \x06\x20\x00\x00\x04\x57\x70\x00\x04\x02 # [0:8]: vl; [8:16]: vtype; [16]: additional_data_type = None Should Be Equal As Bytes ${output_file}[57:74] \x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00 Should Show Error When Format Is Incorrect Create Machine RISC-V 32-bit 0x2000 memory_per_cpu=False ${trace_filepath}= Allocate Temporary File Run Keyword And Expect Error *don't support binary output file with the*formatting* Execute Command sysbus.cpu CreateExecutionTracing "tracer" "${trace_filepath}" Disassembly true