Recommit CC1 part of debugger tuning; pass through setting from driver to LLVM.

Reapplies r256063, except instead of frugally re-using an LLVM enum,
we define a Clang enum, to avoid exposing too much LLVM interface.

Differential Revision: http://reviews.llvm.org/D15650

llvm-svn: 256078
This commit is contained in:
Paul Robinson 2015-12-19 02:24:10 +00:00
parent 00cbf9a69a
commit 45784a79fc
5 changed files with 31 additions and 0 deletions

View File

@ -134,6 +134,7 @@ let Flags = [CC1Option, CC1AsOption, NoDriverOption] in {
def debug_info_kind_EQ : Joined<["-"], "debug-info-kind=">;
def dwarf_version_EQ : Joined<["-"], "dwarf-version=">;
def debugger_tuning_EQ : Joined<["-"], "debugger-tuning=">;
def fdebug_compilation_dir : Separate<["-"], "fdebug-compilation-dir">,
HelpText<"The compilation directory to embed in the debug info.">;
def dwarf_debug_flags : Separate<["-"], "dwarf-debug-flags">,

View File

@ -183,6 +183,9 @@ VALUE_CODEGENOPT(SSPBufferSize, 32, 0)
/// The kind of generated debug info.
ENUM_CODEGENOPT(DebugInfo, DebugInfoKind, 3, NoDebugInfo)
/// Tune the debug info for this debugger.
ENUM_CODEGENOPT(DebuggerTuning, DebuggerKind, 2, DebuggerKindDefault)
/// Dwarf version. Version zero indicates to LLVM that no DWARF should be
/// emitted.
VALUE_CODEGENOPT(DwarfVersion, 3, 0)

View File

@ -82,6 +82,13 @@ public:
FullDebugInfo /// Generate complete debug info.
};
enum DebuggerKind {
DebuggerKindDefault,
DebuggerKindGDB,
DebuggerKindLLDB,
DebuggerKindSCE
};
enum TLSModel {
GeneralDynamicTLSModel,
LocalDynamicTLSModel,

View File

@ -553,6 +553,19 @@ TargetMachine *EmitAssemblyHelper::CreateTargetMachine(bool MustCreateTM) {
Options.DataSections = CodeGenOpts.DataSections;
Options.UniqueSectionNames = CodeGenOpts.UniqueSectionNames;
Options.EmulatedTLS = CodeGenOpts.EmulatedTLS;
switch (CodeGenOpts.getDebuggerTuning()) {
case CodeGenOptions::DebuggerKindGDB:
Options.DebuggerTuning = llvm::DebuggerKind::GDB;
break;
case CodeGenOptions::DebuggerKindLLDB:
Options.DebuggerTuning = llvm::DebuggerKind::LLDB;
break;
case CodeGenOptions::DebuggerKindSCE:
Options.DebuggerTuning = llvm::DebuggerKind::SCE;
break;
default:
break;
}
Options.MCOptions.MCRelaxAll = CodeGenOpts.RelaxAll;
Options.MCOptions.MCSaveTempLabels = CodeGenOpts.SaveTempLabels;

View File

@ -405,6 +405,13 @@ static bool ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args, InputKind IK,
.Case("limited", CodeGenOptions::LimitedDebugInfo)
.Case("standalone", CodeGenOptions::FullDebugInfo));
}
if (Arg *A = Args.getLastArg(OPT_debugger_tuning_EQ)) {
Opts.setDebuggerTuning(
llvm::StringSwitch<CodeGenOptions::DebuggerKind>(A->getValue())
.Case("gdb", CodeGenOptions::DebuggerKindGDB)
.Case("lldb", CodeGenOptions::DebuggerKindLLDB)
.Case("sce", CodeGenOptions::DebuggerKindSCE));
}
Opts.DwarfVersion = getLastArgIntValue(Args, OPT_dwarf_version_EQ, 0, Diags);
Opts.DebugColumnInfo = Args.hasArg(OPT_dwarf_column_info);
Opts.EmitCodeView = Args.hasArg(OPT_gcodeview);