diff options
author | Reid Kleckner <reid@kleckner.net> | 2015-08-05 18:51:13 +0000 |
---|---|---|
committer | Reid Kleckner <reid@kleckner.net> | 2015-08-05 18:51:13 +0000 |
commit | 124955aade67bb0455a8c0dc1f01d86b265ef277 (patch) | |
tree | 3a2e5625ea970deabec9e390df20e2566732bbe8 /clang/lib/Driver/Tools.cpp | |
parent | b2fda0d95ca1d27b1f6b1707685bd0f3fd8789d9 (diff) | |
download | llvm-124955aade67bb0455a8c0dc1f01d86b265ef277.zip llvm-124955aade67bb0455a8c0dc1f01d86b265ef277.tar.gz llvm-124955aade67bb0455a8c0dc1f01d86b265ef277.tar.bz2 |
Add -gcodeview and -gdwarf to control which type Clang emits
Summary:
By default, 'clang' emits dwarf and 'clang-cl' emits codeview. You can
force emission of one or both by passing -gcodeview and -gdwarf to
either driver.
Reviewers: dblaikie, hans
Subscribers: cfe-commits
Differential Revision: http://reviews.llvm.org/D11742
llvm-svn: 244097
Diffstat (limited to 'clang/lib/Driver/Tools.cpp')
-rw-r--r-- | clang/lib/Driver/Tools.cpp | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/clang/lib/Driver/Tools.cpp b/clang/lib/Driver/Tools.cpp index 043d995..759e917 100644 --- a/clang/lib/Driver/Tools.cpp +++ b/clang/lib/Driver/Tools.cpp @@ -3678,6 +3678,9 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, } } + // Forward -gcodeview. + Args.AddLastArg(CmdArgs, options::OPT_gcodeview); + // We ignore flags -gstrict-dwarf and -grecord-gcc-switches for now. Args.ClaimAllArgs(options::OPT_g_flags_Group); if (Args.hasFlag(options::OPT_gcolumn_info, options::OPT_gno_column_info, @@ -5270,6 +5273,16 @@ void Clang::AddClangCLArgs(const ArgList &Args, ArgStringList &CmdArgs) const { /*default=*/false)) CmdArgs.push_back("-fno-rtti-data"); + // Emit CodeView if -Z7 is present. + bool EmitCodeView = Args.hasArg(options::OPT__SLASH_Z7); + bool EmitDwarf = Args.hasArg(options::OPT_gdwarf); + // If we are emitting CV but not DWARF, don't build information that LLVM + // can't yet process. + if (EmitCodeView && !EmitDwarf) + CmdArgs.push_back("-gline-tables-only"); + if (EmitCodeView) + CmdArgs.push_back("-gcodeview"); + const Driver &D = getToolChain().getDriver(); EHFlags EH = parseClangCLEHFlags(D, Args); // FIXME: Do something with NoExceptC. @@ -8820,7 +8833,7 @@ void visualstudio::Linker::ConstructJob(Compilation &C, const JobAction &JA, CmdArgs.push_back("-nologo"); - if (Args.hasArg(options::OPT_g_Group)) + if (Args.hasArg(options::OPT_g_Group, options::OPT__SLASH_Z7)) CmdArgs.push_back("-debug"); bool DLL = Args.hasArg(options::OPT__SLASH_LD, options::OPT__SLASH_LDd, @@ -8976,7 +8989,8 @@ std::unique_ptr<Command> visualstudio::Compiler::GetCommand( A->getOption().getID() == options::OPT_fdata_sections ? "/Gw" : "/Gw-"); if (Args.hasArg(options::OPT_fsyntax_only)) CmdArgs.push_back("/Zs"); - if (Args.hasArg(options::OPT_g_Flag, options::OPT_gline_tables_only)) + if (Args.hasArg(options::OPT_g_Flag, options::OPT_gline_tables_only, + options::OPT__SLASH_Z7)) CmdArgs.push_back("/Z7"); std::vector<std::string> Includes = |