From c568ac5ff708eebf6ef424e5863d3dbd874a3f62 Mon Sep 17 00:00:00 2001 From: Andrew Burgess Date: Wed, 16 Sep 2020 10:12:39 +0100 Subject: opcodes/csky: return the default disassembler when there is no bfd The disassembler function should return a valid disassembler function even when there is no BFD present. This is implied (I believe) by the comment in dis-asm.h which says the BFD may be NULL. Further, it makes sense when considering that the disassembler is used in GDB, and GDB may connect to a target and perform debugging even without a BFD being supplied. This commit makes the csky_get_disassembler function return the default disassembler configuration when no bfd is supplied, this is the same default configuration as is used when a BFD is supplied, but the BFD has no attributes section. Before the change configuring GDB with --enable-targets=all and running the tests gdb.base/all-architectures-2.exp results in many errors, but after this change there are no failures. opcodes/ChangeLog: * csky-dis.c (csky_get_disassembler): Don't return NULL when there is no BFD. --- opcodes/ChangeLog | 5 +++++ opcodes/csky-dis.c | 32 +++++++++++++++++--------------- 2 files changed, 22 insertions(+), 15 deletions(-) diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog index 532dde4..6243511 100644 --- a/opcodes/ChangeLog +++ b/opcodes/ChangeLog @@ -1,3 +1,8 @@ +2020-09-16 Andrew Burgess + + * csky-dis.c (csky_get_disassembler): Don't return NULL when there + is no BFD. + 2020-09-16 Alan Modra * ppc-dis.c (ppc_symbol_is_valid): Adjust elf_symbol_from invocation. diff --git a/opcodes/csky-dis.c b/opcodes/csky-dis.c index ba0f460..a28160b 100644 --- a/opcodes/csky-dis.c +++ b/opcodes/csky-dis.c @@ -239,23 +239,25 @@ csky_get_disassembler (bfd *abfd) obj_attribute *attr; const char *sec_name = NULL; if (!abfd) - return NULL; - - mach_flag = elf_elfheader (abfd)->e_flags; - - sec_name = get_elf_backend_data (abfd)->obj_attrs_section; - /* Skip any input that hasn't attribute section. - This enables to link object files without attribute section with - any others. */ - if (bfd_get_section_by_name (abfd, sec_name) != NULL) + dis_info.isa = CSKY_DEFAULT_ISA; + else { - attr = elf_known_obj_attributes_proc (abfd); - dis_info.isa = attr[Tag_CSKY_ISA_EXT_FLAGS].i; - dis_info.isa <<= 32; - dis_info.isa |= attr[Tag_CSKY_ISA_FLAGS].i; + mach_flag = elf_elfheader (abfd)->e_flags; + + sec_name = get_elf_backend_data (abfd)->obj_attrs_section; + /* Skip any input that hasn't attribute section. + This enables to link object files without attribute section with + any others. */ + if (bfd_get_section_by_name (abfd, sec_name) != NULL) + { + attr = elf_known_obj_attributes_proc (abfd); + dis_info.isa = attr[Tag_CSKY_ISA_EXT_FLAGS].i; + dis_info.isa <<= 32; + dis_info.isa |= attr[Tag_CSKY_ISA_FLAGS].i; + } + else + dis_info.isa = CSKY_DEFAULT_ISA; } - else - dis_info.isa = CSKY_DEFAULT_ISA; return print_insn_csky; } -- cgit v1.1