diff options
author | David Majnemer <david.majnemer@gmail.com> | 2015-07-31 17:40:24 +0000 |
---|---|---|
committer | David Majnemer <david.majnemer@gmail.com> | 2015-07-31 17:40:24 +0000 |
commit | 7c6a071b58c008ad383ddbc0768ccd82206f6826 (patch) | |
tree | d31dac84d8dce24dc15ab01814c8efdd78fc584e /llvm/lib/Object/COFFObjectFile.cpp | |
parent | cd6a4665e0eba0987b4bf47eff51f976f3d6968d (diff) | |
download | bcm5719-llvm-7c6a071b58c008ad383ddbc0768ccd82206f6826.tar.gz bcm5719-llvm-7c6a071b58c008ad383ddbc0768ccd82206f6826.zip |
[COFF] Consider the ImageBase when reporting section addresses
This lets us reenable the lld test disabled in r243758.
llvm-svn: 243761
Diffstat (limited to 'llvm/lib/Object/COFFObjectFile.cpp')
-rw-r--r-- | llvm/lib/Object/COFFObjectFile.cpp | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/llvm/lib/Object/COFFObjectFile.cpp b/llvm/lib/Object/COFFObjectFile.cpp index ed63f3a64e0..d110b9293ba 100644 --- a/llvm/lib/Object/COFFObjectFile.cpp +++ b/llvm/lib/Object/COFFObjectFile.cpp @@ -177,7 +177,7 @@ ErrorOr<uint64_t> COFFObjectFile::getSymbolAddress(DataRefImpl Ref) const { if (PE32Header) Result += PE32Header->ImageBase; else if (PE32PlusHeader) - Result += PE32Header->ImageBase; + Result += PE32PlusHeader->ImageBase; return Result; } @@ -274,7 +274,15 @@ std::error_code COFFObjectFile::getSectionName(DataRefImpl Ref, uint64_t COFFObjectFile::getSectionAddress(DataRefImpl Ref) const { const coff_section *Sec = toSec(Ref); - return Sec->VirtualAddress; + uint64_t Result = Sec->VirtualAddress; + + // The section VirtualAddress does not include ImageBase, and we want to + // return virtual addresses. + if (PE32Header) + Result += PE32Header->ImageBase; + else if (PE32PlusHeader) + Result += PE32PlusHeader->ImageBase; + return Result; } uint64_t COFFObjectFile::getSectionSize(DataRefImpl Ref) const { |