Fix wrong number of registers (#98)
* fix num regs in case it's stored in xml file
This commit is contained in:
parent
ace364678a
commit
2b5e4bfcff
19
libafl/cpu.c
19
libafl/cpu.c
@ -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)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user