diff options
author | Thomas Hebb <tommyhebb@gmail.com> | 2022-04-29 21:17:58 -0700 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2022-04-30 19:21:11 +0930 |
commit | 16089f320a9226e7cdb73e9fb4266d9e450085b2 (patch) | |
tree | bb6e791e1b2862d6204e645bf27ca312423c23da /cpu/mep.opc | |
parent | 2e920d702b43c6d21ebd1e8a49c9e976a0d2cde6 (diff) | |
download | gdb-16089f320a9226e7cdb73e9fb4266d9e450085b2.zip gdb-16089f320a9226e7cdb73e9fb4266d9e450085b2.tar.gz gdb-16089f320a9226e7cdb73e9fb4266d9e450085b2.tar.bz2 |
opcodes: don't assume ELF in riscv, csky, rl78, mep disassemblers
Currently, the get_disassembler() implementations for riscv, csky, and
rl78--and mep_print_insn() for mep--access ELF variants of union fields
without first checking that the bfd actually represents an ELF. This
causes undefined behavior and crashes when disassembling non-ELF files
(the "binary" BFD, for example). Fix that.
Diffstat (limited to 'cpu/mep.opc')
-rw-r--r-- | cpu/mep.opc | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/cpu/mep.opc b/cpu/mep.opc index 6ad0c58..278b445 100644 --- a/cpu/mep.opc +++ b/cpu/mep.opc @@ -1451,12 +1451,15 @@ mep_print_insn (CGEN_CPU_DESC cd, bfd_vma pc, disassemble_info *info) if (info->section && info->section->owner) { bfd *abfd = info->section->owner; - mep_config_index = abfd->tdata.elf_obj_data->elf_header->e_flags & EF_MEP_INDEX_MASK; - /* This instantly redefines MEP_CONFIG, MEP_OMASK, .... MEP_VLIW64 */ + if (bfd_get_flavour (abfd) == bfd_target_elf_flavour) + { + mep_config_index = abfd->tdata.elf_obj_data->elf_header->e_flags & EF_MEP_INDEX_MASK; + /* This instantly redefines MEP_CONFIG, MEP_OMASK, .... MEP_VLIW64 */ - cop_type = abfd->tdata.elf_obj_data->elf_header->e_flags & EF_MEP_COP_MASK; - if (cop_type == EF_MEP_COP_IVC2) - ivc2 = 1; + cop_type = abfd->tdata.elf_obj_data->elf_header->e_flags & EF_MEP_COP_MASK; + if (cop_type == EF_MEP_COP_IVC2) + ivc2 = 1; + } } /* Picking the right ISA bitmask for the current context is tricky. */ |