mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-08 02:03:56 -06:00
disas: use result of ->read_memory_func
This gets especially confusing if you start plugging in host addresses from a trace and you wonder why the output keeps changing. Report when read_memory_func fails instead of blindly disassembling the buffer contents. Signed-off-by: Alex Bennée <alex.bennee@linaro.org> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Message-Id: <20220929114231.583801-35-alex.bennee@linaro.org>
This commit is contained in:
parent
4332099f0e
commit
90bbf9d9db
2 changed files with 51 additions and 38 deletions
18
disas.c
18
disas.c
|
@ -83,18 +83,18 @@ static int print_insn_objdump(bfd_vma pc, disassemble_info *info,
|
|||
const char *prefix)
|
||||
{
|
||||
int i, n = info->buffer_length;
|
||||
uint8_t *buf = g_malloc(n);
|
||||
g_autofree uint8_t *buf = g_malloc(n);
|
||||
|
||||
info->read_memory_func(pc, buf, n, info);
|
||||
|
||||
for (i = 0; i < n; ++i) {
|
||||
if (i % 32 == 0) {
|
||||
info->fprintf_func(info->stream, "\n%s: ", prefix);
|
||||
if (info->read_memory_func(pc, buf, n, info) == 0) {
|
||||
for (i = 0; i < n; ++i) {
|
||||
if (i % 32 == 0) {
|
||||
info->fprintf_func(info->stream, "\n%s: ", prefix);
|
||||
}
|
||||
info->fprintf_func(info->stream, "%02x", buf[i]);
|
||||
}
|
||||
info->fprintf_func(info->stream, "%02x", buf[i]);
|
||||
} else {
|
||||
info->fprintf_func(info->stream, "unable to read memory");
|
||||
}
|
||||
|
||||
g_free(buf);
|
||||
return n;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue