From f721fcb6ed0a186b8f146282467dd8420a5a36d0 Mon Sep 17 00:00:00 2001 From: Muhammad Omair Javaid Date: Mon, 20 Mar 2023 15:32:21 +0500 Subject: [PATCH] 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 --- .../ExecutionEngine/JITLink/ELFLinkGraphBuilder.h | 35 ++- .../X86/ELF_debug_section_lifetime_is_NoAlloc.yaml | 195 ----------------- .../JITLink/X86/ELF_skip_debug_sections.s | 241 +++++++++++++++++++++ 3 files changed, 258 insertions(+), 213 deletions(-) delete mode 100644 llvm/test/ExecutionEngine/JITLink/X86/ELF_debug_section_lifetime_is_NoAlloc.yaml create mode 100644 llvm/test/ExecutionEngine/JITLink/X86/ELF_skip_debug_sections.s diff --git a/llvm/lib/ExecutionEngine/JITLink/ELFLinkGraphBuilder.h b/llvm/lib/ExecutionEngine/JITLink/ELFLinkGraphBuilder.h index 26feb8e..cd04605 100644 --- a/llvm/lib/ExecutionEngine/JITLink/ELFLinkGraphBuilder.h +++ b/llvm/lib/ExecutionEngine/JITLink/ELFLinkGraphBuilder.h @@ -62,14 +62,6 @@ public: 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> buildGraph(); @@ -123,7 +115,8 @@ protected: /// template 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 @@ protected: /// template 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 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 @@ protected: /// template 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 @@ protected: 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 Error ELFLinkGraphBuilder::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 Error ELFLinkGraphBuilder::graphifySymbols() { template template Error ELFLinkGraphBuilder::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::forEachRelaRelocation( template template Error ELFLinkGraphBuilder::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 0afcda4..0000000 --- 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 0000000..acd3ae7 --- /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,@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,@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",@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,"",@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,"",@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","",@progbits + .addrsig + .section .debug_line,"",@progbits +.Lline_table_start0: -- 2.7.4