diff options
author | David Blaikie <dblaikie@gmail.com> | 2019-11-07 12:00:22 -0800 |
---|---|---|
committer | David Blaikie <dblaikie@gmail.com> | 2019-11-07 12:05:58 -0800 |
commit | 8d8f9c24407461fadf1730e80ebcf7c767254715 (patch) | |
tree | 75dde1fc1bcbe53cbc920fe7274ffb4ac2925ec9 /clang/lib | |
parent | a087b78bc4c31be5a82eda62f1e4c7fe1fec14ad (diff) | |
download | bcm5719-llvm-8d8f9c24407461fadf1730e80ebcf7c767254715.tar.gz bcm5719-llvm-8d8f9c24407461fadf1730e80ebcf7c767254715.zip |
[clang] Add -fdebug-default-version for specifying the default DWARF version
This flag decouples specifying the DWARF version from enabling/disabling
DWARF in general (or the gN level - gmlt/limited/standalone, etc) while
still allowing existing -gdwarf-N flags to override this default.
Patch by Caroline Tice!
Differential Revision: https://reviews.llvm.org/D69822
Diffstat (limited to 'clang/lib')
-rw-r--r-- | clang/lib/Driver/ToolChains/Clang.cpp | 13 | ||||
-rw-r--r-- | clang/lib/Driver/ToolChains/CommonArgs.cpp | 15 | ||||
-rw-r--r-- | clang/lib/Driver/ToolChains/CommonArgs.h | 3 |
3 files changed, 30 insertions, 1 deletions
diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index 17cb4816e61..008742aca57 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -3335,7 +3335,6 @@ static void RenderDebugOptions(const ToolChain &TC, const Driver &D, // This avoids having to monkey around further in cc1 other than to disable // codeview if not running in a Windows environment. Perhaps even that // decision should be made in the driver as well though. - unsigned DWARFVersion = 0; llvm::DebuggerKind DebuggerTuning = TC.getDefaultDebuggerTuning(); bool SplitDWARFInlining = @@ -3418,11 +3417,18 @@ static void RenderDebugOptions(const ToolChain &TC, const Driver &D, } } + unsigned DWARFVersion = 0; + unsigned DefaultDWARFVersion = ParseDebugDefaultVersion(TC, Args); if (EmitDwarf) { // Start with the platform default DWARF version DWARFVersion = TC.GetDefaultDwarfVersion(); assert(DWARFVersion && "toolchain default DWARF version must be nonzero"); + // If the user specified a default DWARF version, that takes precedence + // over the platform default. + if (DefaultDWARFVersion) + DWARFVersion = DefaultDWARFVersion; + // Override with a user-specified DWARF version if (GDwarfN) if (auto ExplicitVersion = DwarfVersionNum(GDwarfN->getSpelling())) @@ -6354,6 +6360,11 @@ void ClangAs::ConstructJob(Compilation &C, const JobAction &JA, if (WantDebug) DwarfVersion = DwarfVersionNum(A->getSpelling()); } + + unsigned DefaultDwarfVersion = ParseDebugDefaultVersion(getToolChain(), Args); + if (DwarfVersion == 0) + DwarfVersion = DefaultDwarfVersion; + if (DwarfVersion == 0) DwarfVersion = getToolChain().GetDefaultDwarfVersion(); diff --git a/clang/lib/Driver/ToolChains/CommonArgs.cpp b/clang/lib/Driver/ToolChains/CommonArgs.cpp index 10743559e04..709ddaae4ab 100644 --- a/clang/lib/Driver/ToolChains/CommonArgs.cpp +++ b/clang/lib/Driver/ToolChains/CommonArgs.cpp @@ -1138,6 +1138,21 @@ unsigned tools::ParseFunctionAlignment(const ToolChain &TC, return Value ? llvm::Log2_32_Ceil(std::min(Value, 65536u)) : Value; } +unsigned tools::ParseDebugDefaultVersion(const ToolChain &TC, + const ArgList &Args) { + const Arg *A = Args.getLastArg(options::OPT_fdebug_default_version); + + if (!A) + return 0; + + unsigned Value = 0; + if (StringRef(A->getValue()).getAsInteger(10, Value) || Value > 5 || + Value < 2) + TC.getDriver().Diag(diag::err_drv_invalid_int_value) + << A->getAsString(Args) << A->getValue(); + return Value; +} + void tools::AddAssemblerKPIC(const ToolChain &ToolChain, const ArgList &Args, ArgStringList &CmdArgs) { llvm::Reloc::Model RelocationModel; diff --git a/clang/lib/Driver/ToolChains/CommonArgs.h b/clang/lib/Driver/ToolChains/CommonArgs.h index 79468e6b892..cf1ce14249e 100644 --- a/clang/lib/Driver/ToolChains/CommonArgs.h +++ b/clang/lib/Driver/ToolChains/CommonArgs.h @@ -68,6 +68,9 @@ ParsePICArgs(const ToolChain &ToolChain, const llvm::opt::ArgList &Args); unsigned ParseFunctionAlignment(const ToolChain &TC, const llvm::opt::ArgList &Args); +unsigned ParseDebugDefaultVersion(const ToolChain &TC, + const llvm::opt::ArgList &Args); + void AddAssemblerKPIC(const ToolChain &ToolChain, const llvm::opt::ArgList &Args, llvm::opt::ArgStringList &CmdArgs); |