From: Jonas Devlieghere Date: Mon, 24 May 2021 23:24:16 +0000 (-0700) Subject: [dsymutil] Emit an error when the Mach-O exceeds the 4GB limit. X-Git-Tag: llvmorg-14-init~5761 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=1ec03f3de5d580d85cc256058cc0d2dd254b9e1a;p=platform%2Fupstream%2Fllvm.git [dsymutil] Emit an error when the Mach-O exceeds the 4GB limit. The Mach-O object file format is limited to 4GB because its used of 32-bit offsets in the header. It is possible for dsymutil to (silently) emit an invalid binary. Instead of having consumers deal with this, emit an error instead. --- diff --git a/llvm/tools/dsymutil/dsymutil.cpp b/llvm/tools/dsymutil/dsymutil.cpp index 14dbaa9..f615d36 100644 --- a/llvm/tools/dsymutil/dsymutil.cpp +++ b/llvm/tools/dsymutil/dsymutil.cpp @@ -689,6 +689,19 @@ int main(int argc, char **argv) { Options.LinkOpts, SDKPath)) return EXIT_FAILURE; } + + // The Mach-O object file format is limited to 4GB. Make sure that we print + // an error when we emit an invalid Mach-O companion file. Leave the + // invalid object file around on disk for inspection. + ErrorOr stat = + Options.LinkOpts.VFS->status(OutputLocationOrErr->DWARFFile); + if (stat) { + if (stat->getSize() > std::numeric_limits::max()) { + WithColor::error() << "the linked debug info exceeds the 4GB Mach-O " + "object file format."; + return EXIT_FAILURE; + } + } } return EXIT_SUCCESS;