]> granicus.if.org Git - llvm/commitdiff
[LLVM][MIPS] Fix createStubFunction to emit JR encoding based on Arch.
authorNitesh Jain <nitesh.jain@imgtec.com>
Fri, 15 Jul 2016 12:56:37 +0000 (12:56 +0000)
committerNitesh Jain <nitesh.jain@imgtec.com>
Fri, 15 Jul 2016 12:56:37 +0000 (12:56 +0000)
Reviewers: vkalintiris, dsanders

Subscribers: jaydeep, bhushan, mohit.bhakkad, slthakur, llvm-commits

Differential Revision: https://reviews.llvm.org/D21172

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275559 91177308-0d34-0410-b5e6-96231b3b80d8

lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp
lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.cpp

index 60479d4bc7680ee00447a435b3c336502bf74733..1dfbe31f271757a7c67a480fa0e7645c09bf06d6 100644 (file)
@@ -816,7 +816,10 @@ uint8_t *RuntimeDyldImpl::createStubFunction(uint8_t *Addr,
     // 8:   03200008        jr      t9.
     // c:   00000000        nop.
     const unsigned LuiT9Instr = 0x3c190000, AdduiT9Instr = 0x27390000;
-    const unsigned JrT9Instr = 0x03200008, NopInstr = 0x0;
+    const unsigned NopInstr = 0x0;
+    unsigned JrT9Instr = 0x03200008;
+    if ((AbiVariant & ELF::EF_MIPS_ARCH) == ELF::EF_MIPS_ARCH_32R6)
+        JrT9Instr = 0x03200009;
 
     writeBytesUnaligned(LuiT9Instr, Addr, 4);
     writeBytesUnaligned(AdduiT9Instr, Addr+4, 4);
index 8065fa3fb05bc9cb35e4f25366146c8c736155e0..9cbdb13a3572aefdd209061a2d168a6bb8df3a1d 100644 (file)
@@ -1402,8 +1402,12 @@ RuntimeDyldELF::processRelocationRef(
         // Create a new stub function.
         DEBUG(dbgs() << " Create a new stub function\n");
         Stubs[Value] = Section.getStubOffset();
+
+        unsigned AbiVariant;
+        O.getPlatformFlags(AbiVariant);
+
         uint8_t *StubTargetAddr = createStubFunction(
-            Section.getAddressWithOffset(Section.getStubOffset()));
+            Section.getAddressWithOffset(Section.getStubOffset()), AbiVariant);
 
         // Creating Hi and Lo relocations for the filled stub instructions.
         RelocationEntry REHi(SectionID, StubTargetAddr - Section.getAddress(),