From 1ec03f3de5d580d85cc256058cc0d2dd254b9e1a Mon Sep 17 00:00:00 2001 From: Jonas Devlieghere Date: Mon, 24 May 2021 16:24:16 -0700 Subject: [PATCH] [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. --- llvm/tools/dsymutil/dsymutil.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) 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; -- 2.7.4