diff options
-rw-r--r-- | llvm/include/llvm/Object/ELFObjectFile.h | 5 | ||||
-rwxr-xr-x | llvm/test/Object/Inputs/micro-mips.elf-mipsel | bin | 0 -> 2394 bytes | |||
-rw-r--r-- | llvm/test/Object/Mips/objdump-micro-mips.test | 12 |
3 files changed, 15 insertions, 2 deletions
diff --git a/llvm/include/llvm/Object/ELFObjectFile.h b/llvm/include/llvm/Object/ELFObjectFile.h index 3fcd98de9dc..c3e3da7074b 100644 --- a/llvm/include/llvm/Object/ELFObjectFile.h +++ b/llvm/include/llvm/Object/ELFObjectFile.h @@ -280,8 +280,9 @@ std::error_code ELFObjectFile<ELFT>::getSymbolAddress(DataRefImpl Symb, const Elf_Ehdr *Header = EF.getHeader(); Result = ESym->st_value; - // Clear the ARM/Thumb indicator flag. - if (Header->e_machine == ELF::EM_ARM && ESym->getType() == ELF::STT_FUNC) + // Clear the ARM/Thumb or microMIPS indicator flag. + if ((Header->e_machine == ELF::EM_ARM || Header->e_machine == ELF::EM_MIPS) && + ESym->getType() == ELF::STT_FUNC) Result &= ~1; if (Header->e_type == ELF::ET_REL) diff --git a/llvm/test/Object/Inputs/micro-mips.elf-mipsel b/llvm/test/Object/Inputs/micro-mips.elf-mipsel Binary files differnew file mode 100755 index 00000000000..80b8472c25b --- /dev/null +++ b/llvm/test/Object/Inputs/micro-mips.elf-mipsel diff --git a/llvm/test/Object/Mips/objdump-micro-mips.test b/llvm/test/Object/Mips/objdump-micro-mips.test new file mode 100644 index 00000000000..0f28dc1a5f1 --- /dev/null +++ b/llvm/test/Object/Mips/objdump-micro-mips.test @@ -0,0 +1,12 @@ +RUN: llvm-objdump -d -mattr=micromips %p/../Inputs/micro-mips.elf-mipsel \ +RUN: | FileCheck %s + +CHECK: foo: +CHECK-NEXT: 330: bd 33 f8 ff addiu $sp, $sp, -8 +CHECK-NEXT: 334: dd fb 04 00 sw $fp, 4($sp) +CHECK-NEXT: 338: 1d 00 50 f1 addu $fp, $sp, $zero + +CHECK: bar: +CHECK-NEXT: 350: a2 41 02 00 lui $2, 2 +CHECK-NEXT: 354: 42 30 8f 80 addiu $2, $2, -32625 +CHECK-NEXT: 358: bd 33 e8 ff addiu $sp, $sp, -24 |