Actions
QEMU4V Trace Format¶
QEMU4V is able to generate traces of program execution. Here is the description of the trace format.
The QEMU4V trace contains records of the following kinds: instruction records, memory access records, register write records.
Instruction record¶
Appears in the trace when the corresponding instruction from the target program has been executed.The record format is as follows:
<time> <scale> <cpu> [IT|IS] (<inst_id>) <addr> <opcode> [A|T|X] <mode>_<security> : <disasm>
The record fields are described in the following table:
Field | Description | Value |
<time> | Timestamp | Decimal integer value |
<scale> | Timestamp unit | String (the clk value means, that the timestamp field shows not physical time but the index of executed instruction) |
<cpu> | Identifier for the processor at which the instruction is executed | Decimal integer value |
[IT|IS] | Instruction execution flag | IT when "Instruction Taken", IS when "Instruction Skipped" |
<inst_id> | Index of the executed instruction | Decimal integer value |
<addr> | Virtual memory address for the instruction | Hexadecimal value |
<opcode> | 16\32\64-bit code for the instruction | Hexadecimal value |
[A|T|X] | Instruction set identifier | TODO |
<mode> | Execution mode | String (one of the following: svc, irq, fiq, usr, mon, sys, abt, und) |
<security> | Flag for the processor security mode | s when "secure", ns when "non-secure" |
<disasm> | Disassembly representation for the instruction | String |
Example:
1 clk 0 IT (1) 00000004 3c080001 A svc : lui t0,0x1
Memory access record¶
Appears in the trace when reading from or writing to memory starts.
The record format is as follows:<time> <scale> M<rw><sz><attrib> <addr> <data>
The record fields are described in the following table:
Field | Description | Value |
<time> | Timestamp | Decimal integer value |
<scale> | Timestamp unit | String (the clk value means, that the timestamp field shows not physical time but the inex of executed instruction) |
<rw> | Type of access | R for reading, W for writing |
<sz> | Size of received\transmitted data in bytes | Decimal integer value |
<attrib> | Access attribute (optional) | X for privileged, T for non-privileged (translated) |
<addr> | Virtual memory address to which an access is made | Hexadecimal value |
<data> | The data to be written (has been read) | Hexadecimal value of the corresponding size |
Example:
10 clk MR8 00103fc4 0010400000000000
Register write record¶
Appears in the trace when writing to register happens.
The record format is as follows:<time> <scale> R <register> <value>
The record fields are described in the following table:
Field | Description | Value |
<time> | Timestamp | Decimal integer value |
<scale> | Timestamp unit | String (the clk value means, that the timestamp field shows not physical time but the inex of executed instruction) |
<register> | Name of register | lowercase string |
<value> | The value to be written in the register | Hexadecimal value |
Example:
14 clk R r8 00000000
Updated by Sergey Smolov over 1 year ago · 2 revisions