Author: Chen Zheng Date: 2021-04-01T00:11:30-04:00 New Revision: bfcd21876adc3498065e4da92799f613e730d475
URL: https://github.com/llvm/llvm-project/commit/bfcd21876adc3498065e4da92799f613e730d475 DIFF: https://github.com/llvm/llvm-project/commit/bfcd21876adc3498065e4da92799f613e730d475.diff LOG: [debug-info] support new tuning debugger type DBX for XCOFF DWARF Based on this debugger type, for now, we plan to: 1: use inline string by default for XCOFF DWARF 2: generate no column info for debug line table. Reviewed By: aprantl Differential Revision: https://reviews.llvm.org/D99400 Added: Modified: clang/docs/UsersManual.rst clang/include/clang/Basic/CodeGenOptions.def clang/include/clang/Driver/Options.td clang/lib/Driver/ToolChains/AIX.h clang/lib/Driver/ToolChains/Clang.cpp clang/lib/Driver/ToolChains/CommonArgs.cpp clang/test/Driver/debug-options.c llvm/include/llvm/Target/TargetOptions.h Removed: ################################################################################ diff --git a/clang/docs/UsersManual.rst b/clang/docs/UsersManual.rst index 6c8d297e618fc..c7b7f580ad933 100644 --- a/clang/docs/UsersManual.rst +++ b/clang/docs/UsersManual.rst @@ -2573,13 +2573,12 @@ While Clang generally emits standard DWARF debug info (http://dwarfstd.org), diff erent debuggers may know how to take advantage of diff erent specific DWARF features. You can "tune" the debug info for one of several diff erent debuggers. -.. option:: -ggdb, -glldb, -gsce - - Tune the debug info for the ``gdb``, ``lldb``, or Sony PlayStation\ |reg| - debugger, respectively. Each of these options implies **-g**. (Therefore, if - you want both **-gline-tables-only** and debugger tuning, the tuning option - must come first.) +.. option:: -ggdb, -glldb, -gsce, -gdbx + Tune the debug info for the ``gdb``, ``lldb``, Sony PlayStation\ |reg| + debugger, or ``dbx``, respectively. Each of these options implies **-g**. + (Therefore, if you want both **-gline-tables-only** and debugger tuning, the + tuning option must come first.) Controlling LLVM IR Output -------------------------- diff --git a/clang/include/clang/Basic/CodeGenOptions.def b/clang/include/clang/Basic/CodeGenOptions.def index 4c354734dff87..900e61eb828b5 100644 --- a/clang/include/clang/Basic/CodeGenOptions.def +++ b/clang/include/clang/Basic/CodeGenOptions.def @@ -340,7 +340,7 @@ ENUM_CODEGENOPT(DebugInfo, codegenoptions::DebugInfoKind, 4, codegenoptions::NoD CODEGENOPT(MacroDebugInfo, 1, 0) /// Tune the debug info for this debugger. -ENUM_CODEGENOPT(DebuggerTuning, llvm::DebuggerKind, 2, +ENUM_CODEGENOPT(DebuggerTuning, llvm::DebuggerKind, 3, llvm::DebuggerKind::Default) /// Dwarf version. Version zero indicates to LLVM that no DWARF should be diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index 8ee3ebf7f2af9..58af122993255 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -2722,6 +2722,7 @@ def ggdb2 : Flag<["-"], "ggdb2">, Group<ggdbN_Group>; def ggdb3 : Flag<["-"], "ggdb3">, Group<ggdbN_Group>; def glldb : Flag<["-"], "glldb">, Group<gTune_Group>; def gsce : Flag<["-"], "gsce">, Group<gTune_Group>; +def gdbx : Flag<["-"], "gdbx">, Group<gTune_Group>; // Equivalent to our default dwarf version. Forces usual dwarf emission when // CodeView is enabled. def gdwarf : Flag<["-"], "gdwarf">, Group<g_Group>, Flags<[CoreOption]>, @@ -4612,8 +4613,8 @@ def default_function_attr : Separate<["-"], "default-function-attr">, def dwarf_version_EQ : Joined<["-"], "dwarf-version=">, MarshallingInfoInt<CodeGenOpts<"DwarfVersion">>; def debugger_tuning_EQ : Joined<["-"], "debugger-tuning=">, - Values<"gdb,lldb,sce">, - NormalizedValuesScope<"llvm::DebuggerKind">, NormalizedValues<["GDB", "LLDB", "SCE"]>, + Values<"gdb,lldb,sce,dbx">, + NormalizedValuesScope<"llvm::DebuggerKind">, NormalizedValues<["GDB", "LLDB", "SCE", "DBX"]>, MarshallingInfoEnum<CodeGenOpts<"DebuggerTuning">, "Default">; def dwarf_debug_flags : Separate<["-"], "dwarf-debug-flags">, HelpText<"The string to embed in the Dwarf debug flags record.">, diff --git a/clang/lib/Driver/ToolChains/AIX.h b/clang/lib/Driver/ToolChains/AIX.h index c6aac09ddfac3..1534af950c88f 100644 --- a/clang/lib/Driver/ToolChains/AIX.h +++ b/clang/lib/Driver/ToolChains/AIX.h @@ -77,6 +77,10 @@ class LLVM_LIBRARY_VISIBILITY AIX : public ToolChain { // Set default DWARF version to 3 for now as latest AIX OS supports version 3. unsigned GetDefaultDwarfVersion() const override { return 3; } + llvm::DebuggerKind getDefaultDebuggerTuning() const override { + return llvm::DebuggerKind::DBX; + } + protected: Tool *buildAssembler() const override; Tool *buildLinker() const override; diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index 804f528838c58..c9b44aa76b6ba 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -1051,6 +1051,9 @@ static void RenderDebugEnablingArgs(const ArgList &Args, ArgStringList &CmdArgs, case llvm::DebuggerKind::SCE: CmdArgs.push_back("-debugger-tuning=sce"); break; + case llvm::DebuggerKind::DBX: + CmdArgs.push_back("-debugger-tuning=dbx"); + break; default: break; } @@ -3895,6 +3898,8 @@ static void renderDebugOptions(const ToolChain &TC, const Driver &D, DebuggerTuning = llvm::DebuggerKind::LLDB; else if (A->getOption().matches(options::OPT_gsce)) DebuggerTuning = llvm::DebuggerKind::SCE; + else if (A->getOption().matches(options::OPT_gdbx)) + DebuggerTuning = llvm::DebuggerKind::DBX; else DebuggerTuning = llvm::DebuggerKind::GDB; } diff --git a/clang/lib/Driver/ToolChains/CommonArgs.cpp b/clang/lib/Driver/ToolChains/CommonArgs.cpp index 62432b5b7576d..6baf1d1acbb32 100644 --- a/clang/lib/Driver/ToolChains/CommonArgs.cpp +++ b/clang/lib/Driver/ToolChains/CommonArgs.cpp @@ -550,6 +550,8 @@ void tools::addLTOOptions(const ToolChain &ToolChain, const ArgList &Args, CmdArgs.push_back("-plugin-opt=-debugger-tune=lldb"); else if (A->getOption().matches(options::OPT_gsce)) CmdArgs.push_back("-plugin-opt=-debugger-tune=sce"); + else if (A->getOption().matches(options::OPT_gdbx)) + CmdArgs.push_back("-plugin-opt=-debugger-tune=dbx"); else CmdArgs.push_back("-plugin-opt=-debugger-tune=gdb"); } diff --git a/clang/test/Driver/debug-options.c b/clang/test/Driver/debug-options.c index 315ce6c580088..d46ca8dd07263 100644 --- a/clang/test/Driver/debug-options.c +++ b/clang/test/Driver/debug-options.c @@ -18,6 +18,8 @@ // RUN: | FileCheck -check-prefix=G_STANDALONE -check-prefix=G_LLDB %s // RUN: %clang -### -c -gsce %s -target x86_64-linux-gnu 2>&1 \ // RUN: | FileCheck -check-prefix=G_LIMITED -check-prefix=G_SCE %s +// RUN: %clang -### -c -gdbx %s -target x86_64-linux-gnu 2>&1 \ +// RUN: | FileCheck -check-prefix=G_LIMITED -check-prefix=G_DBX %s // Android. // Android should always generate DWARF4. @@ -102,6 +104,12 @@ // RUN: %clang -### -c %s -gsce -target x86_64-unknown-linux 2>&1 \ // RUN: | FileCheck -check-prefix=NOCI %s +// On the AIX, -g defaults to -gdbx and limited debug info. +// RUN: %clang -### -c -g %s -target powerpc-ibm-aix-xcoff 2>&1 \ +// RUN: | FileCheck -check-prefix=G_LIMITED -check-prefix=G_DBX %s +// RUN: %clang -### -c -g %s -target powerpc64-ibm-aix-xcoff 2>&1 \ +// RUN: | FileCheck -check-prefix=G_LIMITED -check-prefix=G_DBX %s + // RUN: %clang -### -c -gdwarf-2 %s 2>&1 \ // RUN: | FileCheck -check-prefix=G_ONLY_DWARF2 %s // @@ -294,6 +302,7 @@ // G_GDB: "-debugger-tuning=gdb" // G_LLDB: "-debugger-tuning=lldb" // G_SCE: "-debugger-tuning=sce" +// G_DBX: "-debugger-tuning=dbx" // // G_NOTUNING: "-cc1" // G_NOTUNING-NOT: "-debugger-tuning=" diff --git a/llvm/include/llvm/Target/TargetOptions.h b/llvm/include/llvm/Target/TargetOptions.h index fd014d46e7587..ae858fc2d7a79 100644 --- a/llvm/include/llvm/Target/TargetOptions.h +++ b/llvm/include/llvm/Target/TargetOptions.h @@ -105,10 +105,11 @@ namespace llvm { /// in DwarfDebug; if a given feature has a more specific command-line option, /// that option should take precedence over the tuning. enum class DebuggerKind { - Default, // No specific tuning requested. - GDB, // Tune debug info for gdb. - LLDB, // Tune debug info for lldb. - SCE // Tune debug info for SCE targets (e.g. PS4). + Default, ///< No specific tuning requested. + GDB, ///< Tune debug info for gdb. + LLDB, ///< Tune debug info for lldb. + SCE, ///< Tune debug info for SCE targets (e.g. PS4). + DBX ///< Tune debug info for dbx. }; /// Enable abort calls when global instruction selection fails to lower/select _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits