[llvm] f721fcb - Revert "[JITLink][ELF] Don't skip debug info sections by default."

Muhammad Omair Javaid via llvm-commits llvm-commits at lists.llvm.org
Mon Mar 20 03:33:34 PDT 2023


Author: Muhammad Omair Javaid
Date: 2023-03-20T15:33:20+05:00
New Revision: f721fcb6ed0a186b8f146282467dd8420a5a36d0

URL: https://github.com/llvm/llvm-project/commit/f721fcb6ed0a186b8f146282467dd8420a5a36d0
DIFF: https://github.com/llvm/llvm-project/commit/f721fcb6ed0a186b8f146282467dd8420a5a36d0.diff

LOG: Revert "[JITLink][ELF] Don't skip debug info sections by default."

This reverts commit 57aeb305460406f7b822cfe6ab9fb4d730fc3b38.
Breaks buildbot https://lab.llvm.org/buildbot/#/builders/197/builds/4272

Added: 
    llvm/test/ExecutionEngine/JITLink/X86/ELF_skip_debug_sections.s

Modified: 
    llvm/lib/ExecutionEngine/JITLink/ELFLinkGraphBuilder.h

Removed: 
    llvm/test/ExecutionEngine/JITLink/X86/ELF_debug_section_lifetime_is_NoAlloc.yaml


################################################################################
diff  --git a/llvm/lib/ExecutionEngine/JITLink/ELFLinkGraphBuilder.h b/llvm/lib/ExecutionEngine/JITLink/ELFLinkGraphBuilder.h
index 26feb8ea3277..cd046057217f 100644
--- a/llvm/lib/ExecutionEngine/JITLink/ELFLinkGraphBuilder.h
+++ b/llvm/lib/ExecutionEngine/JITLink/ELFLinkGraphBuilder.h
@@ -62,14 +62,6 @@ class ELFLinkGraphBuilder : public ELFLinkGraphBuilderBase {
                       StringRef FileName,
                       LinkGraph::GetEdgeKindNameFunction GetEdgeKindName);
 
-  /// Debug sections are included in the graph by default. Use
-  /// setProcessDebugSections(false) to ignore them if debug info is not
-  /// needed.
-  ELFLinkGraphBuilder &setProcessDebugSections(bool ProcessDebugSections) {
-    this->ProcessDebugSections = ProcessDebugSections;
-    return *this;
-  }
-
   /// Attempt to construct and return the LinkGraph.
   Expected<std::unique_ptr<LinkGraph>> buildGraph();
 
@@ -123,7 +115,8 @@ class ELFLinkGraphBuilder : public ELFLinkGraphBuilderBase {
   ///
   template <typename RelocHandlerMethod>
   Error forEachRelaRelocation(const typename ELFT::Shdr &RelSect,
-                              RelocHandlerMethod &&Func);
+                              RelocHandlerMethod &&Func,
+                              bool ProcessDebugSections = false);
 
   /// Traverse all matching ELFT::Rel relocation records in the given section.
   /// The handler function Func should be callable with this signature:
@@ -132,19 +125,22 @@ class ELFLinkGraphBuilder : public ELFLinkGraphBuilderBase {
   ///
   template <typename RelocHandlerMethod>
   Error forEachRelRelocation(const typename ELFT::Shdr &RelSect,
-                             RelocHandlerMethod &&Func);
+                             RelocHandlerMethod &&Func,
+                             bool ProcessDebugSections = false);
 
   /// Traverse all matching rela relocation records in the given section.
   /// Convenience wrapper to allow passing a member function for the handler.
   ///
   template <typename ClassT, typename RelocHandlerMethod>
   Error forEachRelaRelocation(const typename ELFT::Shdr &RelSect,
-                              ClassT *Instance, RelocHandlerMethod &&Method) {
+                              ClassT *Instance, RelocHandlerMethod &&Method,
+                              bool ProcessDebugSections = false) {
     return forEachRelaRelocation(
         RelSect,
         [Instance, Method](const auto &Rel, const auto &Target, auto &GS) {
           return (Instance->*Method)(Rel, Target, GS);
-        });
+        },
+        ProcessDebugSections);
   }
 
   /// Traverse all matching rel relocation records in the given section.
