1401d2fe67
Mixing MIPS16 and microMIPS code in a single binary isn't usually supported but GAS happily produces such code if requested. However it is not correctly disassembled even if a symbol table is available and function symbols are correctly anotated with the ISA mode. This is because the ELF-header global microMIPS ASE flag takes precedence over MIPS16 function annotation, causing them to be treated as regular MIPS code. Correct the problem by respecting function symbol anotation regardless of the ELF-header flag. binutils/ * testsuite/binutils-all/mips/mixed-mips16-micromips.d: New test. * testsuite/binutils-all/mips/mixed-mips16-micromips.s: New test source. * testsuite/binutils-all/mips/mips.exp: Run the new test. opcodes/ * mips-dis.c (is_compressed_mode_p): Add `micromips_p' operand, replacing references to `micromips_ase' throughout. (_print_insn_mips): Don't use file-level microMIPS annotation to determine the disassembly mode with the symbol table.
32 lines
446 B
ArmAsm
32 lines
446 B
ArmAsm
.align 4, 0
|
|
.set mips16
|
|
.globl foo
|
|
.ent foo
|
|
foo:
|
|
lw $v0, .foo.data
|
|
lw $v1, 0($v0)
|
|
move $t9, $v1
|
|
jr $v1
|
|
|
|
.type .foo.data, @object
|
|
.foo.data:
|
|
.word 0x40404040
|
|
.size .foo.data, . - .foo.data
|
|
.end foo
|
|
.set nomips16
|
|
|
|
.align 4, 0
|
|
.set micromips
|
|
.globl bar
|
|
.ent bar
|
|
bar:
|
|
lui $v1, 0
|
|
lw $t9, 0($v1)
|
|
jrc $t9
|
|
nop
|
|
.end bar
|
|
.set nomicromips
|
|
|
|
# Force some (non-delay-slot) zero bytes, to make 'objdump' print ...
|
|
.align 4, 0
|
|
.space 16
|