[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.
This commit is contained in:
Jonas Devlieghere 2021-05-24 16:24:16 -07:00
parent 7bf7b80b19
commit 1ec03f3de5
1 changed files with 13 additions and 0 deletions

View File

@ -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<vfs::Status> stat =
Options.LinkOpts.VFS->status(OutputLocationOrErr->DWARFFile);
if (stat) {
if (stat->getSize() > std::numeric_limits<uint32_t>::max()) {
WithColor::error() << "the linked debug info exceeds the 4GB Mach-O "
"object file format.";
return EXIT_FAILURE;
}
}
}
return EXIT_SUCCESS;