diff --git a/lld/MachO/Config.h b/lld/MachO/Config.h --- a/lld/MachO/Config.h +++ b/lld/MachO/Config.h @@ -33,6 +33,7 @@ struct Configuration { Symbol *entry; bool hasReexports = false; + bool allLoad = false; bool forceLoadObjC = false; uint32_t headerPad; llvm::StringRef installName; diff --git a/lld/MachO/Driver.cpp b/lld/MachO/Driver.cpp --- a/lld/MachO/Driver.cpp +++ b/lld/MachO/Driver.cpp @@ -248,7 +248,12 @@ if (!file->isEmpty() && !file->hasSymbolTable()) error(path + ": archive has no index; run ranlib to add one"); - if (config->forceLoadObjC) { + if (config->allLoad) { + if (Optional buffer = readFile(path)) + for (MemoryBufferRef member : getArchiveMembers(*buffer)) + inputFiles.push_back(make(member)); + + } else if (config->forceLoadObjC) { for (const object::Archive::Symbol &sym : file->symbols()) if (sym.getName().startswith(objc::klass)) symtab->addUndefined(sym.getName()); @@ -517,6 +522,7 @@ config->headerPad = args::getHex(args, OPT_headerpad, /*Default=*/32); config->outputType = args.hasArg(OPT_dylib) ? MH_DYLIB : MH_EXECUTE; config->runtimePaths = args::getStrings(args, OPT_rpath); + config->allLoad = args.hasArg(OPT_all_load); std::vector &roots = config->systemLibraryRoots; for (const Arg *arg : args.filtered(OPT_syslibroot)) @@ -581,6 +587,7 @@ case OPT_platform_version: handlePlatformVersion(arg); break; + case OPT_all_load: case OPT_o: case OPT_dylib: case OPT_e: