Jon*_*ovi 4 arm qemu gdbserver arm64
我在QEMU中运行一些裸机AARCH64软件。我将GDB连接到它作为远程目标。GDB多体系结构显示了从x0到x30的通用寄存器,SP和PC。
但是,我找不到访问系统寄存器以检查DAIF系统寄存器,故障地址寄存器,故障综合症寄存器等内容的方法。这些对于调试至关重要。我已经在QEMU中使用info all-registers进行了尝试,但是输出似乎并不相关。
我是否缺少明显的东西?
PS,QEMU模型如下:
qemu-system-aarch64-机器病毒,gic_version = 3 -cpu cortex-a57 -smp 4 -m 4096
不,您不会丢失任何东西:不可能将带有库存qemu的aarch64系统寄存器视为gdb远程目标。
但是您可以对qemu进行一些小的更改以查看它们。
Gdb客户端通过GDB RSP协议连接到QEMU 。在QEMU实施的该协议的服务器部分称为“ gdb存根”(也是许多其他模拟器/嵌入式软件的通用术语)。
在客户端和存根通信的最开始,存根向客户端发送目标描述 -一个xml文件,其中包含客户端允许请求的所有寄存器。这是qemu aarch64目标的此类文件。如您所见,客户端的info all-registers命令将打印所有这些寄存器,而不是更多。
如果简单地将必需的寄存器添加到该文件中不起作用,则还需要向aarch64_cpu_gdb_read_register添加几行-该函数从qemu内部读取寄存器并将它们传递给gdbstub。
之后构建qemu,您就知道了。
同时这个问题 将帮助您查看客户端/存根通信细节,如果出现错误。
小智 5
QEMU 3.x+ 在普通信息寄存器命令中公开 aarch64 系统寄存器。例如:
(gdb) info registers
...
MVFR1_EL1 0x12111111 303108369
MDRAR_EL1 0x0 0
OSLSR_EL1 0xa 10
CTR_EL0 0x8444c004 2219098116
REVIDR_EL1 0x0 0
SCTLR 0xc50838 12912696
ACTLR_EL1 0x0 0
CPACR 0x0 0
...
Run Code Online (Sandbox Code Playgroud)
它是在https://github.com/qemu/qemu/commit/200bf5b7ffe中实现的。
| 归档时间: |
|
| 查看次数: |
1085 次 |
| 最近记录: |