summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Object/COFFObjectFile.cpp
diff options
context:
space:
mode:
authorDavide Italiano <davide@freebsd.org>2016-11-02 17:32:19 +0000
committerDavide Italiano <davide@freebsd.org>2016-11-02 17:32:19 +0000
commit6b2bba14a9266c944859fa2af9c5a311ae5c56f9 (patch)
treed1752db081d926b78976832544968b12a1a58e44 /llvm/lib/Object/COFFObjectFile.cpp
parentbf9ee26aeaba8bc1bf05c092a74c44fa3fca0be6 (diff)
downloadbcm5719-llvm-6b2bba14a9266c944859fa2af9c5a311ae5c56f9.tar.gz
bcm5719-llvm-6b2bba14a9266c944859fa2af9c5a311ae5c56f9.zip
[lli/COFF] Set the correct alignment for common symbols
Otherwise we set it always to zero, which is not correct, and we assert inside alignTo (Assertion failed: Align != 0u && "Align can't be 0."). Differential Revision: https://reviews.llvm.org/D26173 llvm-svn: 285841
Diffstat (limited to 'llvm/lib/Object/COFFObjectFile.cpp')
-rw-r--r--llvm/lib/Object/COFFObjectFile.cpp9
1 files changed, 9 insertions, 0 deletions
diff --git a/llvm/lib/Object/COFFObjectFile.cpp b/llvm/lib/Object/COFFObjectFile.cpp
index 601a7faba32..c95037f4540 100644
--- a/llvm/lib/Object/COFFObjectFile.cpp
+++ b/llvm/lib/Object/COFFObjectFile.cpp
@@ -157,6 +157,15 @@ uint64_t COFFObjectFile::getSymbolValueImpl(DataRefImpl Ref) const {
return getCOFFSymbol(Ref).getValue();
}
+uint32_t COFFObjectFile::getSymbolAlignment(DataRefImpl Ref) const {
+ // MSVC/link.exe seems to align symbols to the next-power-of-2
+ // up to 32 bytes.
+ COFFSymbolRef Symb = getCOFFSymbol(Ref);
+ uint32_t Value = Symb.getValue();
+ return std::min(uint64_t(32),
+ isPowerOf2_64(Value) ? Value : NextPowerOf2(Value));
+}
+
Expected<uint64_t> COFFObjectFile::getSymbolAddress(DataRefImpl Ref) const {
uint64_t Result = getSymbolValue(Ref);
COFFSymbolRef Symb = getCOFFSymbol(Ref);
OpenPOWER on IntegriCloud