[PATCH] D54243: DebugInfo: Add a driver flag for DWARF debug_ranges base address specifier use.
dblaikie added a comment. Settled on renaming the flag for consistency with, say, -fdebug-types-section, to -fdebug-ranges-base-address (though 'debug' is sort of ambiguous (Clang can produce non-DWARF debug info) but this driver (as opposed to clang-cl) is intended for DWARF emission, not PDB emission - and the "debug-ranges" part of the flag names the literal debug_ranges section (like debug-types refers to the debug_types section)). Repository: rL LLVM https://reviews.llvm.org/D54243 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D54243: DebugInfo: Add a driver flag for DWARF debug_ranges base address specifier use.
This revision was not accepted when it landed; it landed in state "Needs Review". This revision was automatically updated to reflect the committed changes. Closed by commit rL346789: DebugInfo: Add a driver flag for DWARF debug_ranges base address specifier use. (authored by dblaikie, committed by ). Herald added a subscriber: llvm-commits. Changed prior to commit: https://reviews.llvm.org/D54243?vs=173096=173905#toc Repository: rL LLVM https://reviews.llvm.org/D54243 Files: cfe/trunk/include/clang/Driver/Options.td cfe/trunk/include/clang/Frontend/CodeGenOptions.def cfe/trunk/lib/CodeGen/CGDebugInfo.cpp cfe/trunk/lib/Driver/ToolChains/Clang.cpp cfe/trunk/lib/Frontend/CompilerInvocation.cpp cfe/trunk/test/CodeGen/debug-info-ranges-base-address.c cfe/trunk/test/Driver/debug-options.c Index: cfe/trunk/lib/Frontend/CompilerInvocation.cpp === --- cfe/trunk/lib/Frontend/CompilerInvocation.cpp +++ cfe/trunk/lib/Frontend/CompilerInvocation.cpp @@ -651,6 +651,7 @@ : Args.hasArg(OPT_gpubnames) ? llvm::DICompileUnit::DebugNameTableKind::Default : llvm::DICompileUnit::DebugNameTableKind::None); + Opts.DebugRangesBaseAddress = Args.hasArg(OPT_fdebug_ranges_base_address); setPGOInstrumentor(Opts, Args, Diags); Opts.InstrProfileOutput = Index: cfe/trunk/lib/CodeGen/CGDebugInfo.cpp === --- cfe/trunk/lib/CodeGen/CGDebugInfo.cpp +++ cfe/trunk/lib/CodeGen/CGDebugInfo.cpp @@ -586,7 +586,8 @@ CGM.getTarget().getTriple().isNVPTX() ? llvm::DICompileUnit::DebugNameTableKind::None : static_cast( -CGOpts.DebugNameTable)); +CGOpts.DebugNameTable), + CGOpts.DebugRangesBaseAddress); } llvm::DIType *CGDebugInfo::CreateType(const BuiltinType *BT) { Index: cfe/trunk/lib/Driver/ToolChains/Clang.cpp === --- cfe/trunk/lib/Driver/ToolChains/Clang.cpp +++ cfe/trunk/lib/Driver/ToolChains/Clang.cpp @@ -3188,6 +3188,11 @@ ? "-gpubnames" : "-ggnu-pubnames"); + if (Args.hasFlag(options::OPT_fdebug_ranges_base_address, + options::OPT_fno_debug_ranges_base_address, false)) { +CmdArgs.push_back("-fdebug-ranges-base-address"); + } + // -gdwarf-aranges turns on the emission of the aranges section in the // backend. // Always enabled for SCE tuning. Index: cfe/trunk/include/clang/Frontend/CodeGenOptions.def === --- cfe/trunk/include/clang/Frontend/CodeGenOptions.def +++ cfe/trunk/include/clang/Frontend/CodeGenOptions.def @@ -331,6 +331,9 @@ /// Whether to emit .debug_gnu_pubnames section instead of .debug_pubnames. CODEGENOPT(DebugNameTable, 2, 0) +/// Whether to use DWARF base address specifiers in .debug_ranges. +CODEGENOPT(DebugRangesBaseAddress, 1, 0) + CODEGENOPT(NoPLT, 1, 0) /// Whether to embed source in DWARF debug line section. Index: cfe/trunk/include/clang/Driver/Options.td === --- cfe/trunk/include/clang/Driver/Options.td +++ cfe/trunk/include/clang/Driver/Options.td @@ -1780,6 +1780,10 @@ Flags<[CC1Option]>, HelpText<"Place debug types in their own section (ELF Only)">; def fno_debug_types_section: Flag<["-"], "fno-debug-types-section">, Group, Flags<[CC1Option]>; +def fdebug_ranges_base_address: Flag <["-"], "fdebug-ranges-base-address">, Group, + Flags<[CC1Option]>, HelpText<"Use DWARF base address selection entries in debug_ranges">; +def fno_debug_ranges_base_address: Flag <["-"], "fno-debug-ranges-base-address">, Group, + Flags<[CC1Option]>; def fsplit_dwarf_inlining: Flag <["-"], "fsplit-dwarf-inlining">, Group, Flags<[CC1Option]>, HelpText<"Provide minimal debug info in the object/executable to facilitate online symbolication/stack traces in the absence of .dwo/.dwp files when using Split DWARF">; def fno_split_dwarf_inlining: Flag<["-"], "fno-split-dwarf-inlining">, Group, Index: cfe/trunk/test/Driver/debug-options.c === --- cfe/trunk/test/Driver/debug-options.c +++ cfe/trunk/test/Driver/debug-options.c @@ -165,6 +165,10 @@ // RUN: %clang -### -c -gsplit-dwarf %s 2>&1 | FileCheck -check-prefix=GPUB %s // RUN: %clang -### -c -gsplit-dwarf -gno-pubnames %s 2>&1 | FileCheck -check-prefix=NOPUB %s // +// RUN: %clang -### -c -fdebug-ranges-base-address %s 2>&1 | FileCheck -check-prefix=RNGBSE %s +// RUN: %clang -### -c %s 2>&1 | FileCheck -check-prefix=NORNGBSE %s +// RUN: %clang -### -c -fdebug-ranges-base-address -fno-debug-ranges-base-address %s 2>&1 | FileCheck -check-prefix=NORNGBSE %s +// // RUN: %clang -### -c -glldb %s 2>&1 | FileCheck -check-prefix=GPUB %s // RUN: %clang -### -c -glldb
[PATCH] D54243: DebugInfo: Add a driver flag for DWARF debug_ranges base address specifier use.
echristo added a comment. I have no other bikeshed colors here. :) Repository: rC Clang https://reviews.llvm.org/D54243 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D54243: DebugInfo: Add a driver flag for DWARF debug_ranges base address specifier use.
dblaikie created this revision. dblaikie added reviewers: JDevlieghere, aprantl, probinson. Herald added a subscriber: cfe-commits. This saves a lot of relocations in optimized object files (at the cost of some cost/increase in linked executable bytes), but gold's 32 bit gdb-index support has a bug ( https://sourceware.org/bugzilla/show_bug.cgi?id=21894 ) so we can't switch to this unconditionally. (& even if it weren't for that bug, one might argue that some users would want to optimize in one direction or the other - prioritizing object size or linked executable size) Mostly sending this for review to bikeshed the flag name. (let's bikeshed the IR names in the LLVM code review) -fdwarf-base-address is my first prototype. Issues: - Some existing flags (like -fdebug-types-section) use 'debug' rather than 'dwarf', but Clang supports formats other than dwarf, so perhaps names related to dwarf-specific features should have dwarf in the name, though it's unlikely GCC would ever be consistent with that goal? - base addresses are part of DWARF even beyond this change (eg: range lists are relative to the CU's base address - which is somewhat unrelated to the base address specifiers used in the range list). So should this specifically call out that it's related to ranges? that it's base address /specifiers/ that are in use? Repository: rC Clang https://reviews.llvm.org/D54243 Files: include/clang/Driver/Options.td include/clang/Frontend/CodeGenOptions.def lib/Driver/ToolChains/Clang.cpp lib/Frontend/CompilerInvocation.cpp Index: lib/Frontend/CompilerInvocation.cpp === --- lib/Frontend/CompilerInvocation.cpp +++ lib/Frontend/CompilerInvocation.cpp @@ -651,6 +651,7 @@ : Args.hasArg(OPT_gpubnames) ? llvm::DICompileUnit::DebugNameTableKind::Default : llvm::DICompileUnit::DebugNameTableKind::None); + Opts.DebugBaseAddress = Args.hasArg(OPT_fdwarf_base_address); setPGOInstrumentor(Opts, Args, Diags); Opts.InstrProfileOutput = Index: lib/Driver/ToolChains/Clang.cpp === --- lib/Driver/ToolChains/Clang.cpp +++ lib/Driver/ToolChains/Clang.cpp @@ -3188,6 +3188,11 @@ ? "-gpubnames" : "-ggnu-pubnames"); + if (Args.hasFlag(options::OPT_fdwarf_base_address, + options::OPT_fno_dwarf_base_address, false)) { +CmdArgs.push_back("-fdwarf-base-address"); + } + // -gdwarf-aranges turns on the emission of the aranges section in the // backend. // Always enabled for SCE tuning. Index: include/clang/Frontend/CodeGenOptions.def === --- include/clang/Frontend/CodeGenOptions.def +++ include/clang/Frontend/CodeGenOptions.def @@ -331,6 +331,9 @@ /// Whether to emit .debug_gnu_pubnames section instead of .debug_pubnames. CODEGENOPT(DebugNameTable, 2, 0) +/// Whether to use DWARF base address specifiers in .debug_ranges. +CODEGENOPT(DebugBaseAddress, 1, 0) + CODEGENOPT(NoPLT, 1, 0) /// Whether to embed source in DWARF debug line section. Index: include/clang/Driver/Options.td === --- include/clang/Driver/Options.td +++ include/clang/Driver/Options.td @@ -1780,6 +1780,10 @@ Flags<[CC1Option]>, HelpText<"Place debug types in their own section (ELF Only)">; def fno_debug_types_section: Flag<["-"], "fno-debug-types-section">, Group, Flags<[CC1Option]>; +def fdwarf_base_address: Flag <["-"], "fdwarf-base-address">, Group, + Flags<[CC1Option]>, HelpText<"Use DWARF base address selection entries in debug_ranges">; +def fno_dwarf_base_address: Flag <["-"], "fno-dwarf_base_address">, Group, + Flags<[CC1Option]>; def fsplit_dwarf_inlining: Flag <["-"], "fsplit-dwarf-inlining">, Group, Flags<[CC1Option]>, HelpText<"Provide minimal debug info in the object/executable to facilitate online symbolication/stack traces in the absence of .dwo/.dwp files when using Split DWARF">; def fno_split_dwarf_inlining: Flag<["-"], "fno-split-dwarf-inlining">, Group, Index: lib/Frontend/CompilerInvocation.cpp === --- lib/Frontend/CompilerInvocation.cpp +++ lib/Frontend/CompilerInvocation.cpp @@ -651,6 +651,7 @@ : Args.hasArg(OPT_gpubnames) ? llvm::DICompileUnit::DebugNameTableKind::Default : llvm::DICompileUnit::DebugNameTableKind::None); + Opts.DebugBaseAddress = Args.hasArg(OPT_fdwarf_base_address); setPGOInstrumentor(Opts, Args, Diags); Opts.InstrProfileOutput = Index: lib/Driver/ToolChains/Clang.cpp === --- lib/Driver/ToolChains/Clang.cpp +++ lib/Driver/ToolChains/Clang.cpp @@ -3188,6 +3188,11 @@ ?