diff options
author | Thiemo Seufer <ths@networkno.de> | 2001-08-07 12:36:13 +0000 |
---|---|---|
committer | Thiemo Seufer <ths@networkno.de> | 2001-08-07 12:36:13 +0000 |
commit | 21d34b1c68bbfe3fcf4b55fbcb5c2adc3bb24c34 (patch) | |
tree | 3f1baf81cf5000d63c25550907007fa0a80019a7 /opcodes/mips-dis.c | |
parent | 9ee7cc8691edd16e93fafe87f9620b72c9352f18 (diff) | |
download | fsf-binutils-gdb-21d34b1c68bbfe3fcf4b55fbcb5c2adc3bb24c34.zip fsf-binutils-gdb-21d34b1c68bbfe3fcf4b55fbcb5c2adc3bb24c34.tar.gz fsf-binutils-gdb-21d34b1c68bbfe3fcf4b55fbcb5c2adc3bb24c34.tar.bz2 |
* mips-dis.c (print_insn_arg): Don't use software integer registers
for coprocessor registers.
(_print_insn_mips): Get distinction between old ABI and new ABI right.
Diffstat (limited to 'opcodes/mips-dis.c')
-rw-r--r-- | opcodes/mips-dis.c | 42 |
1 files changed, 23 insertions, 19 deletions
diff --git a/opcodes/mips-dis.c b/opcodes/mips-dis.c index 3d737f6..97f263d 100644 --- a/opcodes/mips-dis.c +++ b/opcodes/mips-dis.c @@ -256,13 +256,13 @@ print_insn_arg (d, l, pc, info) break; case 'E': - (*info->fprintf_func) (info->stream, "%s", - reg_names[(l >> OP_SH_RT) & OP_MASK_RT]); + (*info->fprintf_func) (info->stream, "$%d", + (l >> OP_SH_RT) & OP_MASK_RT); break; case 'G': - (*info->fprintf_func) (info->stream, "%s", - reg_names[(l >> OP_SH_RD) & OP_MASK_RD]); + (*info->fprintf_func) (info->stream, "$%d", + (l >> OP_SH_RD) & OP_MASK_RD); break; case 'N': @@ -395,17 +395,19 @@ mips_isa_type (mach, isa, cputype) } } -/* Figure out ISA from disassemble_info data */ +/* Check if the object uses NewABI conventions. */ static int -get_mips_isa (info) - struct disassemble_info *info; +is_newabi(header) + Elf_Internal_Ehdr *header; { - int isa; - int cpu; + if ((header->e_flags + & (E_MIPS_ABI_EABI32 | E_MIPS_ABI_EABI64 | EF_MIPS_ABI2)) != 0 + || (header->e_ident[EI_CLASS] == ELFCLASS64 + && (header->e_flags & E_MIPS_ABI_O64) == 0)) + return 1; - mips_isa_type (info->mach, &isa, &cpu); - return isa; + return 0; } /* Print the mips instruction at address MEMADDR in debugged memory, @@ -522,14 +524,16 @@ _print_insn_mips (memaddr, info, endianness) #endif /* Use mips64_reg_names for new ABI. */ - if (info->flavour == bfd_target_elf_flavour - && info->symbols != NULL - && (((get_mips_isa(info) | INSN_ISA_MASK) & ISA_MIPS2) != 0) - && ((elf_elfheader (bfd_asymbol_bfd(*(info->symbols)))->e_flags - & EF_MIPS_ABI2) != 0)) - reg_names = mips64_reg_names; - else - reg_names = mips32_reg_names; + reg_names = mips32_reg_names; + + if (info->flavour == bfd_target_elf_flavour && info->symbols != NULL) + { + Elf_Internal_Ehdr *header; + + header = elf_elfheader(bfd_asymbol_bfd(*(info->symbols))); + if (is_newabi(header)) + reg_names = mips64_reg_names; + } status = (*info->read_memory_func) (memaddr, buffer, INSNLEN, info); if (status == 0) |