[MCJIT] Make the RuntimeDyldChecker stub_addr builtin use file names rather than
authorLang Hames <lhames@gmail.com>
Tue, 29 Jul 2014 20:40:37 +0000 (20:40 +0000)
committerLang Hames <lhames@gmail.com>
Tue, 29 Jul 2014 20:40:37 +0000 (20:40 +0000)
full paths for its first argument.

This allows us to remove the annoying sed lines in the test cases, and write
direct references to file names in stub_addr calls (rather than <filename>
placeholders).

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

lib/ExecutionEngine/RuntimeDyld/RuntimeDyldChecker.cpp
lib/ExecutionEngine/RuntimeDyld/RuntimeDyldCheckerImpl.h
test/ExecutionEngine/RuntimeDyld/AArch64/MachO_ARM64_relocations.s
test/ExecutionEngine/RuntimeDyld/X86/MachO_x86-64_PIC_relocations.s

index 308d80ef95e8620a1cc8b169462da2f27d8fe4f5..135444f9b5bb8138732090ddaeb06d317df88ddd 100644 (file)
@@ -13,6 +13,7 @@
 #include "llvm/MC/MCDisassembler.h"
 #include "llvm/MC/MCInst.h"
 #include "llvm/Support/StringRefMemoryObject.h"
+#include "llvm/Support/Path.h"
 #include "RuntimeDyldCheckerImpl.h"
 #include "RuntimeDyldImpl.h"
 #include <cctype>
@@ -772,8 +773,9 @@ RuntimeDyldCheckerImpl::getSubsectionStartingAt(StringRef Name) const {
 }
 
 void RuntimeDyldCheckerImpl::registerStubMap(
-    StringRef FileName, unsigned SectionID,
+    StringRef FilePath, unsigned SectionID,
     const RuntimeDyldImpl::StubMap &RTDyldStubs) {
+  StringRef FileName = sys::path::filename(FilePath);
   const SectionEntry &Section = getRTDyld().Sections[SectionID];
   StringRef SectionName = Section.Name;
   for (auto &StubMapEntry : RTDyldStubs) {
index 8adde62448a6fb8f0f05c229d08281c6a383b9a0..b3b16da52103a7c359d52a4c9166636689629d12 100644 (file)
@@ -34,7 +34,7 @@ private:
   uint64_t getSymbolLinkerAddr(StringRef Symbol) const;
   uint64_t getSymbolRemoteAddr(StringRef Symbol) const;
   uint64_t readMemoryAtAddr(uint64_t Addr, unsigned Size) const;
-  std::pair<uint64_t, std::string> getStubAddrFor(StringRef FileName,
+  std::pair<uint64_t, std::string> getStubAddrFor(StringRef FilePath,
                                                   StringRef SectionName,
                                                   StringRef Symbol,
                                                   bool IsInsideLoad) const;
index 4713c118e125f1c7e2fcf15d724162354016789c..29c95e6ce353af8ddf8a1f3d386ca1ba33aa77be 100644 (file)
@@ -1,6 +1,5 @@
 # RUN: llvm-mc -triple=arm64-apple-ios7.0.0 -code-model=small -relocation-model=pic -filetype=obj -o %T/foo.o %s
-# RUN: sed "s,<filename>,%/T/foo.o,g" %s > %T/foo.s
-# RUN: llvm-rtdyld -triple=arm64-apple-ios7.0.0 -verify -check=%T/foo.s %/T/foo.o
+# RUN: llvm-rtdyld -triple=arm64-apple-ios7.0.0 -verify -check=%s %/T/foo.o
 
     .section  __TEXT,__text,regular,pure_instructions
     .ios_version_min 7, 0
@@ -39,15 +38,14 @@ ldr1:
     ldr  x0, [x0, _ptr@PAGEOFF]
     ret
 
-
 # Test ARM64_RELOC_GOT_LOAD_PAGE21 and ARM64_RELOC_GOT_LOAD_PAGEOFF12
 # relocation. adrp encodes the PC-relative page (4 KiB) difference between the
 # adrp instruction and the GOT entry for ptr. ldr encodes the offset of the GOT
 # entry within the page. The ldr instruction perfroms an implicit shift on the
 # encoded immediate (imm<<3).
-# rtdyld-check:  *{8}(stub_addr(<filename>, __text, _ptr)) = _ptr
-# rtdyld-check:  decode_operand(adrp2, 1) = (stub_addr(<filename>, __text, _ptr)[32:12] - adrp2[32:12])
-# rtdyld-check:  decode_operand(ldr2, 2) = stub_addr(<filename>, __text, _ptr)[11:3]
+# rtdyld-check:  *{8}(stub_addr(foo.o, __text, _ptr)) = _ptr
+# rtdyld-check:  decode_operand(adrp2, 1) = (stub_addr(foo.o, __text, _ptr)[32:12] - adrp2[32:12])
+# rtdyld-check:  decode_operand(ldr2, 2) = stub_addr(foo.o, __text, _ptr)[11:3]
     .globl  _test_adrp_ldr
     .align  2
 _test_got_adrp_ldr:
index 728d07396732d0fb786bb47759acbdaf27efb3f1..cbaadacbce52d95758164ee5d1a31b9e37430263 100644 (file)
@@ -1,6 +1,5 @@
 # RUN: llvm-mc -triple=x86_64-apple-macosx10.9 -relocation-model=pic -filetype=obj -o %T/foo.o %s
-# RUN: sed "s,<filename>,%/T/foo.o,g" %s > %T/foo.s
-# RUN: llvm-rtdyld -triple=x86_64-apple-macosx10.9 -verify -check=%T/foo.s %/T/foo.o
+# RUN: llvm-rtdyld -triple=x86_64-apple-macosx10.9 -verify -check=%s %/T/foo.o
 
         .section       __TEXT,__text,regular,pure_instructions
        .globl  foo
@@ -24,8 +23,8 @@ insn2:
 # Test PC-rel GOT relocation.
 # Verify both the contents of the GOT entry for y, and that the movq instruction
 # references the correct GOT entry address:
-# rtdyld-check: *{8}(stub_addr(<filename>, __text, y)) = y
-# rtdyld-check: decode_operand(insn3, 4) = stub_addr(<filename>, __text, y) - next_pc(insn3)
+# rtdyld-check: *{8}(stub_addr(foo.o, __text, y)) = y
+# rtdyld-check: decode_operand(insn3, 4) = stub_addr(foo.o, __text, y) - next_pc(insn3)
 insn3:
         movq   y@GOTPCREL(%rip), %rax