@@ -152,12 +148,14 @@ class ELFLinkGraphBuilder : public ELFLinkGraphBuilderBase {
   ///
   template <typename ClassT, typename RelocHandlerMethod>
   Error forEachRelRelocation(const typename ELFT::Shdr &RelSect,
-                             ClassT *Instance, RelocHandlerMethod &&Method) {
+                             ClassT *Instance, RelocHandlerMethod &&Method,
+                             bool ProcessDebugSections = false) {
     return forEachRelRelocation(
         RelSect,
         [Instance, Method](const auto &Rel, const auto &Target, auto &GS) {
           return (Instance->*Method)(Rel, Target, GS);
-        });
+        },
+        ProcessDebugSections);
   }
 
   const ELFFile &Obj;
@@ -165,7 +163,6 @@ class ELFLinkGraphBuilder : public ELFLinkGraphBuilderBase {
   typename ELFFile::Elf_Shdr_Range Sections;
   const typename ELFFile::Elf_Shdr *SymTabSec = nullptr;
   StringRef SectionStringTab;
-  bool ProcessDebugSections = true;
 
   // Maps ELF section indexes to LinkGraph Blocks.
   // Only SHF_ALLOC sections will have graph blocks.
@@ -321,7 +318,7 @@ template <typename ELFT> Error ELFLinkGraphBuilder<ELFT>::graphifySections() {
 
     // If the name indicates that it's a debug section then skip it: We don't
     // support those yet.
-    if (!ProcessDebugSections && isDwarfSection(*Name)) {
+    if (isDwarfSection(*Name)) {
       LLVM_DEBUG({
         dbgs() << "    " << SecIndex << ": \"" << *Name
                << "\" is a debug section: "
@@ -525,7 +522,8 @@ template <typename ELFT> Error ELFLinkGraphBuilder<ELFT>::graphifySymbols() {
 template <typename ELFT>
 template <typename RelocHandlerFunction>
 Error ELFLinkGraphBuilder<ELFT>::forEachRelaRelocation(
-    const typename ELFT::Shdr &RelSect, RelocHandlerFunction &&Func) {
+    const typename ELFT::Shdr &RelSect, RelocHandlerFunction &&Func,
+    bool ProcessDebugSections) {
   // Only look into sections that store relocation entries.
   if (RelSect.sh_type != ELF::SHT_RELA)
     return Error::success();
@@ -571,7 +569,8 @@ Error ELFLinkGraphBuilder<ELFT>::forEachRelaRelocation(
 template <typename ELFT>
 template <typename RelocHandlerFunction>
 Error ELFLinkGraphBuilder<ELFT>::forEachRelRelocation(
-    const typename ELFT::Shdr &RelSect, RelocHandlerFunction &&Func) {
+    const typename ELFT::Shdr &RelSect, RelocHandlerFunction &&Func,
+    bool ProcessDebugSections) {
   // Only look into sections that store relocation entries.
   if (RelSect.sh_type != ELF::SHT_REL)
     return Error::success();

diff  --git a/llvm/test/ExecutionEngine/JITLink/X86/ELF_debug_section_lifetime_is_NoAlloc.yaml b/llvm/test/ExecutionEngine/JITLink/X86/ELF_debug_section_lifetime_is_NoAlloc.yaml
deleted file mode 100644
index 0afcda467c32..000000000000
--- a/llvm/test/ExecutionEngine/JITLink/X86/ELF_debug_section_lifetime_is_NoAlloc.yaml
+++ /dev/null
@@ -1,195 +0,0 @@
-# REQUIRES: asserts
-# RUN: yaml2obj -o %t.o %s
-# RUN: llvm-jitlink -debug-only=jitlink -noexec %t.o 2>&1 | FileCheck %s
-#
-# Check that debug sections get NoAlloc lifetimes.
-#
-# CHECK: ".debug_str" is not a SHF_ALLOC section. Using NoAlloc lifetime.
-# CHECK: ".debug_abbrev" is not a SHF_ALLOC section. Using NoAlloc lifetime.
-# CHECK: ".debug_info" is not a SHF_ALLOC section. Using NoAlloc lifetime.
-# CHECK: ".debug_line" is not a SHF_ALLOC section. Using NoAlloc lifetime.
-
-
---- !ELF
-FileHeader:
-  Class:           ELFCLASS64
-  Data:            ELFDATA2LSB
-  Type:            ET_REL
-  Machine:         EM_X86_64
-  SectionHeaderStringTable: .strtab
-Sections:
-  - Name:            .text
-    Type:            SHT_PROGBITS
-    Flags:           [ SHF_ALLOC, SHF_EXECINSTR ]
-    AddressAlign:    0x10
-    Content:         B82A000000C3662E0F1F840000000000B82A000000C3
-  - Name:            .debug_abbrev
-    Type:            SHT_PROGBITS
-    AddressAlign:    0x1
-    Content:         011101250E1305030E10171B0E110112060000022E00110112064018974219030E3A0B3B0B271949133F190000032E01110112064018974219030E3A0B3B0B271949133F1900000405000218030E3A0B3B0B49130000052400030E3E0B0B0B0000060F004913000000
-  - Name:            .debug_info
-    Type:            SHT_PROGBITS
-    AddressAlign:    0x1
-    Content:         8C0000000400000000000801000000000C000000000000000000000000000000000000000000160000000200000000000000000600000001570000000001017700000003000000000000000006000000015700000000010577000000040155000000000105770000000401540000000001057E0000000005000000000504068300000006880000000500000000060100
-  - Name:            .comment
-    Type:            SHT_PROGBITS
-    Flags:           [ SHF_MERGE, SHF_STRINGS ]
-    AddressAlign:    0x1
-    EntSize:         0x1
-    Content:         00636C616E672076657273696F6E2031302E302E302D347562756E7475312000
-  - Name:            .note.GNU-stack
-    Type:            SHT_PROGBITS
-    AddressAlign:    0x1
-  - Name:            .debug_line
-    Type:            SHT_PROGBITS
-    AddressAlign:    0x1
-    Content:         58000000040036000000010101FB0E0D0001010101000000010000012F746D700000454C465F736B69705F64656275675F73656374696F6E732E63000100000000090200000000000000000105030A130500F505030A130206000101
-  - Name:            .eh_frame
-    Type:            SHT_X86_64_UNWIND
-    Flags:           [ SHF_ALLOC ]
-    AddressAlign:    0x8
-    Content:         1400000000000000017A5200017810011B0C070890010000100000001C0000000000000006000000000000001000000030000000000000000600000000000000
-  - Name:            .rela.debug_info
-    Type:            SHT_RELA
-    Flags:           [ SHF_INFO_LINK ]
-    Link:            .symtab
-    AddressAlign:    0x8
-    Info:            .debug_info
-    Relocations:
-      - Offset:          0x6
-        Symbol:          .debug_abbrev
-        Type:            R_X86_64_32
-      - Offset:          0xC
-        Symbol:          .debug_str
-        Type:            R_X86_64_32
-      - Offset:          0x12
-        Symbol:          .debug_str
-        Type:            R_X86_64_32
-        Addend:          31
-      - Offset:          0x16
-        Symbol:          .debug_line
-        Type:            R_X86_64_32
-      - Offset:          0x1A
-        Symbol:          .debug_str
-        Type:            R_X86_64_32
-        Addend:          57
-      - Offset:          0x1E
-        Symbol:          .text
-        Type:            R_X86_64_64
-      - Offset:          0x2B
-        Symbol:          .text
-        Type:            R_X86_64_64
-      - Offset:          0x39
-        Symbol:          .debug_str
-        Type:            R_X86_64_32
-        Addend:          62
-      - Offset:          0x44
-        Symbol:          .text
-        Type:            R_X86_64_64
-        Addend:          16
-      - Offset:          0x52
-        Symbol:          .debug_str
-        Type:            R_X86_64_32
-        Addend:          70
-      - Offset:          0x5F
-        Symbol:          .debug_str
-        Type:            R_X86_64_32
-        Addend:          75
-      - Offset:          0x6C
-        Symbol:          .debug_str
-        Type:            R_X86_64_32
-        Addend:          80
-      - Offset:          0x78
-        Symbol:          .debug_str
-        Type:            R_X86_64_32
-        Addend:          66
-      - Offset:          0x89
-        Symbol:          .debug_str
-        Type:            R_X86_64_32
-        Addend:          85
-  - Name:            .rela.debug_line
-    Type:            SHT_RELA
-    Flags:           [ SHF_INFO_LINK ]
-    Link:            .symtab
-    AddressAlign:    0x8
-    Info:            .debug_line
-    Relocations:
-      - Offset:          0x43
-        Symbol:          .text
-        Type:            R_X86_64_64
-  - Name:            .rela.eh_frame
-    Type:            SHT_RELA
-    Flags:           [ SHF_INFO_LINK ]
-    Link:            .symtab
-    AddressAlign:    0x8
-    Info:            .eh_frame
-    Relocations:
-      - Offset:          0x20
-        Symbol:          .text
-        Type:            R_X86_64_PC32
-      - Offset:          0x34
-        Symbol:          .text
-        Type:            R_X86_64_PC32
-        Addend:          16
-  - Name:            .llvm_addrsig
-    Type:            SHT_LLVM_ADDRSIG
-    Flags:           [ SHF_EXCLUDE ]
-    Link:            .symtab
-    AddressAlign:    0x1
-    Offset:          0x4C0
-    Symbols:         [  ]
-  - Type:            SectionHeaderTable
-    Sections:
-      - Name:            .strtab
-      - Name:            .text
-      - Name:            .debug_str
-      - Name:            .debug_abbrev
-      - Name:            .debug_info
-      - Name:            .rela.debug_info
-      - Name:            .comment
-      - Name:            .note.GNU-stack
-      - Name:            .debug_line
-      - Name:            .rela.debug_line
-      - Name:            .eh_frame
-      - Name:            .rela.eh_frame
-      - Name:            .llvm_addrsig
-      - Name:            .symtab
-Symbols:
-  - Name:            ELF_skip_debug_sections.c
-    Type:            STT_FILE
-    Index:           SHN_ABS
-  - Name:            .text
-    Type:            STT_SECTION
-    Section:         .text
-  - Name:            .debug_str
-    Type:            STT_SECTION
-    Section:         .debug_str
-  - Name:            .debug_abbrev
-    Type:            STT_SECTION
-    Section:         .debug_abbrev
-  - Name:            .debug_line
-    Type:            STT_SECTION
-    Section:         .debug_line
-  - Name:            foo
-    Type:            STT_FUNC
-    Section:         .text
-    Binding:         STB_GLOBAL
-    Size:            0x6
-  - Name:            main
-    Type:            STT_FUNC
-    Section:         .text
-    Binding:         STB_GLOBAL
-    Value:           0x10
-    Size:            0x6
-DWARF:
-  debug_str:
-    - 'clang version 10.0.0-4ubuntu1 '
-    - ELF_skip_debug_sections.c
-    - '/tmp'
-    - foo
-    - int
-    - main
-    - argc
-    - argv
-    - char
-...

diff  --git a/llvm/test/ExecutionEngine/JITLink/X86/ELF_skip_debug_sections.s b/llvm/test/ExecutionEngine/JITLink/X86/ELF_skip_debug_sections.s
new file mode 100644
index 000000000000..acd3ae7ad8b1
--- /dev/null
+++ b/llvm/test/ExecutionEngine/JITLink/X86/ELF_skip_debug_sections.s
@@ -0,0 +1,241 @@
+# REQUIRES: asserts
+# RUN: llvm-mc -triple=x86_64-pc-linux-gnu -filetype=obj -o %t %s
+# RUN: llvm-jitlink -debug-only=jitlink -noexec %t 2>&1 | FileCheck %s
+#
+# Check that debug sections are not emitted.
+#
+# CHECK: ".debug_info" is a debug section: No graph section will be created.
+
+	.text
+	.file	"ELF_skip_debug_sections.c"
+	.globl	foo
+	.p2align	4, 0x90
+	.type	foo, at function
+foo:
+.Lfunc_begin0:
+	.file	1 "/tmp" "ELF_skip_debug_sections.c"
+	.loc	1 1 0
+	.cfi_startproc
+
+	.loc	1 2 3 prologue_end
+	movl	$42, %eax
+	retq
+.Ltmp0:
+.Lfunc_end0:
+	.size	foo, .Lfunc_end0-foo
+	.cfi_endproc
+
+	.globl	main
+	.p2align	4, 0x90
+	.type	main, at function
+main:
+.Lfunc_begin1:
+	.loc	1 5 0
+	.cfi_startproc
+
+
+
+	.loc	1 6 3 prologue_end
+	movl	$42, %eax
+	retq
+.Ltmp1:
+.Lfunc_end1:
+	.size	main, .Lfunc_end1-main
+	.cfi_endproc
+
+	.section	.debug_str,"MS", at progbits,1
+.Linfo_string0:
+	.asciz	"clang version 10.0.0-4ubuntu1 "
+.Linfo_string1:
+	.asciz	"ELF_skip_debug_sections.c"
+.Linfo_string2:
+	.asciz	"/tmp"
+.Linfo_string3:
+	.asciz	"foo"
+.Linfo_string4:
+	.asciz	"int"
+.Linfo_string5:
+	.asciz	"main"
+.Linfo_string6:
+	.asciz	"argc"
+.Linfo_string7:
+	.asciz	"argv"
+.Linfo_string8:
+	.asciz	"char"
+	.section	.debug_abbrev,"", at progbits
+	.byte	1
+	.byte	17
+	.byte	1
+	.byte	37
+	.byte	14
+	.byte	19
+	.byte	5
+	.byte	3
+	.byte	14
+	.byte	16
+	.byte	23
+	.byte	27
+	.byte	14
+	.byte	17
+	.byte	1
+	.byte	18
+	.byte	6
+	.byte	0
+	.byte	0
+	.byte	2
+	.byte	46
+	.byte	0
+	.byte	17
+	.byte	1
+	.byte	18
+	.byte	6
+	.byte	64
+	.byte	24
+	.ascii	"\227B"
+	.byte	25
+	.byte	3
+	.byte	14
+	.byte	58
+	.byte	11
+	.byte	59
+	.byte	11
+	.byte	39
+	.byte	25
+	.byte	73
+	.byte	19
+	.byte	63
+	.byte	25
+	.byte	0
+	.byte	0
+	.byte	3
+	.byte	46
+	.byte	1
+	.byte	17
+	.byte	1
+	.byte	18
+	.byte	6
+	.byte	64
+	.byte	24
+	.ascii	"\227B"
+	.byte	25
+	.byte	3
+	.byte	14
+	.byte	58
+	.byte	11
+	.byte	59
+	.byte	11
+	.byte	39
+	.byte	25
+	.byte	73
+	.byte	19
+	.byte	63
+	.byte	25
+	.byte	0
+	.byte	0
+	.byte	4
+	.byte	5
+	.byte	0
+	.byte	2
+	.byte	24
+	.byte	3
+	.byte	14
+	.byte	58
+	.byte	11
+	.byte	59
+	.byte	11
+	.byte	73
+	.byte	19
+	.byte	0
+	.byte	0
+	.byte	5
+	.byte	36
+	.byte	0
+	.byte	3
+	.byte	14
+	.byte	62
+	.byte	11
+	.byte	11
+	.byte	11
+	.byte	0
+	.byte	0
+	.byte	6
+	.byte	15
+	.byte	0
+	.byte	73
+	.byte	19
+	.byte	0
+	.byte	0
+	.byte	0
+	.section	.debug_info,"", at progbits
+.Lcu_begin0:
+	.long	.Ldebug_info_end0-.Ldebug_info_start0
+.Ldebug_info_start0:
+	.short	4
+	.long	.debug_abbrev
+	.byte	8
+	.byte	1
+	.long	.Linfo_string0
+	.short	12
+	.long	.Linfo_string1
+	.long	.Lline_table_start0
+	.long	.Linfo_string2
+	.quad	.Lfunc_begin0
+	.long	.Lfunc_end1-.Lfunc_begin0
+	.byte	2
+	.quad	.Lfunc_begin0
+	.long	.Lfunc_end0-.Lfunc_begin0
+	.byte	1
+	.byte	87
+
+	.long	.Linfo_string3
+	.byte	1
+	.byte	1
+
+	.long	119
+
+	.byte	3
+	.quad	.Lfunc_begin1
+	.long	.Lfunc_end1-.Lfunc_begin1
+	.byte	1
+	.byte	87
+
+	.long	.Linfo_string5
+	.byte	1
+	.byte	5
+
+	.long	119
+
+	.byte	4
+	.byte	1
+	.byte	85
+	.long	.Linfo_string6
+	.byte	1
+	.byte	5
+	.long	119
+	.byte	4
+	.byte	1
+	.byte	84
+	.long	.Linfo_string7
+	.byte	1
+	.byte	5
+	.long	126
+	.byte	0
+	.byte	5
+	.long	.Linfo_string4
+	.byte	5
+	.byte	4
+	.byte	6
+	.long	131
+	.byte	6
+	.long	136
+	.byte	5
+	.long	.Linfo_string8
+	.byte	6
+	.byte	1
+	.byte	0
+.Ldebug_info_end0:
+	.ident	"clang version 10.0.0-4ubuntu1 "
+	.section	".note.GNU-stack","", at progbits
+	.addrsig
+	.section	.debug_line,"", at progbits
+.Lline_table_start0:


        


More information about the llvm-commits mailing list