diff --git a/backport-dwarf_loader-Support-DW_TAG_label-outside-DW_TAG_lex.patch b/backport-dwarf_loader-Support-DW_TAG_label-outside-DW_TAG_lex.patch new file mode 100644 index 0000000000000000000000000000000000000000..f5f8d491e09e884539915c53dbb2293702a2be59 --- /dev/null +++ b/backport-dwarf_loader-Support-DW_TAG_label-outside-DW_TAG_lex.patch @@ -0,0 +1,99 @@ +From f01e5f3a849558b8ed6b310686d10738f4c2f3bf Mon Sep 17 00:00:00 2001 +From: Arnaldo Carvalho de Melo +Date: Thu, 29 Sep 2022 09:43:16 -0300 +Subject: [PATCH 1/1] dwarf_loader: Support DW_TAG_label outside + DW_TAG_lexblock + +This happens with asm CUs, noticed when building the Linux kernel with +clang 15, where we have, for instance: + + Contents of the .debug_info section: + + Compilation Unit @ offset 0x0: + Length: 0x1df (32-bit) + Version: 5 + Unit Type: DW_UT_compile (1) + Abbrev Offset: 0x0 + Pointer Size: 8 + <0>: Abbrev Number: 1 (DW_TAG_compile_unit) + DW_AT_stmt_list : 0x0 + <11> DW_AT_ranges : 0xc + <15> DW_AT_name : arch/x86/kernel/verify_cpu.S + <32> DW_AT_comp_dir : /home/nathan/cbl/src/linux + <4d> DW_AT_producer : ClangBuiltLinux clang version 16.0.0 (https://github.com/llvm/llvm-project 7e22179d38c438fedb0d9bb0cff1585843bd7082) + DW_AT_language : 32769 (MIPS assembler) + <1>: Abbrev Number: 2 (DW_TAG_label) + DW_AT_name : startup_64 + DW_AT_decl_file : 0x0 + DW_AT_decl_line : 0x364 + DW_AT_low_pc : 0xffffffff81000000 + <1>: Abbrev Number: 2 (DW_TAG_label) + DW_AT_name : secondary_startup_64 + DW_AT_decl_file : 0x0 + DW_AT_decl_line : 0x399 + DW_AT_low_pc : 0xffffffff81000060 + <1><106>: Abbrev Number: 2 (DW_TAG_label) + <107> DW_AT_name : secondary_startup_64_no_verify + <126> DW_AT_decl_file : 0x0 + <12a> DW_AT_decl_line : 0x39f + <12e> DW_AT_low_pc : 0xffffffff81000065 + <1><136>: Abbrev Number: 2 (DW_TAG_label) + <137> DW_AT_name : verify_cpu + <142> DW_AT_decl_file : 0x0 + <146> DW_AT_decl_line : 0x430 + <14a> DW_AT_low_pc : 0xffffffff81000150 + + +Reported-by: Nathan Chancellor +Cc: Nick Desaulniers +Cc: Yonghong Song +Link: https://lore.kernel.org/dwarves/YzWSzXKcm6rSWOC5@kernel.org +Signed-off-by: Arnaldo Carvalho de Melo +--- + dwarf_loader.c | 16 ++++++++++++++-- + 1 file changed, 14 insertions(+), 2 deletions(-) + +diff --git a/dwarf_loader.c b/dwarf_loader.c +index 631bbd4..28a912e 100644 +--- a/dwarf_loader.c ++++ b/dwarf_loader.c +@@ -1485,7 +1485,12 @@ static struct tag *die__create_new_label(Dwarf_Die *die, + if (label == NULL) + return NULL; + +- lexblock__add_label(lexblock, label); ++ if (lexblock != NULL) { ++ // asm CUs have labels and they will be in the cu top level tag list ++ // See die__process_unit() ++ lexblock__add_label(lexblock, label); ++ } ++ + return &label->ip.tag; + } + +@@ -2037,6 +2042,12 @@ static struct tag *__die__process_tag(Dwarf_Die *die, struct cu *cu, + */ + tag = &unsupported_tag; + break; ++ case DW_TAG_label: ++ if (conf->ignore_labels) ++ tag = &unsupported_tag; // callers will assume conf->ignore_labels is true ++ else // We can have labels in asm CUs, no lexblock ++ tag = die__create_new_label(die, NULL, cu, conf); ++ break; + } + + if (tag != NULL) +@@ -2055,7 +2066,8 @@ static int die__process_unit(Dwarf_Die *die, struct cu *cu, struct conf_load *co + if (tag == &unsupported_tag) { + // XXX special case DW_TAG_dwarf_procedure, appears when looking at a recent ~/bin/perf + // Investigate later how to properly support this... +- if (dwarf_tag(die) != DW_TAG_dwarf_procedure) ++ if (dwarf_tag(die) != DW_TAG_dwarf_procedure && ++ dwarf_tag(die) != DW_TAG_label) // conf->ignore_labels == true, see die__process_tag() + tag__print_not_supported(dwarf_tag(die)); + continue; + } +-- +2.33.0 + diff --git a/dwarves.spec b/dwarves.spec index 1296b9ca6283a39c34cf98c9f2002c7330dd0a63..09d6635345275314e8c53c4e00c16c8bff67deaa 100644 --- a/dwarves.spec +++ b/dwarves.spec @@ -4,7 +4,7 @@ Name: dwarves Version: 1.22 -Release: 1 +Release: 2 License: GPLv2 Summary: Debugging Information Manipulation Tools URL: http://acmel.wordpress.com @@ -17,6 +17,7 @@ BuildRequires: zlib-devel BuildRequires: elfutils-devel >= 0.170 Patch0: replace-deprecated-libbpf-APIs-with-new-ones.patch +Patch1: backport-dwarf_loader-Support-DW_TAG_label-outside-DW_TAG_lex.patch %description dwarves is a set of tools that use the debugging information inserted in @@ -84,6 +85,14 @@ make install DESTDIR=%{buildroot} %{_libdir}/%{libname}_reorganize.so %changelog +* Mon Mar 21 2022 - Kai Liu - 1.22-2 +- Type:bugfix +- ID:NA +- SUG:NA +- DESC: Fix spew of warnings if build kernel with LLVM and + CONFIG_DEBUG_INFO_BTF after commit 32ef9e5054ec + ("Makefile.debug: re-enable debug info for .S files") + * Mon Mar 21 2022 - Kai Liu - 1.22-1 - Upgrade to v1.22. Also upgrade bundled libbpf to commit 393a058, the same as upstream submodule version.