forked from OSchip/llvm-project
[mach-o] Add support for -S option
The darwin linker does not process dwarf debug info. Instead it produces a "debug map" in the output file which points back to the original .o files for anything that wants debug info (e.g. debugger). The -S option means "don't add a debug map". lld for mach-o currently does not generate the debug map, so there is nothing to do when this option is used. But we need to process the option to get existing projects building. llvm-svn: 221432
This commit is contained in:
parent
bf77ed6826
commit
8f75da0db3
|
@ -57,6 +57,11 @@ public:
|
||||||
blackList // -unexported_symbol[s_list], no listed symbol exported.
|
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
|
/// Initializes the context to sane default values given the specified output
|
||||||
/// file type, arch, os, and minimum os version. This should be called before
|
/// file type, arch, os, and minimum os version. This should be called before
|
||||||
/// other setXXX() methods.
|
/// other setXXX() methods.
|
||||||
|
@ -93,6 +98,11 @@ public:
|
||||||
bool exportRestrictMode() const { return _exportMode != ExportMode::globals; }
|
bool exportRestrictMode() const { return _exportMode != ExportMode::globals; }
|
||||||
bool exportSymbolNamed(StringRef sym) const;
|
bool exportSymbolNamed(StringRef sym) const;
|
||||||
|
|
||||||
|
DebugInfoMode debugInfoMode() const { return _debugInfoMode; }
|
||||||
|
void setDebugInfoMode(DebugInfoMode mode) {
|
||||||
|
_debugInfoMode = mode;
|
||||||
|
}
|
||||||
|
|
||||||
bool keepPrivateExterns() const { return _keepPrivateExterns; }
|
bool keepPrivateExterns() const { return _keepPrivateExterns; }
|
||||||
void setKeepPrivateExterns(bool v) { _keepPrivateExterns = v; }
|
void setKeepPrivateExterns(bool v) { _keepPrivateExterns = v; }
|
||||||
bool demangleSymbols() const { return _demangle; }
|
bool demangleSymbols() const { return _demangle; }
|
||||||
|
@ -322,6 +332,7 @@ private:
|
||||||
mutable std::vector<std::unique_ptr<class MachOFileNode>> _indirectDylibs;
|
mutable std::vector<std::unique_ptr<class MachOFileNode>> _indirectDylibs;
|
||||||
ExportMode _exportMode;
|
ExportMode _exportMode;
|
||||||
llvm::StringSet<> _exportedSymbols;
|
llvm::StringSet<> _exportedSymbols;
|
||||||
|
DebugInfoMode _debugInfoMode;
|
||||||
std::unique_ptr<llvm::raw_fd_ostream> _dependencyInfo;
|
std::unique_ptr<llvm::raw_fd_ostream> _dependencyInfo;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -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
|
// Handle input files
|
||||||
for (auto &arg : *parsedArgs) {
|
for (auto &arg : *parsedArgs) {
|
||||||
bool upward;
|
bool upward;
|
||||||
|
|
|
@ -160,6 +160,8 @@ def demangle : Flag<["-"], "demangle">,
|
||||||
def dependency_info : Separate<["-"], "dependency_info">,
|
def dependency_info : Separate<["-"], "dependency_info">,
|
||||||
MetaVarName<"<file>">,
|
MetaVarName<"<file>">,
|
||||||
HelpText<"Write binary list of files used during link">;
|
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">,
|
def t : Flag<["-"], "t">,
|
||||||
HelpText<"Print the names of the input files as ld processes them">;
|
HelpText<"Print the names of the input files as ld processes them">;
|
||||||
|
|
|
@ -145,7 +145,8 @@ MachOLinkingContext::MachOLinkingContext()
|
||||||
_compatibilityVersion(0), _currentVersion(0), _deadStrippableDylib(false),
|
_compatibilityVersion(0), _currentVersion(0), _deadStrippableDylib(false),
|
||||||
_printAtoms(false), _testingFileUsage(false), _keepPrivateExterns(false),
|
_printAtoms(false), _testingFileUsage(false), _keepPrivateExterns(false),
|
||||||
_demangle(false), _archHandler(nullptr),
|
_demangle(false), _archHandler(nullptr),
|
||||||
_exportMode(ExportMode::globals) {}
|
_exportMode(ExportMode::globals),
|
||||||
|
_debugInfoMode(DebugInfoMode::addDebugMap) {}
|
||||||
|
|
||||||
MachOLinkingContext::~MachOLinkingContext() {}
|
MachOLinkingContext::~MachOLinkingContext() {}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue