From: Zachary Turner Date: Wed, 30 Jan 2019 23:52:32 +0000 (+0000) Subject: [RuntimeDyld] Don't try to allocate sections with align 0. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e8589dfc4d34e801b3d9abaf9783fa96814fd76f;p=llvm [RuntimeDyld] Don't try to allocate sections with align 0. ELF sections allow 0 for the alignment, which is specified to be the same as 1. However many clients do not expect this and will behave poorly in the presence of a 0-aligned section (for example by trying to modulo something by the section alignment). We can be more polite by making sure that we always pass a non-zero value to clients. Differential Revision: https://reviews.llvm.org/D57482 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@352694 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp b/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp index 473a8120b42..589cdcbcb0d 100644 --- a/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp +++ b/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp @@ -743,6 +743,11 @@ RuntimeDyldImpl::emitSection(const ObjectFile &Obj, bool IsReadOnly = isReadOnlyData(Section); uint64_t DataSize = Section.getSize(); + // An alignment of 0 (at least with ELF) is identical to an alignment of 1, + // while being more "polite". Other formats do not support 0-aligned sections + // anyway, so we should guarantee that the alignment is always at least 1. + Alignment = std::max(1u, Alignment); + StringRef Name; if (auto EC = Section.getName(Name)) return errorCodeToError(EC);