Index: bolt/lib/Rewrite/RewriteInstance.cpp =================================================================== --- bolt/lib/Rewrite/RewriteInstance.cpp +++ bolt/lib/Rewrite/RewriteInstance.cpp @@ -422,6 +422,8 @@ if (Error E = PHsOrErr.takeError()) return E; + uint64_t MaxAlign = + 1ULL << llvm::countr_zero(reinterpret_cast(Obj.base())); ELF64LE::PhdrRange PHs = PHsOrErr.get(); for (const ELF64LE::Phdr &Phdr : PHs) { switch (Phdr.p_type) { @@ -432,12 +434,9 @@ Phdr.p_vaddr + Phdr.p_memsz); NextAvailableOffset = std::max(NextAvailableOffset, Phdr.p_offset + Phdr.p_filesz); - - BC->SegmentMapInfo[Phdr.p_vaddr] = SegmentInfo{Phdr.p_vaddr, - Phdr.p_memsz, - Phdr.p_offset, - Phdr.p_filesz, - Phdr.p_align}; + BC->SegmentMapInfo[Phdr.p_vaddr] = + SegmentInfo{Phdr.p_vaddr, Phdr.p_memsz, Phdr.p_offset, Phdr.p_filesz, + std::min(static_cast(Phdr.p_align), MaxAlign)}; break; case ELF::PT_INTERP: BC->HasInterpHeader = true;