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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.