30#include "safe-ctype.h"
32#include "gdbsupport/gdb_optional.h"
62 bool supported = dis.
disasm_info ()->created_styled_output;
65 gdb_printf (file, _(
"Use of libopcodes styling support is \"%s\".\n"),
71 gdb_printf (file, _(
"Use of libopcodes styling support is \"off\""
72 " (not supported on architecture \"%s\")\n"),
84 bool supported = dis.
disasm_info ()->created_styled_output;
94 error (_(
"Use of libopcodes styling not supported on architecture \"%s\"."),
132 return htab_hash_pointer (dle->
symtab) + dle->
line;
152 return htab_create_alloc (41,
167 slot = htab_find_slot (table, &dle, INSERT);
186 return htab_find (table, &dle) != NULL;
193 (bfd_vma memaddr, gdb_byte *myaddr,
unsigned int len,
194 struct disassemble_info *info)
noexcept
203 (
int err, bfd_vma memaddr,
struct disassemble_info *info)
noexcept
215 (bfd_vma addr,
struct disassemble_info *info)
noexcept
249 = gdb::checked_static_cast<gdb_printing_disassembler *> (di);
251 gdb_assert (
stream !=
nullptr);
259 const char *format, ...) noexcept
264 va_start (args, format);
276 (
void *dis_info,
enum disassembler_style style,
277 const char *format, ...) noexcept
283 va_start (args, format);
284 std::string content = string_vprintf (format, args);
288 if (style == dis_style_comment_start)
291 style = dis_style_comment_start;
294 const char *txt = content.c_str ();
297 case dis_style_mnemonic:
298 case dis_style_sub_mnemonic:
299 case dis_style_assembler_directive:
303 case dis_style_register:
307 case dis_style_immediate:
308 case dis_style_address_offset:
312 case dis_style_address:
316 case dis_style_symbol:
320 case dis_style_comment_start:
341 if (mle1.
line == 0 || mle2.
line == 0)
362 gdb_disassembly_flags
flags)
405 std::string
name, filename;
408 &offset, &filename, &line, &unmapped))
431 auto write_out_insn_buffer = [&] ()
446 gdb_assert (
size > 0);
448 catch (
const gdb_exception &)
456 write_out_insn_buffer ();
474 int bytes_per_line = std::max (di->bytes_per_line,
size);
475 int bytes_per_chunk = std::max (di->bytes_per_chunk, 1);
483 || (
size % bytes_per_chunk) != 0)
487 for (
int i = 0; i <
size; i += bytes_per_chunk)
492 if (di->display_endian == BFD_ENDIAN_LITTLE)
494 for (
int k = bytes_per_chunk; k-- != 0; )
499 for (
int k = 0; k < bytes_per_chunk; k++)
506 for (
int i =
size; i < bytes_per_line; i += bytes_per_chunk)
510 nspaces += bytes_per_chunk * 2;
519 write_out_insn_buffer ();
527 struct ui_out *uiout, CORE_ADDR low, CORE_ADDR high,
528 int how_many, gdb_disassembly_flags
flags, CORE_ADDR *end_pc)
531 int num_displayed = 0;
533 memset (&insn, 0,
sizeof (insn));
538 while (insn.
addr < high && (how_many < 0 || num_displayed < how_many))
556 return num_displayed;
570 CORE_ADDR low, CORE_ADDR high,
571 int how_many, gdb_disassembly_flags
flags)
579 int out_of_order = 0;
581 int num_displayed = 0;
582 print_source_lines_flags psl_flags = 0;
601 for (i = 0; i < nlines - 1 && le[i].
pc < low; i++);
605 for (; i < nlines - 1 && le[i].
pc < high; i++)
607 if (le[i].
line == le[i + 1].
line && le[i].pc == le[i + 1].pc)
618 mle[newlines].
end_pc = le[i + 1].
pc;
625 if (i == nlines - 1 && le[i].pc < high)
645 gdb::optional<ui_out_emit_tuple> outer_tuple_emitter;
646 gdb::optional<ui_out_emit_list> inner_list_emitter;
648 for (i = 0; i < newlines; i++)
651 if (mle[i].
line >= next_line)
656 if (next_line == mle[i].
line)
658 outer_tuple_emitter.emplace (uiout,
"src_and_asm_line");
664 for (; next_line < mle[i].
line; next_line++)
675 outer_tuple_emitter.emplace (uiout,
"src_and_asm_line");
681 outer_tuple_emitter.emplace (uiout,
"src_and_asm_line");
685 next_line = mle[i].
line + 1;
686 inner_list_emitter.emplace (uiout,
"line_asm_insn");
691 how_many,
flags, NULL);
695 if (i == (newlines - 1) || mle[i + 1].
line > mle[i].
line)
697 inner_list_emitter.reset ();
698 outer_tuple_emitter.reset ();
701 if (how_many >= 0 && num_displayed >= how_many)
714 struct symtab *main_symtab,
715 CORE_ADDR low, CORE_ADDR high,
716 int how_many, gdb_disassembly_flags
flags)
720 int num_displayed = 0;
721 print_source_lines_flags psl_flags = 0;
723 struct symtab *last_symtab;
726 gdb_assert (main_symtab != NULL && main_symtab->
linetable () != NULL);
749 for (i = 0; i < nlines && le[i].
pc < low; i++)
752 if (i < nlines && le[i].pc < high)
795 gdb::optional<ui_out_emit_tuple> tuple_emitter;
796 gdb::optional<ui_out_emit_list> list_emitter;
806 int start_preceding_line_to_display = 0;
807 int end_preceding_line_to_display = 0;
808 int new_source_line = 0;
812 if (sal.
symtab != last_symtab)
823 start_preceding_line_to_display = first_le->
line;
824 end_preceding_line_to_display = sal.
line;
832 if (sal.
line > last_line + 1 && last_line != 0)
838 for (l = sal.
line - 1; l > last_line; --l)
844 if (l < sal.
line - 1)
846 start_preceding_line_to_display = l + 1;
847 end_preceding_line_to_display = sal.
line;
850 if (sal.
line != last_line)
865 if (tuple_emitter.has_value ())
867 gdb_assert (list_emitter.has_value ());
868 list_emitter.reset ();
869 tuple_emitter.reset ();
871 if (sal.
symtab != last_symtab
882 uiout->
text (
"unknown");
885 if (start_preceding_line_to_display > 0)
892 gdb_assert (sal.
symtab != NULL);
893 for (l = start_preceding_line_to_display;
894 l < end_preceding_line_to_display;
903 tuple_emitter.emplace (uiout,
"src_and_asm_line");
907 uiout->
text (_(
"--- no source info for this pc ---\n"));
908 list_emitter.emplace (uiout,
"line_asm_insn");
915 gdb_assert (tuple_emitter.has_value ());
916 gdb_assert (list_emitter.has_value ());
920 end_pc = std::min (sal.
end, high);
924 how_many,
flags, &end_pc);
927 if (how_many >= 0 && num_displayed >= how_many)
931 last_line = sal.
line;
937 CORE_ADDR low, CORE_ADDR high,
938 int how_many, gdb_disassembly_flags
flags)
953 const char *comma =
",";
955 if (implicit ==
nullptr)
961 if (options ==
nullptr)
967 return string_printf (
"%s%s%s", implicit, comma, options);
974 dis_asm_memory_error, dis_asm_print_address),
976 m_buffer (!use_ext_lang_for_styling () && use_libopcodes_for_styling ())
1014 &&
m_di.created_styled_output
1028 gdb_assert (fprintf_func !=
nullptr);
1029 gdb_assert (fprintf_styled_func !=
nullptr);
1030 init_disassemble_info (&
m_di, (
void *)
this, fprintf_func,
1031 fprintf_styled_func);
1032 m_di.flavour = bfd_target_unknown_flavour;
1039 if (memory_error_func !=
nullptr)
1040 m_di.memory_error_func = memory_error_func;
1041 if (print_address_func !=
nullptr)
1042 m_di.print_address_func = print_address_func;
1043 if (read_memory_func !=
nullptr)
1044 m_di.read_memory_func = read_memory_func;
1050 m_di.application_data =
this;
1054 disassemble_init_for_target (&
m_di);
1061 disassemble_free_target (&
m_di);
1075 struct disassemble_info *info)
1079 if (length.has_value ())
1110 gdb::optional<std::string> ext_contents;
1112 if (ext_contents.has_value ())
1113 m_buffer = std::move (*ext_contents);
1140 gdb_assert (length > 0);
1155 error (_(
"unknown disassembler error (error = %d)"), length);
1160 if (
m_di.insn_info_valid)
1170 gdb_disassembly_flags
flags,
int how_many,
1171 CORE_ADDR low, CORE_ADDR high)
1192 low, high, how_many,
flags);
1224 (
void *stream,
const char *format, ...) noexcept
1233 (
void *stream,
enum disassembler_style style,
1234 const char *format, ...) noexcept
1251 gdb::array_view<const gdb_byte> buffer,
1252 CORE_ADDR insn_address)
1256 m_di.buffer = (gdb_byte *) buffer.data ();
1257 m_di.buffer_length = buffer.size ();
1258 m_di.buffer_vma = insn_address;
1267 const gdb_byte *insn,
int max_len, CORE_ADDR addr)
1269 gdb::array_view<const gdb_byte> buffer
1270 = gdb::make_array_view (insn, max_len);
1280 if (disassembler_options == NULL)
1282 return *disassembler_options;
1290 const disasm_options_and_args_t *valid_options_and_args;
1291 const disasm_options_t *valid_options;
1292 gdb::unique_xmalloc_ptr<char> prospective_options_local
1294 char *options = remove_whitespace_and_extra_commas
1295 (prospective_options_local.get ());
1300 if (options == NULL)
1302 if (disassembler_options != NULL)
1304 free (*disassembler_options);
1305 *disassembler_options = NULL;
1311 if (valid_options_and_args == NULL)
1314'set disassembler-options ...' is not supported on this architecture.\n"));
1318 valid_options = &valid_options_and_args->options;
1321 FOR_EACH_DISASSEMBLER_OPTION (opt, options)
1324 for (i = 0; valid_options->name[i] != NULL; i++)
1325 if (valid_options->arg != NULL && valid_options->arg[i] != NULL)
1327 size_t len = strlen (valid_options->name[i]);
1332 if (memcmp (opt, valid_options->name[i], len) != 0)
1335 if (valid_options->arg[i]->values == NULL)
1337 for (j = 0; valid_options->arg[i]->values[j] != NULL; j++)
1338 if (disassembler_options_cmp
1339 (arg, valid_options->arg[i]->values[j]) == 0)
1347 else if (disassembler_options_cmp (opt, valid_options->name[i]) == 0)
1349 if (valid_options->name[i] == NULL)
1352 _(
"Invalid disassembler option value: '%s'.\n"),
1358 free (*disassembler_options);
1359 *disassembler_options = xstrdup (options);
1374 const disasm_options_and_args_t *valid_options_and_args;
1375 const disasm_option_arg_t *valid_args;
1376 const disasm_options_t *valid_options;
1379 if (options == NULL)
1382 gdb_printf (file, _(
"The current disassembler options are '%s'\n\n"),
1387 if (valid_options_and_args == NULL)
1389 gdb_puts (_(
"There are no disassembler options available "
1390 "for this architecture.\n"),
1395 valid_options = &valid_options_and_args->options;
1398The following disassembler options are supported for use with the\n\
1399'set disassembler-options OPTION [,OPTION]...' command:\n"));
1401 if (valid_options->description != NULL)
1403 size_t i, max_len = 0;
1408 for (i = 0; valid_options->name[i] != NULL; i++)
1410 size_t len = strlen (valid_options->name[i]);
1412 if (valid_options->arg != NULL && valid_options->arg[i] != NULL)
1413 len += strlen (valid_options->arg[i]->name);
1418 for (i = 0, max_len++; valid_options->name[i] != NULL; i++)
1420 gdb_printf (file,
" %s", valid_options->name[i]);
1421 if (valid_options->arg != NULL && valid_options->arg[i] != NULL)
1422 gdb_printf (file,
"%s", valid_options->arg[i]->name);
1423 if (valid_options->description[i] != NULL)
1425 size_t len = strlen (valid_options->name[i]);
1427 if (valid_options->arg != NULL && valid_options->arg[i] != NULL)
1428 len += strlen (valid_options->arg[i]->name);
1429 gdb_printf (file,
"%*c %s", (
int) (max_len - len),
' ',
1430 valid_options->description[i]);
1439 for (i = 0; valid_options->name[i] != NULL; i++)
1441 gdb_printf (file,
"%s", valid_options->name[i]);
1442 if (valid_options->arg != NULL && valid_options->arg[i] != NULL)
1443 gdb_printf (file,
"%s", valid_options->arg[i]->name);
1444 if (valid_options->name[i + 1] != NULL)
1446 file->wrap_here (2);
1451 valid_args = valid_options_and_args->args;
1452 if (valid_args != NULL)
1456 for (i = 0; valid_args[i].name != NULL; i++)
1458 if (valid_args[i].values == NULL)
1461 For the options above, the following values are supported for \"%s\":\n "),
1462 valid_args[i].
name);
1463 for (j = 0; valid_args[i].values[j] != NULL; j++)
1465 gdb_printf (file,
" %s", valid_args[i].values[j]);
1466 file->wrap_here (3);
1478 const char *text,
const char *word)
1481 const disasm_options_and_args_t *opts_and_args
1484 if (opts_and_args != NULL)
1486 const disasm_options_t *opts = &opts_and_args->options;
1489 const char *separator = strrchr (text,
',');
1490 if (separator != NULL)
1491 text = separator + 1;
1492 text = skip_spaces (text);
1508Set the disassembler options.\n\
1509Usage: set disassembler-options OPTION [,OPTION]...\n\n\
1510See: 'show disassembler-options' for valid option values."), _(
"\
1511Show the disassembler options."), NULL,
1524 _(
"Set libopcodes-styling specific variables."),
1525 _(
"Show libopcodes-styling specific variables."),
1526 &maint_set_libopcodes_styling_cmdlist,
1527 &maint_show_libopcodes_styling_cmdlist,
1534Set whether the libopcodes styling support should be used."), _(
"\
1535Show whether the libopcodes styling support should be used."),_(
"\
1536When enabled, GDB will try to make use of the builtin libopcodes styling\n\
1537support, to style the disassembler output. Not every architecture has\n\
1538styling support within libopcodes, so enabling this is not a guarantee\n\
1539that libopcodes styling will be available.\n\
1541When this option is disabled, GDB will make use of the Python Pygments\n\
1542package (if available) to style the disassembler output.\n\
1544All disassembler styling can be disabled with:\n\
1546 set style disassembler enabled off"),
1549 &maint_set_libopcodes_styling_cmdlist,
1550 &maint_show_libopcodes_styling_cmdlist);
gdb_static_assert(sizeof(splay_tree_key) >=sizeof(CORE_ADDR *))
void * xcalloc(size_t number, size_t size)
struct gdbarch * get_current_arch(void)
struct gdbarch * target_gdbarch(void)
ui_file_style style() const
gdb::byte_vector m_opcode_data
int pretty_print_insn(const struct disasm_insn *insn, gdb_disassembly_flags flags)
const char * c_str() const
const std::string & string()
virtual bool can_emit_style_escape()
virtual void puts(const char *str)
void printf(const char *,...) ATTRIBUTE_PRINTF(2
void void void spaces(int numspaces)
void field_core_addr(const char *fldname, struct gdbarch *gdbarch, CORE_ADDR address)
void field_string(const char *fldname, const char *string, const ui_file_style &style=ui_file_style())
void field_signed(const char *fldname, LONGEST value)
void text(const char *string)
void field_stream(const char *fldname, string_file &stream, const ui_file_style &style=ui_file_style())
void field_unsigned(const char *fldname, ULONGEST value)
struct cmd_list_element * showlist
struct cmd_list_element * setlist
struct cmd_list_element * maintenance_show_cmdlist
struct cmd_list_element * maintenance_set_cmdlist
void set_cmd_completer(struct cmd_list_element *cmd, completer_ftype *completer)
set_show_commands add_setshow_prefix_cmd(const char *name, command_class theclass, const char *set_doc, const char *show_doc, cmd_list_element **set_subcommands_list, cmd_list_element **show_subcommands_list, cmd_list_element **set_list, cmd_list_element **show_list)
set_show_commands add_setshow_boolean_cmd(const char *name, enum command_class theclass, bool *var, const char *set_doc, const char *show_doc, const char *help_doc, cmd_func_ftype *set_func, show_value_ftype *show_func, struct cmd_list_element **set_list, struct cmd_list_element **show_list)
set_show_commands add_setshow_string_noescape_cmd(const char *name, enum command_class theclass, std::string *var, const char *set_doc, const char *show_doc, const char *help_doc, cmd_func_ftype *set_func, show_value_ftype *show_func, struct cmd_list_element **set_list, struct cmd_list_element **show_list)
void complete_on_enum(completion_tracker &tracker, const char *const *enumlist, const char *text, const char *word)
bool disassembler_styling
cli_style_option address_style
cli_style_option function_name_style
cli_style_option disasm_mnemonic_style
cli_style_option disasm_register_style
cli_style_option disasm_immediate_style
cli_style_option disasm_comment_style
void read_code(CORE_ADDR memaddr, gdb_byte *myaddr, ssize_t len)
void memory_error(enum target_xfer_status err, CORE_ADDR memaddr)
const char * pc_prefix(CORE_ADDR)
void print_address(struct gdbarch *, CORE_ADDR, struct ui_file *)
@ DISASSEMBLY_SOURCE_DEPRECATED
@ DISASSEMBLY_SPECULATIVE
static bool line_is_less_than(const deprecated_dis_line_entry &mle1, const deprecated_dis_line_entry &mle2)
void gdb_disassembly(struct gdbarch *gdbarch, struct ui_out *uiout, gdb_disassembly_flags flags, int how_many, CORE_ADDR low, CORE_ADDR high)
static htab_t allocate_dis_line_table(void)
static int dump_insns(struct gdbarch *gdbarch, struct ui_out *uiout, CORE_ADDR low, CORE_ADDR high, int how_many, gdb_disassembly_flags flags, CORE_ADDR *end_pc)
void _initialize_disasm()
int gdb_print_insn(struct gdbarch *gdbarch, CORE_ADDR memaddr, struct ui_file *stream, int *branch_delay_insns)
int gdb_buffered_insn_length(struct gdbarch *gdbarch, const gdb_byte *insn, int max_len, CORE_ADDR addr)
static int line_has_code_p(htab_t table, struct symtab *symtab, int line)
static void do_mixed_source_and_assembly_deprecated(struct gdbarch *gdbarch, struct ui_out *uiout, struct symtab *symtab, CORE_ADDR low, CORE_ADDR high, int how_many, gdb_disassembly_flags flags)
static void add_dis_line_entry(htab_t table, struct symtab *symtab, int line)
char * get_disassembler_options(struct gdbarch *gdbarch)
static int eq_dis_line_entry(const void *item_lhs, const void *item_rhs)
static void set_use_libopcodes_styling(const char *args, int from_tty, struct cmd_list_element *c)
static bool use_libopcodes_styling
static hashval_t hash_dis_line_entry(const void *item)
static void do_assembly_only(struct gdbarch *gdbarch, struct ui_out *uiout, CORE_ADDR low, CORE_ADDR high, int how_many, gdb_disassembly_flags flags)
static std::string prospective_options
int gdb_insn_length(struct gdbarch *gdbarch, CORE_ADDR addr)
static void show_disassembler_options_sfunc(struct ui_file *file, int from_tty, struct cmd_list_element *c, const char *value)
static void set_disassembler_options_sfunc(const char *args, int from_tty, struct cmd_list_element *c)
static std::string get_all_disassembler_options(struct gdbarch *gdbarch)
static void disassembler_options_completer(struct cmd_list_element *ignore, completion_tracker &tracker, const char *text, const char *word)
static int gdb_print_insn_1(struct gdbarch *gdbarch, CORE_ADDR vma, struct disassemble_info *info)
void set_disassembler_options(const char *prospective_options)
static bool use_libopcodes_styling_option
static void do_mixed_source_and_assembly(struct gdbarch *gdbarch, struct ui_out *uiout, struct symtab *main_symtab, CORE_ADDR low, CORE_ADDR high, int how_many, gdb_disassembly_flags flags)
static void show_use_libopcodes_styling(struct ui_file *file, int from_tty, struct cmd_list_element *c, const char *value)
gdb::optional< int > ext_lang_print_insn(struct gdbarch *gdbarch, CORE_ADDR address, struct disassemble_info *info)
gdb::optional< std::string > ext_lang_colorize_disasm(const std::string &content, gdbarch *gdbarch)
enum bfd_endian gdbarch_byte_order(struct gdbarch *gdbarch)
enum bfd_endian gdbarch_byte_order_for_code(struct gdbarch *gdbarch)
char ** gdbarch_disassembler_options(struct gdbarch *gdbarch)
const char * gdbarch_disassembler_options_implicit(struct gdbarch *gdbarch)
int gdbarch_print_insn(struct gdbarch *gdbarch, bfd_vma vma, struct disassemble_info *info)
const disasm_options_and_args_t * gdbarch_valid_disassembler_options(struct gdbarch *gdbarch)
const struct bfd_arch_info * gdbarch_bfd_arch_info(struct gdbarch *gdbarch)
mach_port_t mach_port_t name mach_port_t mach_port_t name kern_return_t err
mach_port_t kern_return_t mach_port_t mach_msg_type_name_t msgportsPoly mach_port_t kern_return_t pid_t pid mach_port_t kern_return_t mach_port_t task mach_port_t kern_return_t int flags
int build_address_symbolic(struct gdbarch *gdbarch, CORE_ADDR addr, bool do_demangle, bool prefer_sym_over_minsym, std::string *name, int *offset, std::string *filename, int *line, int *unmapped)
static int branch_delay_insns
void(* func)(remote_target *remote, char *)
const char * symtab_to_filename_for_display(struct symtab *symtab)
void print_source_lines(struct symtab *s, int line, int stopline, print_source_lines_flags flags)
@ PRINT_SOURCE_LINES_FILENAME
unsigned int is_speculative
std::string m_disassembler_options_holder
void(*)(int, bfd_vma, struct disassemble_info *) LIBOPCODE_CALLBACK_NOEXCEPT memory_error_ftype
int(*)(void *, const char *,...) LIBOPCODE_CALLBACK_NOEXCEPT fprintf_ftype
int(*)(void *, enum disassembler_style, const char *,...) LIBOPCODE_CALLBACK_NOEXCEPT fprintf_styled_ftype
gdb_disassemble_info(struct gdbarch *gdbarch, read_memory_ftype read_memory_func, memory_error_ftype memory_error_func, print_address_ftype print_address_func, fprintf_ftype fprintf_func, fprintf_styled_ftype fprintf_styled_func)
void(*)(bfd_vma, struct disassemble_info *) LIBOPCODE_CALLBACK_NOEXCEPT print_address_ftype
virtual ~gdb_disassemble_info()
int(*)(bfd_vma, bfd_byte *, unsigned int, struct disassemble_info *) LIBOPCODE_CALLBACK_NOEXCEPT read_memory_ftype
struct disassemble_info * disasm_info()
struct disassemble_info m_di
static int dis_asm_read_memory(bfd_vma memaddr, gdb_byte *myaddr, unsigned int len, struct disassemble_info *info) noexcept
bool use_ext_lang_for_styling() const
gdb_disassembler(struct gdbarch *gdbarch, struct ui_file *file)
bool use_libopcodes_for_styling() const
static void dis_asm_memory_error(int err, bfd_vma memaddr, struct disassemble_info *info) noexcept
int print_insn(CORE_ADDR memaddr, int *branch_delay_insns=NULL)
static bool use_ext_lang_colorization_p
gdb::optional< CORE_ADDR > m_err_memaddr
static void dis_asm_print_address(bfd_vma addr, struct disassemble_info *info) noexcept
gdb_non_printing_buffer_disassembler(struct gdbarch *gdbarch, gdb::array_view< const gdb_byte > buffer, CORE_ADDR insn_address)
static int static int null_fprintf_styled_func(void *stream, enum disassembler_style style, const char *format,...) noexcept ATTRIBUTE_PRINTF(3
static int null_fprintf_func(void *stream, const char *format,...) noexcept ATTRIBUTE_PRINTF(2
static int fprintf_func(void *dis_info, const char *format,...) noexcept ATTRIBUTE_PRINTF(2
struct ui_file * stream()
void set_in_comment(bool c)
static int static int fprintf_styled_func(void *dis_info, enum disassembler_style style, const char *format,...) noexcept ATTRIBUTE_PRINTF(3
static int static int bool in_comment_p() const
static ui_file * stream_from_gdb_disassemble_info(void *dis_info)
struct linetable_entry item[1]
struct linetable * linetable() const
struct symtab * find_pc_line_symtab(CORE_ADDR pc)
struct symtab_and_line find_pc_line(CORE_ADDR pc, int notcurrent)
int target_read_code(CORE_ADDR memaddr, gdb_byte *myaddr, ssize_t len)
void gdb_vprintf(struct ui_file *stream, const char *format, va_list args)
void gdb_printf(struct ui_file *stream, const char *format,...)
void fputs_styled(const char *linebuffer, const ui_file_style &style, struct ui_file *stream)
void gdb_flush(struct ui_file *stream)
void gdb_puts(const char *linebuffer, struct ui_file *stream)