Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Browse the repository at this point in the history
disas: Move softmmu specific code to separate file
We'd like to move disas.c into the common code source set, where CONFIG_USER_ONLY is not available anymore. So we have to move the related code into a separate file instead. Signed-off-by: Thomas Huth <thuth@redhat.com> Message-Id: <20230508133745.109463-2-thuth@redhat.com> [rth: Type change done in a separate patch] Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
- Loading branch information
Showing
4 changed files
with
93 additions
and
70 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,21 @@ | ||
| /* | ||
| * Definitions used internally in the disassembly code | ||
| * | ||
| * SPDX-License-Identifier: GPL-2.0-or-later | ||
| */ | ||
|
|
||
| #ifndef DISAS_INTERNAL_H | ||
| #define DISAS_INTERNAL_H | ||
|
|
||
| #include "disas/dis-asm.h" | ||
|
|
||
| typedef struct CPUDebug { | ||
| struct disassemble_info info; | ||
| CPUState *cpu; | ||
| } CPUDebug; | ||
|
|
||
| void disas_initialize_debug_target(CPUDebug *s, CPUState *cpu); | ||
| int disas_gstring_printf(FILE *stream, const char *fmt, ...) | ||
| G_GNUC_PRINTF(2, 3); | ||
|
|
||
| #endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,65 @@ | ||
| /* | ||
| * Functions related to disassembly from the monitor | ||
| * | ||
| * SPDX-License-Identifier: GPL-2.0-or-later | ||
| */ | ||
|
|
||
| #include "qemu/osdep.h" | ||
| #include "disas-internal.h" | ||
| #include "disas/disas.h" | ||
| #include "exec/memory.h" | ||
| #include "hw/core/cpu.h" | ||
| #include "monitor/monitor.h" | ||
|
|
||
| static int | ||
| physical_read_memory(bfd_vma memaddr, bfd_byte *myaddr, int length, | ||
| struct disassemble_info *info) | ||
| { | ||
| CPUDebug *s = container_of(info, CPUDebug, info); | ||
| MemTxResult res; | ||
|
|
||
| res = address_space_read(s->cpu->as, memaddr, MEMTXATTRS_UNSPECIFIED, | ||
| myaddr, length); | ||
| return res == MEMTX_OK ? 0 : EIO; | ||
| } | ||
|
|
||
| /* Disassembler for the monitor. */ | ||
| void monitor_disas(Monitor *mon, CPUState *cpu, uint64_t pc, | ||
| int nb_insn, bool is_physical) | ||
| { | ||
| int count, i; | ||
| CPUDebug s; | ||
| g_autoptr(GString) ds = g_string_new(""); | ||
|
|
||
| disas_initialize_debug_target(&s, cpu); | ||
| s.info.fprintf_func = disas_gstring_printf; | ||
| s.info.stream = (FILE *)ds; /* abuse this slot */ | ||
|
|
||
| if (is_physical) { | ||
| s.info.read_memory_func = physical_read_memory; | ||
| } | ||
| s.info.buffer_vma = pc; | ||
|
|
||
| if (s.info.cap_arch >= 0 && cap_disas_monitor(&s.info, pc, nb_insn)) { | ||
| monitor_puts(mon, ds->str); | ||
| return; | ||
| } | ||
|
|
||
| if (!s.info.print_insn) { | ||
| monitor_printf(mon, "0x%08" PRIx64 | ||
| ": Asm output not supported on this arch\n", pc); | ||
| return; | ||
| } | ||
|
|
||
| for (i = 0; i < nb_insn; i++) { | ||
| g_string_append_printf(ds, "0x%08" PRIx64 ": ", pc); | ||
| count = s.info.print_insn(pc, &s.info); | ||
| g_string_append_c(ds, '\n'); | ||
| if (count < 0) { | ||
| break; | ||
| } | ||
| pc += count; | ||
| } | ||
|
|
||
| monitor_puts(mon, ds->str); | ||
| } |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters