diff --git a/lld/include/lld/ReaderWriter/MachOLinkingContext.h b/lld/include/lld/ReaderWriter/MachOLinkingContext.h index 4132c744acb5..0792bd2e51ba 100644 --- a/lld/include/lld/ReaderWriter/MachOLinkingContext.h +++ b/lld/include/lld/ReaderWriter/MachOLinkingContext.h @@ -57,6 +57,11 @@ public: blackList // -unexported_symbol[s_list], no listed symbol exported. }; + enum class DebugInfoMode { + addDebugMap, // Default + noDebugMap // -S option + }; + /// Initializes the context to sane default values given the specified output /// file type, arch, os, and minimum os version. This should be called before /// other setXXX() methods. @@ -93,6 +98,11 @@ public: bool exportRestrictMode() const { return _exportMode != ExportMode::globals; } bool exportSymbolNamed(StringRef sym) const; + DebugInfoMode debugInfoMode() const { return _debugInfoMode; } + void setDebugInfoMode(DebugInfoMode mode) { + _debugInfoMode = mode; + } + bool keepPrivateExterns() const { return _keepPrivateExterns; } void setKeepPrivateExterns(bool v) { _keepPrivateExterns = v; } bool demangleSymbols() const { return _demangle; } @@ -322,6 +332,7 @@ private: mutable std::vector> _indirectDylibs; ExportMode _exportMode; llvm::StringSet<> _exportedSymbols; + DebugInfoMode _debugInfoMode; std::unique_ptr _dependencyInfo; }; diff --git a/lld/lib/Driver/DarwinLdDriver.cpp b/lld/lib/Driver/DarwinLdDriver.cpp index 452d6cc5289f..645a3efb6502 100644 --- a/lld/lib/Driver/DarwinLdDriver.cpp +++ b/lld/lib/Driver/DarwinLdDriver.cpp @@ -640,6 +640,11 @@ bool DarwinLdDriver::parse(int argc, const char *argv[], } } + // Handle debug info handling options: -S + if (parsedArgs->hasArg(OPT_S)) { + ctx.setDebugInfoMode(MachOLinkingContext::DebugInfoMode::noDebugMap); + } + // Handle input files for (auto &arg : *parsedArgs) { bool upward; diff --git a/lld/lib/Driver/DarwinLdOptions.td b/lld/lib/Driver/DarwinLdOptions.td index fff976cf06fb..d819c03aac0e 100644 --- a/lld/lib/Driver/DarwinLdOptions.td +++ b/lld/lib/Driver/DarwinLdOptions.td @@ -160,6 +160,8 @@ def demangle : Flag<["-"], "demangle">, def dependency_info : Separate<["-"], "dependency_info">, MetaVarName<"">, HelpText<"Write binary list of files used during link">; +def S : Flag<["-"], "S">, + HelpText<"Remove debug information (STABS or DWARF) from the output file">; def t : Flag<["-"], "t">, HelpText<"Print the names of the input files as ld processes them">; diff --git a/lld/lib/ReaderWriter/MachO/MachOLinkingContext.cpp b/lld/lib/ReaderWriter/MachO/MachOLinkingContext.cpp index b99ecc8548ea..85c20b3a9326 100644 --- a/lld/lib/ReaderWriter/MachO/MachOLinkingContext.cpp +++ b/lld/lib/ReaderWriter/MachO/MachOLinkingContext.cpp @@ -145,7 +145,8 @@ MachOLinkingContext::MachOLinkingContext() _compatibilityVersion(0), _currentVersion(0), _deadStrippableDylib(false), _printAtoms(false), _testingFileUsage(false), _keepPrivateExterns(false), _demangle(false), _archHandler(nullptr), - _exportMode(ExportMode::globals) {} + _exportMode(ExportMode::globals), + _debugInfoMode(DebugInfoMode::addDebugMap) {} MachOLinkingContext::~MachOLinkingContext() {}