[llvm] f05ac80 - Re-apply "[JITLink][ELF] Don't skip debug info sections by default."
Lang Hames via llvm-commits
llvm-commits at lists.llvm.org
Mon Mar 20 15:25:50 PDT 2023
Author: Lang Hames
Date: 2023-03-20T22:24:04Z
New Revision: f05ac803ffe76c7f4299a4e1288cc6bb8b098410
URL: https://github.com/llvm/llvm-project/commit/f05ac803ffe76c7f4299a4e1288cc6bb8b098410
DIFF: https://github.com/llvm/llvm-project/commit/f05ac803ffe76c7f4299a4e1288cc6bb8b098410.diff
LOG: Re-apply "[JITLink][ELF] Don't skip debug info sections by default."
This reapplies 57aeb305460406f7b822cfe6ab9fb4d730fc3b38, which was reverted in
f721fcb6ed0a186b8f146282467dd8420a5a36d0 due to buildbot failures.
The cause of the failure was missing support for R_AARCH64_ABS32, which was
added in fb1b9945be7657a3a25b727eaf0eeb3f74525210.
Added:
llvm/test/ExecutionEngine/JITLink/X86/ELF_debug_section_lifetime_is_NoAlloc.yaml
Modified:
llvm/lib/ExecutionEngine/JITLink/ELFLinkGraphBuilder.h
Removed:
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 cd046057217f1..26feb8ea3277b 100644
--- a/llvm/lib/ExecutionEngine/JITLink/ELFLinkGraphBuilder.h
+++ b/llvm/lib/ExecutionEngine/JITLink/ELFLinkGraphBuilder.h
@@ -62,6 +62,14 @@ 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();
@@ -115,8 +123,7 @@ class ELFLinkGraphBuilder : public ELFLinkGraphBuilderBase {
///
template <typename RelocHandlerMethod>
Error forEachRelaRelocation(const typename ELFT::Shdr &RelSect,
- RelocHandlerMethod &&Func,
- bool ProcessDebugSections = false);
+ RelocHandlerMethod &&Func);
/// Traverse all matching ELFT::Rel relocation records in the given section.
/// The handler function Func should be callable with this signature:
@@ -125,22 +132,19 @@ class ELFLinkGraphBuilder : public ELFLinkGraphBuilderBase {
///
template <typename RelocHandlerMethod>
Error forEachRelRelocation(const typename ELFT::Shdr &RelSect,
- RelocHandlerMethod &&Func,
- bool ProcessDebugSections = false);
+ RelocHandlerMethod &&Func);
/// 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,
- bool ProcessDebugSections = false) {
+ ClassT *Instance, RelocHandlerMethod &&Method) {
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.
@@ -148,14 +152,12 @@ class ELFLinkGraphBuilder : public ELFLinkGraphBuilderBase {
///
template <typename ClassT, typename RelocHandlerMethod>
Error forEachRelRelocation(const typename ELFT::Shdr &RelSect,
- ClassT *Instance, RelocHandlerMethod &&Method,
- bool ProcessDebugSections = false) {
+ ClassT *Instance, RelocHandlerMethod &&Method) {
return forEachRelRelocation(
RelSect,
[Instance, Method](const auto &Rel, const auto &Target, auto &GS) {
return (Instance->*Method)(Rel, Target, GS);
- },
- ProcessDebugSections);
+ });
}
const ELFFile &Obj;
@@ -163,6 +165,7 @@ 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.
@@ -318,7 +321,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 (isDwarfSection(*Name)) {
+ if (!ProcessDebugSections && isDwarfSection(*Name)) {
LLVM_DEBUG({
dbgs() << " " << SecIndex << ": \"" << *Name
<< "\" is a debug section: "
@@ -522,8 +525,7 @@ template <typename ELFT> Error ELFLinkGraphBuilder<ELFT>::graphifySymbols() {
template <typename ELFT>
template <typename RelocHandlerFunction>
Error ELFLinkGraphBuilder<ELFT>::forEachRelaRelocation(
- const typename ELFT::Shdr &RelSect, RelocHandlerFunction &&Func,
- bool ProcessDebugSections) {
+ const typename ELFT::Shdr &RelSect, RelocHandlerFunction &&Func) {
// Only look into sections that store relocation entries.
if (RelSect.sh_type != ELF::SHT_RELA)
return Error::success();
@@ -569,8 +571,7 @@ Error ELFLinkGraphBuilder<ELFT>::forEachRelaRelocation(
template <typename ELFT>
template <typename RelocHandlerFunction>
Error ELFLinkGraphBuilder<ELFT>::forEachRelRelocation(
- const typename ELFT::Shdr &RelSect, RelocHandlerFunction &&Func,
- bool ProcessDebugSections) {
+ const typename ELFT::Shdr &RelSect, RelocHandlerFunction &&Func) {
// 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
new file mode 100644
index 0000000000000..0afcda467c326
--- /dev/null
+++ b/llvm/test/ExecutionEngine/JITLink/X86/ELF_debug_section_lifetime_is_NoAlloc.yaml
@@ -0,0 +1,195 @@
+# 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
deleted file mode 100644
index acd3ae7ad8b1f..0000000000000
--- a/llvm/test/ExecutionEngine/JITLink/X86/ELF_skip_debug_sections.s
+++ /dev/null
@@ -1,241 +0,0 @@
-# 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