From: Arnaldo Carvalho de Melo <acme@kernel.org>
To: Nathan Chancellor <nathan@kernel.org>, Yonghong Song <yhs@fb.com>
Cc: Nick Desaulniers <ndesaulniers@google.com>,
dwarves@vger.kernel.org, llvm@lists.linux.dev
Subject: BTF: A fix and more work to do :Re: die__process_unit: DW_TAG_label (0xa) @ <0x7b> not handled!
Date: Thu, 29 Sep 2022 09:42:53 -0300 [thread overview]
Message-ID: <YzWSzXKcm6rSWOC5@kernel.org> (raw)
In-Reply-To: <YzRnfz0sVpX8CzeL@dev-arch.thelio-3990X>
Em Wed, Sep 28, 2022 at 08:25:51AM -0700, Nathan Chancellor escreveu:
> On Wed, Sep 28, 2022 at 10:42:53AM -0300, Arnaldo Carvalho de Melo wrote:
> > Can you please provide the vmlinux file where this takes place?
>
> Sure thing, it is compressed to save some bandwidth while downloading:
>
> https://1drv.ms/u/s!AsQNYeB-IEbqnnzsULjM1pXmOlI5?e=qHKjuW
So, fixed the case reported, DW_TAG_label outside a DW_TAG_lexblock, on
asm DW_TAG_compile_unit DWARF containers, now I noticed that pahole
suports encoding BTF_KIND_TAG (18) but not _decoding_ those, so off I go
to work on it on btf_loader.c, looking at what btf_encoder.c does.
Good that you got me this vmlinux built by clang 15 :-)
Now we can BTF encode a vmlinux (-J) using all the CPUs in the system
(-j), and then we end up with a kernel with BTF_KIND_TAG that can't be
properly grokked by pahole when loading from BTF:
⬢[acme@toolbox pahole]$ pahole -j -J vmlinux-pahole-warnings
⬢[acme@toolbox pahole]$ pahole -F btf vmlinux-pahole-warnings > pahole-pretty-printed-from-btf
BTF: idx: 277, Unknown kind 18
BTF: idx: 281, Unknown kind 18
BTF: idx: 331, Unknown kind 18
BTF: idx: 689, Unknown kind 18
BTF: idx: 692, Unknown kind 18
For instance:
⬢[acme@toolbox pahole]$ pahole -C __sifields -F btf vmlinux-pahole-warnings
BTF: idx: 277, Unknown kind 18
BTF: idx: 281, Unknown kind 18
BTF: idx: 331, Unknown kind 18
BTF: idx: 689, Unknown kind 18
<BIG SNIP>
BTF: idx: 128403, Unknown kind 18
BTF: idx: 128409, Unknown kind 18
union __sifields {
struct {
__kernel_pid_t _pid; /* 0 4 */
__kernel_uid32_t _uid; /* 4 4 */
} _kill; /* 0 8 */
struct {
__kernel_timer_t _tid; /* 0 4 */
int _overrun; /* 4 4 */
sigval_t _sigval; /* 8 8 */
int _sys_private; /* 16 4 */
} _timer; /* 0 24 */
struct {
__kernel_pid_t _pid; /* 0 4 */
__kernel_uid32_t _uid; /* 4 4 */
sigval_t _sigval; /* 8 8 */
} _rt; /* 0 16 */
struct {
__kernel_pid_t _pid; /* 0 4 */
__kernel_uid32_t _uid; /* 4 4 */
int _status; /* 8 4 */
/* XXX 4 bytes hole, try to pack */
__kernel_clock_t _utime; /* 16 8 */
__kernel_clock_t _stime; /* 24 8 */
} _sigchld; /* 0 32 */
struct {
<ERROR > _addr; /* 0 8 */
union {
int _trapno; /* 8 4 */
short _addr_lsb; /* 8 2 */
struct {
char _dummy_bnd[8]; /* 8 8 */
<ERROR> _lower; /* 16 8 */
<ERROR> _upper; /* 24 8 */
} _addr_bnd; /* 8 24 */
struct {
char _dummy_pkey[8]; /* 8 8 */
__u32 _pkey; /* 16 4 */
} _addr_pkey; /* 8 12 */
struct {
unsigned long _data; /* 8 8 */
__u32 _type; /* 16 4 */
__u32 _flags; /* 20 4 */
} _perf; /* 8 16 */
}; /* 8 24 */
} _sigfault; /* 0 32 */
struct {
long _band; /* 0 8 */
int _fd; /* 8 4 */
} _sigpoll; /* 0 16 */
struct {
<ERROR > _call_addr; /* 0 8 */
int _syscall; /* 8 4 */
unsigned int _arch; /* 12 4 */
} _sigsys; /* 0 16 */
};
⬢[acme@toolbox pahole]$
And if we look from DWARF:
⬢[acme@toolbox pahole]$ pahole -C __sifields -F dwarf vmlinux-pahole-warnings | grep -w _addr -B2 -A2
} _sigchld; /* 0 32 */
struct {
user * _addr; /* 0 8 */
union {
int _trapno; /* 8 4 */
⬢[acme@toolbox pahole]$
And from the source code:
/* SIGILL, SIGFPE, SIGSEGV, SIGBUS, SIGTRAP, SIGEMT */
struct {
void __user *_addr; /* faulting insn/memory ref. */
#ifdef __ia64__
int _imm; /* immediate value for "break" */
unsigned int _flags; /* see ia64 si_flags */
unsigned long _isr; /* isr */
#endif
#define __ADDR_BND_PKEY_PAD (__alignof__(void *) < sizeof(short) ? \
sizeof(short) : __alignof__(void *))
union {
/* used on alpha and sparc */
int _trapno; /* TRAP # which caused the signal */
/*
* used when si_code=BUS_MCEERR_AR or
* used when si_code=BUS_MCEERR_AO
*/
short _addr_lsb; /* LSB of the reported address */
/* used when si_code=SEGV_BNDERR */
struct {
char _dummy_bnd[__ADDR_BND_PKEY_PAD];
void __user *_lower;
void __user *_upper;
} _addr_bnd;
Ok:
# define __user BTF_TYPE_TAG(user)
#if defined(CONFIG_DEBUG_INFO_BTF) && defined(CONFIG_PAHOLE_HAS_BTF_TAG) && \
__has_attribute(btf_type_tag)
# define BTF_TYPE_TAG(value) __attribute__((btf_type_tag(#value)))
#else
# define BTF_TYPE_TAG(value) /* nothing */
#endif
Ok, homework to do: we need to better support btf_type_tag in both
pahole pretty printer and in its BTF loader. :-)
One of the new features will be:
pahole --types_with_user_members
- Arnaldo
next prev parent reply other threads:[~2022-09-29 12:43 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-09-27 18:56 die__process_unit: DW_TAG_label (0xa) @ <0x7b> not handled! Nathan Chancellor
2022-09-27 19:08 ` Arnaldo Carvalho de Melo
2022-09-27 19:59 ` Nathan Chancellor
2022-09-28 13:42 ` Arnaldo Carvalho de Melo
2022-09-28 15:25 ` Nathan Chancellor
2022-09-29 1:03 ` Arnaldo Carvalho de Melo
2022-09-29 12:42 ` Arnaldo Carvalho de Melo [this message]
2022-09-29 12:50 ` BTF: A fix and more work to do :Re: " Arnaldo Carvalho de Melo
2022-09-29 19:33 ` Arnaldo Carvalho de Melo
2022-10-07 23:32 ` Yonghong Song
2022-09-28 21:35 ` Nick Desaulniers
2022-09-29 0:57 ` Arnaldo Carvalho de Melo
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=YzWSzXKcm6rSWOC5@kernel.org \
--to=acme@kernel.org \
--cc=dwarves@vger.kernel.org \
--cc=llvm@lists.linux.dev \
--cc=nathan@kernel.org \
--cc=ndesaulniers@google.com \
--cc=yhs@fb.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).