<div dir="ltr">(tiny factoid: turns out gold's 64 bit gdb-index support is also broken in a different, more subtle way... - so best folks don't use this flag except with lld, it seems, if you're using gdb-index)</div><br><div class="gmail_quote"><div dir="ltr">On Tue, Nov 13, 2018 at 12:10 PM David Blaikie via cfe-commits <<a href="mailto:cfe-commits@lists.llvm.org">cfe-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: dblaikie<br>
Date: Tue Nov 13 12:08:13 2018<br>
New Revision: 346789<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=346789&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=346789&view=rev</a><br>
Log:<br>
DebugInfo: Add a driver flag for DWARF debug_ranges base address specifier use.<br>
<br>
Summary:<br>
This saves a lot of relocations in optimized object files (at the cost<br>
of some cost/increase in linked executable bytes), but gold's 32 bit<br>
gdb-index support has a bug (<br>
<a href="https://sourceware.org/bugzilla/show_bug.cgi?id=21894" rel="noreferrer" target="_blank">https://sourceware.org/bugzilla/show_bug.cgi?id=21894</a> ) so we can't<br>
switch to this unconditionally. (& even if it weren't for that bug, one<br>
might argue that some users would want to optimize in one direction or<br>
the other - prioritizing object size or linked executable size)<br>
<br>
Differential Revision: <a href="https://reviews.llvm.org/D54243" rel="noreferrer" target="_blank">https://reviews.llvm.org/D54243</a><br>
<br>
Added:<br>
    cfe/trunk/test/CodeGen/debug-info-ranges-base-address.c<br>
Modified:<br>
    cfe/trunk/include/clang/Driver/Options.td<br>
    cfe/trunk/include/clang/Frontend/CodeGenOptions.def<br>
    cfe/trunk/lib/CodeGen/CGDebugInfo.cpp<br>
    cfe/trunk/lib/Driver/ToolChains/Clang.cpp<br>
    cfe/trunk/lib/Frontend/CompilerInvocation.cpp<br>
    cfe/trunk/test/Driver/debug-options.c<br>
<br>
Modified: cfe/trunk/include/clang/Driver/Options.td<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/Options.td?rev=346789&r1=346788&r2=346789&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/Options.td?rev=346789&r1=346788&r2=346789&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/include/clang/Driver/Options.td (original)<br>
+++ cfe/trunk/include/clang/Driver/Options.td Tue Nov 13 12:08:13 2018<br>
@@ -1780,6 +1780,10 @@ def fdebug_types_section: Flag <["-"], "<br>
   Flags<[CC1Option]>, HelpText<"Place debug types in their own section (ELF Only)">;<br>
 def fno_debug_types_section: Flag<["-"], "fno-debug-types-section">, Group<f_Group>,<br>
   Flags<[CC1Option]>;<br>
+def fdebug_ranges_base_address: Flag <["-"], "fdebug-ranges-base-address">, Group<f_Group>,<br>
+  Flags<[CC1Option]>, HelpText<"Use DWARF base address selection entries in debug_ranges">;<br>
+def fno_debug_ranges_base_address: Flag <["-"], "fno-debug-ranges-base-address">, Group<f_Group>,<br>
+  Flags<[CC1Option]>;<br>
 def fsplit_dwarf_inlining: Flag <["-"], "fsplit-dwarf-inlining">, Group<f_Group>,<br>
   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">;<br>
 def fno_split_dwarf_inlining: Flag<["-"], "fno-split-dwarf-inlining">, Group<f_Group>,<br>
<br>
Modified: cfe/trunk/include/clang/Frontend/CodeGenOptions.def<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Frontend/CodeGenOptions.def?rev=346789&r1=346788&r2=346789&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Frontend/CodeGenOptions.def?rev=346789&r1=346788&r2=346789&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/include/clang/Frontend/CodeGenOptions.def (original)<br>
+++ cfe/trunk/include/clang/Frontend/CodeGenOptions.def Tue Nov 13 12:08:13 2018<br>
@@ -331,6 +331,9 @@ CODEGENOPT(PreserveVec3Type, 1, 0)<br>
 /// Whether to emit .debug_gnu_pubnames section instead of .debug_pubnames.<br>
 CODEGENOPT(DebugNameTable, 2, 0)<br>
<br>
+/// Whether to use DWARF base address specifiers in .debug_ranges.<br>
+CODEGENOPT(DebugRangesBaseAddress, 1, 0)<br>
+<br>
 CODEGENOPT(NoPLT, 1, 0)<br>
<br>
 /// Whether to embed source in DWARF debug line section.<br>
<br>
Modified: cfe/trunk/lib/CodeGen/CGDebugInfo.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGDebugInfo.cpp?rev=346789&r1=346788&r2=346789&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGDebugInfo.cpp?rev=346789&r1=346788&r2=346789&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/CodeGen/CGDebugInfo.cpp (original)<br>
+++ cfe/trunk/lib/CodeGen/CGDebugInfo.cpp Tue Nov 13 12:08:13 2018<br>
@@ -586,7 +586,8 @@ void CGDebugInfo::CreateCompileUnit() {<br>
       CGM.getTarget().getTriple().isNVPTX()<br>
           ? llvm::DICompileUnit::DebugNameTableKind::None<br>
           : static_cast<llvm::DICompileUnit::DebugNameTableKind>(<br>
-                CGOpts.DebugNameTable));<br>
+                CGOpts.DebugNameTable),<br>
+      CGOpts.DebugRangesBaseAddress);<br>
 }<br>
