From c5e9bf54c7ba993ce5c5460fc572045ca4d80492 Mon Sep 17 00:00:00 2001 From: Simon Atanasyan Date: Tue, 25 Nov 2014 05:57:55 +0000 Subject: [PATCH] [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 --- include/llvm/Object/ELFObjectFile.h | 5 +++-- test/Object/Inputs/micro-mips.elf-mipsel | Bin 0 -> 2394 bytes test/Object/Mips/objdump-micro-mips.test | 12 ++++++++++++ 3 files changed, 15 insertions(+), 2 deletions(-) create mode 100755 test/Object/Inputs/micro-mips.elf-mipsel create mode 100644 test/Object/Mips/objdump-micro-mips.test 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 0000000000000000000000000000000000000000..80b8472c25bcb39443df5cc138856e72550880f8 GIT binary patch literal 2394 zcmb7FOKTKC5U$OvF}^n%Fd*s@JVYgvH5(Gd2YHxCU}H9#i>Glm`^e%xhM7_HWY8a= zzrmBo`~U;_30^$}ya);&jCc^DjNjMOot>;6^n;q}>Uwl{^>o#`h-%> z5*Y`7n-)2k5r15=(ksJ~kz+LVzT;zP5MvTd6?LLv0(gU1qytJysrVa^H>{MRBIZfG zTHgbH6hRDaKqegoagF7VVHxZX&_DCX?EVS*V;|r4&x(9_ky5eWVqNZY3!6~;0Y40R z1#|?&_}IF9#oqhD2OyjT=lM^8`alTbF$aj_@hphrfiaGf;pZKN3_p+AgrCPX{ukT_ z;~WBUUFPR+;F%ep=i+{N4*JIV#-Izld%{A*QE=W9k--KlF4c@lz^-Ov@M5;Lb11WpjTJ~bFa(dztKJhz3!y(4GR zfX)1mXnQv;XQjAvPKuwmqcrCFkeBNxsDC}(BQv>|>znyc(XZVB+1|}4+aasiKNJnF zKR@w)j&`wcMt(&D@E_ds$4Pte9ODGxQsV(V_F?L06h&r+cYhAVyV2N6>iKVW>DQT4 z=5e**wrbhO6+fuATiLulVdt{Lq5r7$FgrFjHgR?GVs^OEc-$P_o14syUlg%}r_InU zfroy~*UZST)atEjTkP`FmfNhaioNCrYf6Mu%tK#nztW(I*y?8N#f9QM+bz|r4YwAE z?Ui9tYlmX5wwujL3xj64QhHRQO@7QA^j|ptA-+NW`^lPReEB|@qYEIu3ECxV58n+z zJLY->WZn|%1?iU7gDE@O=0W^z7*BmL*uv2G(uVcq8VFaROtxqPV!bgi|G+FJ_|_SZ zb%$i?E^W>J3K-LeXW`ozXYxg|PwGC8{88 zm*E@#3J0?m^&HdoA&7Q4kOC$r%@~|IQm8qY!lYS9%d{a_hq*Tc+C4V{xUnN=?hLM@ zU~XWN50^0*o_l1DlkvVF5iQIan0Q7`a{gb0rB~&D6wC3-{8wUGub?+%snz4VkM;3i z$2*Q?-e#xPvNjXEGlG4aV9g>db&5`{wNwXCDy`QAO;1_qB*}B7QJXu~%*{@8924d| zDafqFrWXigzB98vd&N*f&t7pEa!&7;y+S?WMD4!`eX`ciK<@4h{I3Z14u^w;e;H!3 zH>`E(1;xm3k2LFEV6TdE>;9eT#f4e+h`qkh-7XRhLbVg!H~!jlRPSKpiCf8UFuMCa literal 0 HcmV?d00001 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 -- 2.34.1