diff options
author | Rui Ueyama <ruiu@google.com> | 2014-10-16 19:30:44 +0000 |
---|---|---|
committer | Rui Ueyama <ruiu@google.com> | 2014-10-16 19:30:44 +0000 |
commit | b38b96ab4c491b914835d005532e8f8e4842c77a (patch) | |
tree | c1f9eb036a29a0e4a7da32b55112732fd5353836 /lld/lib/ReaderWriter/PECOFF/Pass.cpp | |
parent | ec81c0b40d6872be12a1d149b9218d3f688a0798 (diff) | |
download | bcm5719-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.cpp | 16 |
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 |