!8 [sync] PR-7: 修复使用LLVM + CONFIG_DEBUG_INFO_BTF出现的大量警告信息
From: @openeuler-sync-bot Reviewed-by: @LemmyHuang Signed-off-by: @LemmyHuang
This commit is contained in:
commit
d3957f2dca
@ -0,0 +1,99 @@
|
||||
From f01e5f3a849558b8ed6b310686d10738f4c2f3bf Mon Sep 17 00:00:00 2001
|
||||
From: Arnaldo Carvalho de Melo <acme@redhat.com>
|
||||
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><c>: Abbrev Number: 1 (DW_TAG_compile_unit)
|
||||
<d> 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)
|
||||
<c2> DW_AT_language : 32769 (MIPS assembler)
|
||||
<1><c4>: Abbrev Number: 2 (DW_TAG_label)
|
||||
<c5> DW_AT_name : startup_64
|
||||
<d0> DW_AT_decl_file : 0x0
|
||||
<d4> DW_AT_decl_line : 0x364
|
||||
<d8> DW_AT_low_pc : 0xffffffff81000000
|
||||
<1><e0>: Abbrev Number: 2 (DW_TAG_label)
|
||||
<e1> DW_AT_name : secondary_startup_64
|
||||
<f6> DW_AT_decl_file : 0x0
|
||||
<fa> DW_AT_decl_line : 0x399
|
||||
<fe> 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
|
||||
<SNIP>
|
||||
|
||||
Reported-by: Nathan Chancellor <nathan@kernel.org>
|
||||
Cc: Nick Desaulniers <ndesaulniers@google.com>
|
||||
Cc: Yonghong Song <yhs@fb.com>
|
||||
Link: https://lore.kernel.org/dwarves/YzWSzXKcm6rSWOC5@kernel.org
|
||||
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
|
||||
---
|
||||
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
|
||||
|
||||
11
dwarves.spec
11
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 <kai.liu@suse.com> - 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 <kai.liu@suse.com> - 1.22-1
|
||||
- Upgrade to v1.22. Also upgrade bundled libbpf to commit 393a058,
|
||||
the same as upstream submodule version.
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user