[PATCH] D44385: [DEBUGINFO] Add flag -no-dwarf-gnu-pub-sections to disable gnu pub sections.
David Blaikie via llvm-commits
llvm-commits at lists.llvm.org
Mon Mar 12 08:46:46 PDT 2018
What's the use-case/motivation? Should this be an IR feature (on a per-CU
basis, so that LTO can correctly respect some CUs requesting this feature,
and some disabling it)
On Mon, Mar 12, 2018 at 8:06 AM Alexey Bataev via Phabricator via
llvm-commits <llvm-commits at lists.llvm.org> wrote:
> ABataev created this revision.
> ABataev added reviewers: probinson, echristo.
> Herald added subscribers: JDevlieghere, aprantl.
>
> Added a flag -no-dwarf-gnu-pub-sections, which allows to disable
> emission of gnu public sections.
>
>
> Repository:
> rL LLVM
>
> https://reviews.llvm.org/D44385
>
> Files:
> lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp
> lib/CodeGen/AsmPrinter/DwarfDebug.cpp
> lib/CodeGen/AsmPrinter/DwarfDebug.h
> test/DebugInfo/X86/no-gnu-public-sections.ll
>
>
> Index: test/DebugInfo/X86/no-gnu-public-sections.ll
> ===================================================================
> --- /dev/null
> +++ test/DebugInfo/X86/no-gnu-public-sections.ll
> @@ -0,0 +1,31 @@
> +; RUN: llc -mtriple=x86_64-pc-linux-gnu -debugger-tune=gdb -filetype=asm
> < %s -no-dwarf-gnu-pub-sections | FileCheck %s --check-prefix=DISABLED
> +; RUN: llc -mtriple=x86_64-pc-linux-gnu -debugger-tune=gdb -filetype=asm
> < %s | FileCheck %s
> +
> +; DISABLED-NOT: {{.debug_gnu_pubnames|.debug_gnu_pubtypes}}
> +; CHECK-DAG: .section .debug_gnu_pubnames
> +; CHECK-DAG: .section .debug_gnu_pubtypes
> +
> +%struct.bar = type { %"struct.ns::foo" }
> +%"struct.ns::foo" = type { i8 }
> +
> + at b = global %struct.bar zeroinitializer, align 1, !dbg !0
> +
> +!llvm.dbg.cu = !{!2}
> +!llvm.module.flags = !{!11, !12}
> +!llvm.ident = !{!13}
> +
> +!0 = !DIGlobalVariableExpression(var: !1, expr: !DIExpression())
> +!1 = distinct !DIGlobalVariable(name: "b", scope: !2, file: !3, line: 8,
> type: !6, isLocal: false, isDefinition: true)
> +!2 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !3,
> producer: "clang", isOptimized: false, runtimeVersion: 0, emissionKind:
> FullDebug, enums: !4, globals: !5, gnuPubnames: true)
> +!3 = !DIFile(filename: "type.cpp", directory: "/tmp/dbginfo")
> +!4 = !{}
> +!5 = !{!0}
> +!6 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "bar",
> file: !3, line: 5, size: 8, elements: !7, identifier: "_ZTS3bar")
> +!7 = !{!8}
> +!8 = !DIDerivedType(tag: DW_TAG_member, name: "f", scope: !6, file: !3,
> line: 6, baseType: !9, size: 8)
> +!9 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "foo",
> scope: !10, file: !3, line: 2, size: 8, elements: !4, identifier:
> "_ZTSN2ns3fooE")
> +!10 = !DINamespace(name: "ns", scope: null)
> +!11 = !{i32 2, !"Dwarf Version", i32 4}
> +!12 = !{i32 2, !"Debug Info Version", i32 3}
> +!13 = !{!"clang"}
> +
> Index: lib/CodeGen/AsmPrinter/DwarfDebug.h
> ===================================================================
> --- lib/CodeGen/AsmPrinter/DwarfDebug.h
> +++ lib/CodeGen/AsmPrinter/DwarfDebug.h
> @@ -258,6 +258,9 @@
> /// Use inlined strings.
> bool UseInlineStrings = false;
>
> + /// Emit GNU pub sections.
> + bool UseGnuPubSections = true;
> +
> /// DWARF5 Experimental Options
> /// @{
> bool HasDwarfAccelTables;
> @@ -501,6 +504,9 @@
> /// Returns whether to use inline strings.
> bool useInlineStrings() const { return UseInlineStrings; }
>
> + /// Returns whether GNU oub sections should be emitted.
> + bool useGnuPubSections() const { return UseGnuPubSections; }
> +
> // Experimental DWARF5 features.
>
> /// Returns whether or not to emit tables that dwarf consumers can
> Index: lib/CodeGen/AsmPrinter/DwarfDebug.cpp
> ===================================================================
> --- lib/CodeGen/AsmPrinter/DwarfDebug.cpp
> +++ lib/CodeGen/AsmPrinter/DwarfDebug.cpp
> @@ -123,6 +123,11 @@
> clEnumVal(Disable, "Disabled")),
> cl::init(Default));
>
> +static cl::opt<bool>
> + NoDwarfGnuPubSections("no-dwarf-gnu-pub-sections", cl::Hidden,
> + cl::desc("Disable emission of GNU pub
> sections."),
> + cl::init(false));
> +
> enum LinkageNameOption {
> DefaultLinkageNames,
> AllLinkageNames,
> @@ -310,6 +315,8 @@
> // Use dwarf 4 by default if nothing is requested.
> DwarfVersion = DwarfVersion ? DwarfVersion : dwarf::DWARF_VERSION;
>
> + UseGnuPubSections = !NoDwarfGnuPubSections;
> +
> // Work around a GDB bug. GDB doesn't support the standard opcode;
> // SCE doesn't support GNU's; LLDB prefers the standard opcode, which
> // is defined as of DWARF 3.
> Index: lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp
> ===================================================================
> --- lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp
> +++ lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp
> @@ -846,6 +846,9 @@
> }
>
> bool DwarfCompileUnit::hasDwarfPubSections() const {
> + if (!DD->useGnuPubSections())
> + return false;
> +
> // Opting in to GNU Pubnames/types overrides the default to ensure
> these are
> // generated for things like Gold's gdb_index generation.
> if (CUNode->getGnuPubnames())
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180312/efe3dd8c/attachment.html>
More information about the llvm-commits
mailing list