12a6a4076SMarkus Armbruster #ifndef QEMU_DISAS_H 22a6a4076SMarkus Armbruster #define QEMU_DISAS_H 3b9adb4a6Sbellard 4b9adb4a6Sbellard /* Disassemble this for me please... (debugging). */ 5c0d691abSRichard Henderson #ifdef CONFIG_TCG 6b6235a75SRichard Henderson void disas(FILE *out, const void *code, size_t size); 7*4c833c60SRichard Henderson void target_disas(FILE *out, CPUState *cpu, const DisasContextBase *db); 8c0d691abSRichard Henderson #endif 9376253ecSaliguori 10b6235a75SRichard Henderson void monitor_disas(Monitor *mon, CPUState *cpu, uint64_t pc, 11b6235a75SRichard Henderson int nb_insn, bool is_physical); 12b9adb4a6Sbellard 13c0d691abSRichard Henderson #ifdef CONFIG_PLUGIN 14*4c833c60SRichard Henderson char *plugin_disas(CPUState *cpu, const DisasContextBase *db, 15*4c833c60SRichard Henderson uint64_t addr, size_t size); 16c0d691abSRichard Henderson #endif 17cbafa236SAlex Bennée 18b9adb4a6Sbellard /* Look up symbol for debugging purpose. Returns "" if unknown. */ 19b6235a75SRichard Henderson const char *lookup_symbol(uint64_t orig_addr); 20b9adb4a6Sbellard 2149918a75Spbrook struct syminfo; 2249918a75Spbrook struct elf32_sym; 2349918a75Spbrook struct elf64_sym; 2449918a75Spbrook 25b6235a75SRichard Henderson typedef const char *(*lookup_symbol_t)(struct syminfo *s, uint64_t orig_addr); 2649918a75Spbrook 2749918a75Spbrook struct syminfo { 2849918a75Spbrook lookup_symbol_t lookup_symbol; 29e80cfcfcSbellard unsigned int disas_num_syms; 3049918a75Spbrook union { 3149918a75Spbrook struct elf32_sym *elf32; 3249918a75Spbrook struct elf64_sym *elf64; 3349918a75Spbrook } disas_symtab; 34e80cfcfcSbellard const char *disas_strtab; 35e80cfcfcSbellard struct syminfo *next; 3649918a75Spbrook }; 3749918a75Spbrook 3849918a75Spbrook /* Filled in by elfload.c. Simplistic, but will do for now. */ 3949918a75Spbrook extern struct syminfo *syminfos; 40e80cfcfcSbellard 412a6a4076SMarkus Armbruster #endif /* QEMU_DISAS_H */ 42