Re: [PATCH v4 dwarves 0/5] pahole, btf_encoder: support --btf_features

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Em Mon, Oct 23, 2023 at 10:57:21AM +0100, Alan Maguire escreveu:
> Currently, the kernel uses pahole version checking as the way to
> determine which BTF encoding features to request from pahole.  This
> means that such features have to be tied to a specific version and
> as new features are added, additional clauses in scripts/pahole-flags.sh
> have to be added; for example

Finally trying to test this:

I started with a random vmlinux file, already with BTF:

$ bpftool btf dump file vmlinux.v5.19.0-rc5+ format raw > vmlinux.v5.19.0-rc5+.dump.original
$ wc -l vmlinux.v5.19.0-rc5+.dump.original
291961 vmlinux.v5.19.0-rc5+.dump.original
$ grep -i enum64 vmlinux.v5.19.0-rc5+.dump.original | wc -l
0
$

$ grep -i enum vmlinux.v5.19.0-rc5+.dump.original | wc -l
2175
$

Ok, now I want to encode just with enum64, i.e. all the other features
will not be enabled via this new option and only the enum64 will, if
present in the DWARF info:

$ cp vmlinux.v5.19.0-rc5+ vmlinux.v5.19.0-rc5+.enum64 ; pahole --btf_encode --btf_features=enum64 vmlinux.v5.19.0-rc5+.enum64 
$

I tried using --btf_encode_detached=file but then couldn't find a way to
make 'bpftool btf' to consume detached BTF, it seems that "file" means
"ELF file containing BTF" so I copied the original file to then reencode
BTF selecting just the enum64 feature, the resulting file continues to
have the original DWARF and the BTF using that --btf_features set:

[acme@quaco pahole]$ pahole -F btf vmlinux.v5.19.0-rc5+.enum64 | wc -l
143161
[acme@quaco pahole]$ pahole -F dwarf vmlinux.v5.19.0-rc5+.enum64 | wc -l
143589
[acme@quaco pahole]$

[acme@quaco pahole]$ pahole --expand_types -F btf vmlinux.v5.19.0-rc5+.enum64 -C spinlock
struct spinlock {
	union {
		struct raw_spinlock {
			/* typedef arch_spinlock_t */ struct qspinlock {
				union {
					/* typedef atomic_t */ struct {
						int            counter;                                       /*     0     4 */
					} val;                                                                /*     0     4 */
					struct {
						/* typedef u8 -> __u8 */ unsigned char  locked;               /*     0     1 */
						/* typedef u8 -> __u8 */ unsigned char  pending;              /*     1     1 */
					};                                                                    /*     0     2 */
					struct {
						/* typedef u16 -> __u16 */ short unsigned int locked_pending; /*     0     2 */
						/* typedef u16 -> __u16 */ short unsigned int tail;           /*     2     2 */
					};                                                                    /*     0     4 */
				};                                                                            /*     0     4 */
			} raw_lock;                                                                           /*     0     4 */
		}rlock;                                                                                       /*     0     4 */
	};                                                                                                    /*     0     4 */

	/* size: 4, cachelines: 1, members: 1 */
	/* last cacheline: 4 bytes */
};

[acme@quaco pahole]$

But 'bpftool bpf' doesn't like it:

  $ bpftool btf dump file vmlinux.v5.19.0-rc5+.enum64 raw
  Error: failed to load BTF from vmlinux.v5.19.0-rc5+.enum64: Invalid argument
  $

But it doesn't like it even when not using --btf_features :-\

  $ cp vmlinux.v5.19.0-rc5+ vmlinux.v5.19.0-rc5+.default_btf_encode ; pahole --btf_encode vmlinux.v5.19.0-rc5+.default_btf_encode
  $ bpftool btf dump file vmlinux.v5.19.0-rc5+.default_btf_encode raw | wc -l
  Error: failed to load BTF from vmlinux.v5.19.0-rc5+.default_btf_encode: Invalid argument
  0
  $ 

I'll try to root cause this problem...

- Arnaldo




[Index of Archives]     [Linux Samsung SoC]     [Linux Rockchip SoC]     [Linux Actions SoC]     [Linux for Synopsys ARC Processors]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]


  Powered by Linux