91 lines
3.3 KiB
Markdown
91 lines
3.3 KiB
Markdown
|
|
## Compare execution using reference GDB
|
||
|
|
|
||
|
|
This directory contains script comparing Renode execution with a given reference using GDB.
|
||
|
|
|
||
|
|
### Requirements
|
||
|
|
|
||
|
|
To install required python packages run:
|
||
|
|
```
|
||
|
|
python3 -m pip install -r tools/gdb_compare/requirements.txt
|
||
|
|
```
|
||
|
|
|
||
|
|
### Usage
|
||
|
|
|
||
|
|
```
|
||
|
|
usage: gdb_compare.py [-h] -r REFERENCE_COMMAND -c COMMAND -s RENODE_SCRIPT -p REFERENCE_GDB_PORT [--renode-gdb-port RENODE_GDB_PORT] [-P RENODE_TELNET_PORT]
|
||
|
|
-b DEBUG_BINARY [-x RENODE_PATH] [-g GDB_PATH] [-f START_FRAME] [-i IPS] [-S STOP_ADDRESS]
|
||
|
|
|
||
|
|
Compare Renode execution with hardware/other simulator state using GDB
|
||
|
|
|
||
|
|
optional arguments:
|
||
|
|
-h, --help show this help message and exit
|
||
|
|
-r REFERENCE_COMMAND, --reference-command REFERENCE_COMMAND
|
||
|
|
Command used to run the GDB server provider used as a reference
|
||
|
|
-R REGISTERS, --register-list REGISTERS
|
||
|
|
Sequence of register names to compare. Formated as ';' separated list of register names. Eg. 'pc;ra'
|
||
|
|
-c COMMAND, --gdb-command COMMAND
|
||
|
|
GDB command to run on both instances after each instruction. Outputs of these commands are compared against each other.
|
||
|
|
-s RENODE_SCRIPT, --renode-script RENODE_SCRIPT
|
||
|
|
Path to the '.resc' script
|
||
|
|
-p REFERENCE_GDB_PORT, --reference-gdb-port REFERENCE_GDB_PORT
|
||
|
|
Port on which the reference GDB server can be reached
|
||
|
|
--renode-gdb-port RENODE_GDB_PORT
|
||
|
|
Port on which Renode will comunicate with GDB server
|
||
|
|
-P RENODE_TELNET_PORT, --renode-telnet-port RENODE_TELNET_PORT
|
||
|
|
Port on which Renode will comunicate with telnet
|
||
|
|
-b DEBUG_BINARY, --binary DEBUG_BINARY
|
||
|
|
Path to ELF file with symbols
|
||
|
|
-x RENODE_PATH, --renode-path RENODE_PATH
|
||
|
|
Path to the Renode runscript
|
||
|
|
-g GDB_PATH, --gdb-path GDB_PATH
|
||
|
|
Path to the GDB binary to be run
|
||
|
|
-f START_FRAME, --start-frame START_FRAME
|
||
|
|
Sequence of jumps to reach target frame. Formated as 'addr, occurence', separated with ';'. Eg. '_start,1;printf,7'
|
||
|
|
-i IPS, --interest-points IPS
|
||
|
|
Sequence of address, interest points, after which state will be compared. Formated as ';' spearated list of hexadecimal addresses.
|
||
|
|
Eg. '0x8000;0x340eba3c'
|
||
|
|
-S STOP_ADDRESS, --stop-address STOP_ADDRESS
|
||
|
|
Stop condition, if reached script will stop
|
||
|
|
```
|
||
|
|
|
||
|
|
#### Examples
|
||
|
|
|
||
|
|
##### Comparing Renode with QEMU
|
||
|
|
|
||
|
|
```
|
||
|
|
python gdb_compare.py \
|
||
|
|
-r 'qemu-system-riscv64 -nographic -M my_board -kernel firmware.elf -s -S' \
|
||
|
|
-c 'info registers' \
|
||
|
|
-s my_board.resc \
|
||
|
|
-p 1234 \
|
||
|
|
-b firmware.elf \
|
||
|
|
-g riscv64-zephyr-elf-gdb \
|
||
|
|
-f 'main,1;printf,5'
|
||
|
|
```
|
||
|
|
|
||
|
|
##### Comparing Renode with OpenOCD
|
||
|
|
|
||
|
|
```
|
||
|
|
python gdb_compare.py \
|
||
|
|
-r 'openocd -f my_board.cfg' \
|
||
|
|
-c 'info registers' \
|
||
|
|
-s my_board.resc \
|
||
|
|
-p 3333 \
|
||
|
|
-b firmware.elf \
|
||
|
|
-g arm-zephyr-eabi-gdb \
|
||
|
|
-f 'main,1;printf,5'
|
||
|
|
```
|
||
|
|
|
||
|
|
##### Comparing Renode with Renode
|
||
|
|
|
||
|
|
```
|
||
|
|
python gdb_compare.py \
|
||
|
|
-r 'renode my_board.resc --console --disable-gui -e "machine StartGdbServer 1234"' \
|
||
|
|
-c 'info registers' \
|
||
|
|
-s my_board.resc \
|
||
|
|
-p 1234 \
|
||
|
|
-b firmware.elf \
|
||
|
|
-g arm-zephyr-eabi-gdb \
|
||
|
|
-f 'main,1;printf,5'
|
||
|
|
```
|