From: Simon Atanasyan Date: Tue, 25 Nov 2014 05:57:55 +0000 (+0000) Subject: [Object][Mips] Return address of MIPS symbol with cleared microMIPS indicator bit X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=c5e9bf54c7ba993ce5c5460fc572045ca4d80492;p=oota-llvm.git [Object][Mips] Return address of MIPS symbol with cleared microMIPS indicator bit git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@222726 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/Object/ELFObjectFile.h b/include/llvm/Object/ELFObjectFile.h index 3fcd98de9dc..c3e3da7074b 100644 --- a/include/llvm/Object/ELFObjectFile.h +++ b/include/llvm/Object/ELFObjectFile.h @@ -280,8 +280,9 @@ std::error_code ELFObjectFile::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/test/Object/Inputs/micro-mips.elf-mipsel b/test/Object/Inputs/micro-mips.elf-mipsel new file mode 100755 index 00000000000..80b8472c25b Binary files /dev/null and b/test/Object/Inputs/micro-mips.elf-mipsel differ diff --git a/test/Object/Mips/objdump-micro-mips.test b/test/Object/Mips/objdump-micro-mips.test new file mode 100644 index 00000000000..0f28dc1a5f1 --- /dev/null +++ b/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