summaryrefslogtreecommitdiffstats
path: root/lld/lib/ReaderWriter/PECOFF/Pass.cpp
diff options
context:
space:
mode:
authorRui Ueyama <ruiu@google.com>2014-10-16 19:30:44 +0000
committerRui Ueyama <ruiu@google.com>2014-10-16 19:30:44 +0000
commitb38b96ab4c491b914835d005532e8f8e4842c77a (patch)
treec1f9eb036a29a0e4a7da32b55112732fd5353836 /lld/lib/ReaderWriter/PECOFF/Pass.cpp
parentec81c0b40d6872be12a1d149b9218d3f688a0798 (diff)
downloadbcm5719-llvm-b38b96ab4c491b914835d005532e8f8e4842c77a.tar.gz
bcm5719-llvm-b38b96ab4c491b914835d005532e8f8e4842c77a.zip
[PECOFF] Support delay-load import table for x86
This patch creates the import address table and sets its address to the delay-load import table. This also creates wrapper functions for __delayLoadHelper2. x86 only for now. llvm-svn: 219948
Diffstat (limited to 'lld/lib/ReaderWriter/PECOFF/Pass.cpp')
-rw-r--r--lld/lib/ReaderWriter/PECOFF/Pass.cpp16
1 files changed, 16 insertions, 0 deletions
diff --git a/lld/lib/ReaderWriter/PECOFF/Pass.cpp b/lld/lib/ReaderWriter/PECOFF/Pass.cpp
index e756bf5e627..55c3ef8770e 100644
--- a/lld/lib/ReaderWriter/PECOFF/Pass.cpp
+++ b/lld/lib/ReaderWriter/PECOFF/Pass.cpp
@@ -55,5 +55,21 @@ void addDir32NBReloc(COFFBaseDefinedAtom *atom, const Atom *target,
}
}
+void addRel32Reloc(COFFBaseDefinedAtom *atom, const Atom *target,
+ llvm::COFF::MachineTypes machine, size_t offsetInAtom) {
+ switch (machine) {
+ case llvm::COFF::IMAGE_FILE_MACHINE_I386:
+ addReloc(atom, target, offsetInAtom, Reference::KindArch::x86,
+ llvm::COFF::IMAGE_REL_I386_REL32);
+ return;
+ case llvm::COFF::IMAGE_FILE_MACHINE_AMD64:
+ addReloc(atom, target, offsetInAtom, Reference::KindArch::x86_64,
+ llvm::COFF::IMAGE_REL_AMD64_REL32);
+ return;
+ default:
+ llvm_unreachable("unsupported machine type");
+ }
+}
+
} // end namespace pecoff
} // end namespace lld
OpenPOWER on IntegriCloud