diff options
author | Andrew Burgess <andrew.burgess@embecosm.com> | 2020-09-16 10:12:39 +0100 |
---|---|---|
committer | Lifang Xia <xlf194833_xia@alibaba-inc.com> | 2020-09-17 14:52:05 +0800 |
commit | c568ac5ff708eebf6ef424e5863d3dbd874a3f62 (patch) | |
tree | 160bb166250bfb409f8a9481e5d55cedbd92490f | |
parent | c2f876e11e5c9cc818a852bd79452ffdc80bc161 (diff) | |
download | gdb-c568ac5ff708eebf6ef424e5863d3dbd874a3f62.zip gdb-c568ac5ff708eebf6ef424e5863d3dbd874a3f62.tar.gz gdb-c568ac5ff708eebf6ef424e5863d3dbd874a3f62.tar.bz2 |
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.
-rw-r--r-- | opcodes/ChangeLog | 5 | ||||
-rw-r--r-- | 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 <andrew.burgess@embecosm.com> + + * csky-dis.c (csky_get_disassembler): Don't return NULL when there + is no BFD. + 2020-09-16 Alan Modra <amodra@gmail.com> * 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; } |