Skip to content

Commit 11711bb

Browse files
committed
Page align buffer pointer and revert performance regression.
1 parent 298380e commit 11711bb

File tree

3 files changed

+8
-6
lines changed

3 files changed

+8
-6
lines changed

lld/MachO/Driver.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -350,8 +350,6 @@ void multiThreadedPageInBackground(DeferredFiles &deferred) {
350350
const StringRef &buff = deferredFile.buffer.getBuffer();
351351
if (buff.size() > largeArchive)
352352
return;
353-
if (((uintptr_t)buff.data() & (pageSize - 1)))
354-
return; // Not mmap()'d (not page aligned).
355353

356354
totalBytes += buff.size();
357355
numDeferedFilesAdvised += 1;
@@ -363,8 +361,10 @@ void multiThreadedPageInBackground(DeferredFiles &deferred) {
363361
LLVM_ATTRIBUTE_UNUSED volatile char t = *page;
364362
#else
365363
#define DEBUG_TYPE "lld-madvise"
366-
if (madvise((void *)buff.data(), buff.size(), MADV_WILLNEED) < 0)
367-
LLVM_DEBUG(llvm::dbgs() << "madvise() error: " << strerror(errno));
364+
auto aligned = llvm::alignAddr(buff.data(), Align(pageSize));
365+
auto rounded = llvm::alignTo(buff.size(), Align(pageSize));
366+
if (madvise((void *)aligned, rounded, MADV_WILLNEED) < 0)
367+
LLVM_DEBUG(llvm::dbgs() << "madvise error: " << strerror(errno) << "\n");
368368
#undef DEBUG_TYPE
369369
#endif
370370
};

lld/MachO/InputFiles.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,8 @@ std::optional<MemoryBufferRef> macho::readFile(StringRef path) {
217217
if (entry != cachedReads.end())
218218
return entry->second;
219219

220-
ErrorOr<std::unique_ptr<MemoryBuffer>> mbOrErr = MemoryBuffer::getFile(path);
220+
ErrorOr<std::unique_ptr<MemoryBuffer>> mbOrErr =
221+
MemoryBuffer::getFile(path, false, /*RequiresNullTerminator*/ false);
221222
if (std::error_code ec = mbOrErr.getError()) {
222223
error("cannot open " + path + ": " + ec.message());
223224
return std::nullopt;

llvm/lib/Object/Archive.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -584,7 +584,8 @@ Expected<StringRef> Archive::Child::getBuffer() const {
584584
if (!FullNameOrErr)
585585
return FullNameOrErr.takeError();
586586
const std::string &FullName = *FullNameOrErr;
587-
ErrorOr<std::unique_ptr<MemoryBuffer>> Buf = MemoryBuffer::getFile(FullName);
587+
ErrorOr<std::unique_ptr<MemoryBuffer>> Buf =
588+
MemoryBuffer::getFile(FullName, false, /*RequiresNullTerminator*/ false);
588589
if (std::error_code EC = Buf.getError())
589590
return errorCodeToError(EC);
590591
Parent->ThinBuffers.push_back(std::move(*Buf));

0 commit comments

Comments
 (0)