Fix wrong number of registers (#98)

* fix num regs in case it's stored in xml file
This commit is contained in:
Romain Malmain 2025-01-13 11:11:56 +01:00 committed by GitHub
parent ace364678a
commit 2b5e4bfcff
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -19,6 +19,7 @@
int gdb_write_register(CPUState* cpu, uint8_t* mem_buf, int reg); int gdb_write_register(CPUState* cpu, uint8_t* mem_buf, int reg);
static __thread GByteArray* libafl_qemu_mem_buf = NULL; static __thread GByteArray* libafl_qemu_mem_buf = NULL;
static __thread int num_regs = 0;
#ifdef CONFIG_USER_ONLY #ifdef CONFIG_USER_ONLY
static __thread CPUArchState* libafl_qemu_env; static __thread CPUArchState* libafl_qemu_env;
@ -133,8 +134,22 @@ int libafl_qemu_read_reg(CPUState* cpu, int reg, uint8_t* val)
int libafl_qemu_num_regs(CPUState* cpu) int libafl_qemu_num_regs(CPUState* cpu)
{ {
CPUClass* cc = CPU_GET_CLASS(cpu); if (!num_regs) {
return cc->gdb_num_core_regs; CPUClass* cc = CPU_GET_CLASS(cpu);
if (cc->gdb_num_core_regs) {
num_regs = cc->gdb_num_core_regs;
} else {
const GDBFeature *feature = gdb_find_static_feature(cc->gdb_core_xml_file);
g_assert(feature);
g_assert(feature->num_regs > 0);
num_regs = feature->num_regs;
}
}
return num_regs;
} }
void libafl_flush_jit(void) void libafl_flush_jit(void)