aboutsummaryrefslogtreecommitdiff
path: root/gdb/arc-tdep.h
diff options
context:
space:
mode:
authorAndrew Burgess <aburgess@redhat.com>2022-04-04 15:48:19 +0100
committerAndrew Burgess <aburgess@redhat.com>2022-06-15 09:44:55 +0100
commit8b39b1e7ab20609ced6a224cae440f19e6ae02c1 (patch)
tree015e347bb39704d9424f3068c1ea372146d90b48 /gdb/arc-tdep.h
parent15e15b2d9cd3b1db68f99cd3b047352142ddfd1c (diff)
downloadgdb-8b39b1e7ab20609ced6a224cae440f19e6ae02c1.zip
gdb-8b39b1e7ab20609ced6a224cae440f19e6ae02c1.tar.gz
gdb-8b39b1e7ab20609ced6a224cae440f19e6ae02c1.tar.bz2
gdb: refactor the non-printing disassemblers
This commit started from an observation I made while working on some other disassembler patches, that is, that the function gdb_buffered_insn_length, is broken ... sort of. I noticed that the gdb_buffered_insn_length function doesn't set up the application data field if the disassemble_info structure. Further, I noticed that some architectures, for example, ARM, require that the application_data field be set, see gdb_print_insn_arm in arm-tdep.c. And so, if we ever use gdb_buffered_insn_length for ARM, then GDB will likely crash. Which is why I said only "sort of" broken. Right now we don't use gdb_buffered_insn_length with ARM, so maybe it isn't broken yet? Anyway to prove to myself that there was a problem here I extended the disassembler self tests in disasm-selftests.c to include a test of gdb_buffered_insn_length. As I run the test for all architectures, I do indeed see GDB crash for ARM. To fix this we need gdb_buffered_insn_length to create a disassembler that inherits from gdb_disassemble_info, but we also need this new disassembler to not print anything. And so, I introduce a new gdb_non_printing_disassembler class, this is a disassembler that doesn't print anything to the output stream. I then observed that both ARC and S12Z also create non-printing disassemblers, but these are slightly different. While the disassembler in gdb_non_printing_disassembler reads the instruction from a buffer, the ARC and S12Z disassemblers read from target memory using target_read_code. And so, I further split gdb_non_printing_disassembler into two sub-classes, gdb_non_printing_memory_disassembler and gdb_non_printing_buffer_disassembler. The new selftests now pass, but otherwise, there should be no user visible changes after this commit.
Diffstat (limited to 'gdb/arc-tdep.h')
-rw-r--r--gdb/arc-tdep.h5
1 files changed, 0 insertions, 5 deletions
diff --git a/gdb/arc-tdep.h b/gdb/arc-tdep.h
index ceca003..53e5d84 100644
--- a/gdb/arc-tdep.h
+++ b/gdb/arc-tdep.h
@@ -186,11 +186,6 @@ arc_arch_is_em (const struct bfd_arch_info* arch)
can't be set to an actual NULL value - that would cause a crash. */
int arc_delayed_print_insn (bfd_vma addr, struct disassemble_info *info);
-/* Return properly initialized disassemble_info for ARC disassembler - it will
- not print disassembled instructions to stderr. */
-
-struct disassemble_info arc_disassemble_info (struct gdbarch *gdbarch);
-
/* Get branch/jump target address for the INSN. Note that this function
returns branch target and doesn't evaluate if this branch is taken or not.
For the indirect jumps value depends in register state, hence can change.