<br>
 llvm::DIType *CGDebugInfo::CreateType(const BuiltinType *BT) {<br>
<br>
Modified: cfe/trunk/lib/Driver/ToolChains/Clang.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/Clang.cpp?rev=346789&r1=346788&r2=346789&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/Clang.cpp?rev=346789&r1=346788&r2=346789&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/Driver/ToolChains/Clang.cpp (original)<br>
+++ cfe/trunk/lib/Driver/ToolChains/Clang.cpp Tue Nov 13 12:08:13 2018<br>
@@ -3188,6 +3188,11 @@ static void RenderDebugOptions(const Too<br>
                             ? "-gpubnames"<br>
                             : "-ggnu-pubnames");<br>
<br>
+  if (Args.hasFlag(options::OPT_fdebug_ranges_base_address,<br>
+                   options::OPT_fno_debug_ranges_base_address, false)) {<br>
+    CmdArgs.push_back("-fdebug-ranges-base-address");<br>
+  }<br>
+<br>
   // -gdwarf-aranges turns on the emission of the aranges section in the<br>
   // backend.<br>
   // Always enabled for SCE tuning.<br>
<br>
Modified: cfe/trunk/lib/Frontend/CompilerInvocation.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInvocation.cpp?rev=346789&r1=346788&r2=346789&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInvocation.cpp?rev=346789&r1=346788&r2=346789&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/Frontend/CompilerInvocation.cpp (original)<br>
+++ cfe/trunk/lib/Frontend/CompilerInvocation.cpp Tue Nov 13 12:08:13 2018<br>
@@ -651,6 +651,7 @@ static bool ParseCodeGenArgs(CodeGenOpti<br>
           : Args.hasArg(OPT_gpubnames)<br>
                 ? llvm::DICompileUnit::DebugNameTableKind::Default<br>
                 : llvm::DICompileUnit::DebugNameTableKind::None);<br>
+  Opts.DebugRangesBaseAddress = Args.hasArg(OPT_fdebug_ranges_base_address);<br>
<br>
   setPGOInstrumentor(Opts, Args, Diags);<br>
   Opts.InstrProfileOutput =<br>
<br>
Added: cfe/trunk/test/CodeGen/debug-info-ranges-base-address.c<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/debug-info-ranges-base-address.c?rev=346789&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/debug-info-ranges-base-address.c?rev=346789&view=auto</a><br>
==============================================================================<br>
--- cfe/trunk/test/CodeGen/debug-info-ranges-base-address.c (added)<br>
+++ cfe/trunk/test/CodeGen/debug-info-ranges-base-address.c Tue Nov 13 12:08:13 2018<br>
@@ -0,0 +1,9 @@<br>
+// RUN: %clang_cc1 -emit-llvm -debug-info-kind=limited %s -o - | FileCheck --check-prefix=NORNGBSE %s<br>
+// RUN: %clang_cc1 -emit-llvm -debug-info-kind=limited %s -o - -fdebug-ranges-base-address | FileCheck --check-prefix=RNGBSE %s<br>
+<br>
+// NORNGBSE-NOT: rangesBaseAddress<br>
+// RNGBSE: !DICompileUnit({{.*}}, rangesBaseAddress: true<br>
+<br>
+void f1() {<br>
+}<br>
+<br>
<br>
Modified: cfe/trunk/test/Driver/debug-options.c<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/debug-options.c?rev=346789&r1=346788&r2=346789&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/debug-options.c?rev=346789&r1=346788&r2=346789&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/test/Driver/debug-options.c (original)<br>
+++ cfe/trunk/test/Driver/debug-options.c Tue Nov 13 12:08:13 2018<br>
@@ -165,6 +165,10 @@<br>
 // RUN: %clang -### -c -gsplit-dwarf %s 2>&1 | FileCheck -check-prefix=GPUB %s<br>
 // RUN: %clang -### -c -gsplit-dwarf -gno-pubnames %s 2>&1 | FileCheck -check-prefix=NOPUB %s<br>
 //<br>
+// RUN: %clang -### -c -fdebug-ranges-base-address %s 2>&1 | FileCheck -check-prefix=RNGBSE %s<br>
+// RUN: %clang -### -c %s 2>&1 | FileCheck -check-prefix=NORNGBSE %s<br>
+// RUN: %clang -### -c -fdebug-ranges-base-address -fno-debug-ranges-base-address %s 2>&1 | FileCheck -check-prefix=NORNGBSE %s<br>
+//<br>
 // RUN: %clang -### -c -glldb %s 2>&1 | FileCheck -check-prefix=GPUB %s<br>
 // RUN: %clang -### -c -glldb -gno-pubnames %s 2>&1 | FileCheck -check-prefix=NOPUB %s<br>
 //<br>
@@ -282,6 +286,9 @@<br>
 //<br>
 // PUB: -gpubnames<br>
 //<br>
+// RNGBSE: -fdebug-ranges-base-address<br>
+// NORNGBSE-NOT: -fdebug-ranges-base-address<br>
+//<br>
 // GARANGE: -generate-arange-section<br>
 //<br>
 // FDTS: "-mllvm" "-generate-type-units"<br>
<br>
<br>
_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits</a><br>
</blockquote></div>