[lld] r218728 - [PECOFF] Fix x64 export table.
Rui Ueyama
ruiu at google.com
Tue Sep 30 18:39:34 PDT 2014
Author: ruiu
Date: Tue Sep 30 20:39:34 2014
New Revision: 218728
URL: http://llvm.org/viewvc/llvm-project?rev=218728&view=rev
Log:
[PECOFF] Fix x64 export table.
Export table entry is 64 bit wide in x64. If MSB is 1, it means it's
imported by ordinal. The shift value was wrong.
Modified:
lld/trunk/lib/ReaderWriter/PECOFF/IdataPass.cpp
lld/trunk/lib/ReaderWriter/PECOFF/IdataPass.h
Modified: lld/trunk/lib/ReaderWriter/PECOFF/IdataPass.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/PECOFF/IdataPass.cpp?rev=218728&r1=218727&r2=218728&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/PECOFF/IdataPass.cpp (original)
+++ lld/trunk/lib/ReaderWriter/PECOFF/IdataPass.cpp Tue Sep 30 20:39:34 2014
@@ -51,7 +51,7 @@ std::vector<uint8_t> HintNameAtom::assem
}
std::vector<uint8_t>
-ImportTableEntryAtom::assembleRawContent(uint32_t rva, bool is64) {
+ImportTableEntryAtom::assembleRawContent(uint64_t rva, bool is64) {
// The element size of the import table is 32 bit in PE and 64 bit
// in PE+. In PE+, bits 62-31 are filled with zero.
if (is64) {
@@ -99,7 +99,8 @@ std::vector<ImportTableEntryAtom *> Impo
ImportTableEntryAtom *entry = nullptr;
if (atom->importName().empty()) {
// Import by ordinal
- uint32_t hint = (1U << 31) | atom->hint();
+ uint64_t hint = atom->hint();
+ hint |= _is64 ? (uint64_t(1) << 63) : (uint64_t(1) << 31);
entry = new (_alloc) ImportTableEntryAtom(context, hint, sectionName);
} else {
// Import by name
Modified: lld/trunk/lib/ReaderWriter/PECOFF/IdataPass.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/PECOFF/IdataPass.h?rev=218728&r1=218727&r2=218728&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/PECOFF/IdataPass.h (original)
+++ lld/trunk/lib/ReaderWriter/PECOFF/IdataPass.h Tue Sep 30 20:39:34 2014
@@ -83,7 +83,7 @@ private:
class ImportTableEntryAtom : public IdataAtom {
public:
- ImportTableEntryAtom(Context &ctx, uint32_t contents, StringRef sectionName)
+ ImportTableEntryAtom(Context &ctx, uint64_t contents, StringRef sectionName)
: IdataAtom(ctx, assembleRawContent(contents, ctx.is64)),
_sectionName(sectionName) {}
@@ -92,7 +92,7 @@ public:
};
private:
- std::vector<uint8_t> assembleRawContent(uint32_t contents, bool is64);
+ std::vector<uint8_t> assembleRawContent(uint64_t contents, bool is64);
StringRef _sectionName;
};
More information about the llvm-commits
mailing list