# RUN: rm -rf %t && mkdir -p %t
# RUN: llvm-mc -triple=arm64-apple-darwin19 -filetype=obj -o %t/macho_reloc.o %s
-# RUN: llvm-jitlink -noexec -define-abs external_data=0xdeadbeef -define-abs external_func=0xcafef00d -check=%s %t/macho_reloc.o
+# RUN: llvm-jitlink -noexec -abs external_data=0xdeadbeef -abs external_func=0xcafef00d -check=%s %t/macho_reloc.o
.section __TEXT,__text,regular,pure_instructions
# RUN: -o %t/elf_riscv32_non_pc_indirect_reloc.o %s
# RUN: llvm-jitlink -noexec \
# RUN: -slab-allocate 100Kb -slab-address 0x1ff00000 -slab-page-size 4096 \
-# RUN: -define-abs external_data=0x1ff10000 \
+# RUN: -abs external_data=0x1ff10000 \
# RUN: -check %s %t/elf_riscv64_non_pc_indirect_reloc.o
# RUN: llvm-jitlink -noexec \
# RUN: -slab-allocate 100Kb -slab-address 0x1ff00000 -slab-page-size 4096 \
-# RUN: -define-abs external_data=0x1ff10000 \
+# RUN: -abs external_data=0x1ff10000 \
# RUN: -check %s %t/elf_riscv32_non_pc_indirect_reloc.o
#
# RUN: -o %t/elf_riscv32_branch.o %s
# RUN: llvm-jitlink -noexec \
# RUN: -slab-allocate 100Kb -slab-address 0xfff00000 -slab-page-size 4096 \
-# RUN: -define-abs external_func=0xfe \
+# RUN: -abs external_func=0xfe \
# RUN: -check %s %t/elf_riscv64_branch.o
# RUN: llvm-jitlink -noexec \
# RUN: -slab-allocate 100Kb -slab-address 0xfff00000 -slab-page-size 4096 \
-# RUN: -define-abs external_func=0xfe \
+# RUN: -abs external_func=0xfe \
# RUN: -check %s %t/elf_riscv32_branch.o
#
# RUN: -o %t/elf_riscv32_sm_pic_reloc.o %s
# RUN: llvm-jitlink -noexec \
# RUN: -slab-allocate 100Kb -slab-address 0x1ff00000 -slab-page-size 4096 \
-# RUN: -define-abs external_func=0x1 -define-abs external_data=0x2 \
+# RUN: -abs external_func=0x1 -abs external_data=0x2 \
# RUN: -check %s %t/elf_riscv64_sm_pic_reloc.o
# RUN: llvm-jitlink -noexec \
# RUN: -slab-allocate 100Kb -slab-address 0x1ff00000 -slab-page-size 4096 \
-# RUN: -define-abs external_func=0x1 -define-abs external_data=0x2 \
+# RUN: -abs external_func=0x1 -abs external_data=0x2 \
# RUN: -check %s %t/elf_riscv32_sm_pic_reloc.o
#
# Test ELF small/PIC relocations
# RUN: -o %t/elf_riscv32_got_plt_reloc.o %s
# RUN: llvm-jitlink -noexec \
# RUN: -slab-allocate 100Kb -slab-address 0xfff00000 -slab-page-size 4096 \
-# RUN: -define-abs external_func=0x1 -define-abs external_data=0x2 \
+# RUN: -abs external_func=0x1 -abs external_data=0x2 \
# RUN: -check %s %t/elf_riscv32_got_plt_reloc.o
.text
# RUN: -o %t/elf_riscv64_got_plt_reloc.o %s
# RUN: llvm-jitlink -noexec \
# RUN: -slab-allocate 100Kb -slab-address 0xfff00000 -slab-page-size 4096 \
-# RUN: -define-abs external_func=0x1 -define-abs external_data=0x2 \
+# RUN: -abs external_func=0x1 -abs external_data=0x2 \
# RUN: -check %s %t/elf_riscv64_got_plt_reloc.o
# UNSUPPORTED: system-windows
# RUN: llvm-mc -triple=x86_64-unknown-linux -position-independent \
# RUN: -filetype=obj -o %t %s
-# RUN: llvm-jitlink -debug-only=jitlink -define-abs bar=0x01 \
-# RUN: -define-abs _ZTIi=0x02 -noexec %t 2>&1 | FileCheck %s
+# RUN: llvm-jitlink -debug-only=jitlink -abs bar=0x01 \
+# RUN: -abs _ZTIi=0x02 -noexec %t 2>&1 | FileCheck %s
#
# FIXME: This test should run on windows. Investigate spurious
# 'note: command had no output on stdout or stderr' errors, then re-enable.
# RUN: -filetype=obj -o %t/elf_sm_pic_reloc.o %s
# RUN: llvm-jitlink -noexec \
# RUN: -slab-allocate 100Kb -slab-address 0xfff00000 -slab-page-size 4096 \
-# RUN: -define-abs extern_in_range32=0xffe00000 \
+# RUN: -abs extern_in_range32=0xffe00000 \
# RUN: -check %s %t/elf_sm_pic_reloc.o
#
# RUN: -filetype=obj -o %t/elf_sm_pic_reloc.o %s
# RUN: llvm-jitlink -noexec \
# RUN: -slab-allocate 100Kb -slab-address 0xfff00000 -slab-page-size 4096 \
-# RUN: -define-abs external_data=0x1 \
-# RUN: -define-abs extern_out_of_range32=0x7fff00000000 \
+# RUN: -abs external_data=0x1 \
+# RUN: -abs extern_out_of_range32=0x7fff00000000 \
# RUN: -check %s %t/elf_sm_pic_reloc.o
#
# Test ELF small/PIC relocations.
# RUN: -filetype=obj -o %t/elf_abs_reloc.o %s
# RUN: llvm-jitlink -noexec \
# RUN: -slab-allocate 100Kb -slab-address 0xfff00000 -slab-page-size 4096 \
-# RUN: -define-abs external_data_low=0x1 \
-# RUN: -define-abs external_data_high=0xffffffff80000000 \
+# RUN: -abs external_data_low=0x1 \
+# RUN: -abs external_data_high=0xffffffff80000000 \
# RUN: -check %s %t/elf_abs_reloc.o
#
# Test ELF absolute relocations.
# REQUIRES: asserts
# RUN: llvm-mc -triple=x86_64-apple-macosx10.9 -filetype=obj -o %t %s
-# RUN: llvm-jitlink -debug-only=orc -noexec -define-abs _external_func=0x1 \
+# RUN: llvm-jitlink -debug-only=orc -noexec -abs _external_func=0x1 \
# RUN: -entry=_foo %t 2>&1 | FileCheck %s
#
# Verify that symbol dependencies are correctly propagated through local
--- /dev/null
+# RUN: llvm-mc -triple=x86_64-apple-macosx10.9 -filetype=obj -o %t.o %s
+# RUN: llvm-jitlink -noexec -alias x=y %t.o
+#
+# Check that the -alias option works.
+
+ .section __TEXT,__text,regular,pure_instructions
+ .globl _main
+ .p2align 4, 0x90
+_main:
+ movq x@GOTPCREL(%rip), %rax
+ movl (%rax), %eax
+ retq
+
+ .section __DATA,__data
+ .globl y
+ .p2align 2
+y:
+ .long 42
+
+.subsections_via_symbols
# RUN: rm -rf %t && mkdir -p %t
# RUN: llvm-mc -triple=x86_64-apple-macosx10.9 -filetype=obj -o %t/macho_weak_refs.o %s
-# RUN: llvm-jitlink -noexec -check-name=jitlink-check-bar-present -define-abs bar=0x1 -check=%s %t/macho_weak_refs.o
+# RUN: llvm-jitlink -noexec -check-name=jitlink-check-bar-present -abs bar=0x1 -check=%s %t/macho_weak_refs.o
# RUN: llvm-jitlink -noexec -check-name=jitlink-check-bar-absent -check=%s %t/macho_weak_refs.o
# Test weak reference handling by linking with and without a definition of 'bar' available.
-# RUN: llvm-jitlink -noexec -define-abs __ZTIi=0x1 -define-abs ___gxx_personality_v0=0x2 %S/Inputs/MachO_x86-64_ehframe.o
+# RUN: llvm-jitlink -noexec -abs __ZTIi=0x1 -abs ___gxx_personality_v0=0x2 %S/Inputs/MachO_x86-64_ehframe.o
#
# Perform a no-exec link of MachO_x86-64_ehframe and verify that it does not
# generate any errors despite the last FDE referring to the first CIE (rather
# RUN: llvm-mc -triple=x86_64-apple-macosx10.9 -filetype=obj -o %t/macho_reloc.o %s
# RUN: llvm-jitlink -noexec \
# RUN: -slab-allocate 100Kb -slab-address 0xfff00000 -slab-page-size 4096 \
-# RUN: -define-abs external_data=0x1 -define-abs external_func=0x2 \
+# RUN: -abs external_data=0x1 -abs external_func=0x2 \
# RUN: -check=%s %t/macho_reloc.o
#
# Test standard MachO relocations. Simulates slab allocation in the top 1Mb of
cl::init(false), cl::cat(JITLinkCategory));
static cl::list<std::string> AbsoluteDefs(
- "define-abs",
+ "abs",
cl::desc("Inject absolute symbol definitions (syntax: <name>=<addr>)"),
cl::ZeroOrMore, cl::cat(JITLinkCategory));
+static cl::list<std::string>
+ Aliases("alias", cl::desc("Inject symbol aliases (syntax: <name>=<addr>)"),
+ cl::ZeroOrMore, cl::cat(JITLinkCategory));
+
static cl::list<std::string> TestHarnesses("harness", cl::Positional,
cl::desc("Test harness files"),
cl::ZeroOrMore,
uint64_t Addr;
if (AddrStr.getAsInteger(0, Addr))
return make_error<StringError>("Invalid address expression \"" + AddrStr +
- "\" in absolute define \"" + AbsDefStmt +
- "\"",
+ "\" in absolute symbol definition \"" +
+ AbsDefStmt + "\"",
inconvertibleErrorCode());
JITEvaluatedSymbol AbsDef(Addr, JITSymbolFlags::Exported);
if (auto Err = JD.define(absoluteSymbols({{S.ES.intern(Name), AbsDef}})))
return Error::success();
}
+static Error addAliases(Session &S,
+ const std::map<unsigned, JITDylib *> &IdxToJD) {
+ // Define absolute symbols.
+ LLVM_DEBUG(dbgs() << "Defining aliases...\n");
+ for (auto AliasItr = Aliases.begin(), AliasEnd = Aliases.end();
+ AliasItr != AliasEnd; ++AliasItr) {
+ unsigned AliasArgIdx = Aliases.getPosition(AliasItr - Aliases.begin());
+ auto &JD = *std::prev(IdxToJD.lower_bound(AliasArgIdx))->second;
+
+ StringRef AliasStmt = *AliasItr;
+ size_t EqIdx = AliasStmt.find_first_of('=');
+ if (EqIdx == StringRef::npos)
+ return make_error<StringError>("Invalid alias definition \"" + AliasStmt +
+ "\". Syntax: <name>=<addr>",
+ inconvertibleErrorCode());
+ StringRef Alias = AliasStmt.substr(0, EqIdx).trim();
+ StringRef Aliasee = AliasStmt.substr(EqIdx + 1).trim();
+
+ SymbolAliasMap SAM;
+ SAM[S.ES.intern(Alias)] = {S.ES.intern(Aliasee), JITSymbolFlags::Exported};
+ if (auto Err = JD.define(symbolAliases(std::move(SAM))))
+ return Err;
+ }
+
+ return Error::success();
+}
+
static Error addTestHarnesses(Session &S) {
LLVM_DEBUG(dbgs() << "Adding test harness objects...\n");
for (auto HarnessFile : TestHarnesses) {
if (auto Err = addAbsoluteSymbols(S, IdxToJD))
return Err;
+ if (auto Err = addAliases(S, IdxToJD))
+ return Err;
+
if (!TestHarnesses.empty())
if (auto Err = addTestHarnesses(S))
return Err;