dd15aa4b0a
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
135 lines
4.3 KiB
Plaintext
135 lines
4.3 KiB
Plaintext
v1.19:
|
|
|
|
- Support split BTF, where a main BTF file, vmlinux, can be used to find types
|
|
and then a kernel module, for instance, can have just what is unique to it.
|
|
|
|
For instance, looking for a type in the main vmlinux BTF info:
|
|
|
|
$ pahole wmi_notify_handler
|
|
pahole: type 'wmi_notify_handler' not found
|
|
$
|
|
|
|
If we look at the 'wmi' module BTF info that is in:
|
|
|
|
$ ls -la /sys/kernel/btf/wmi
|
|
-r--r--r--. 1 root root 2866 Nov 18 13:35 /sys/kernel/btf/wmi
|
|
$
|
|
|
|
$ pahole /sys/kernel/btf/wmi -C wmi_notify_handler
|
|
typedef void (*wmi_notify_handler)(u32, void *);
|
|
$
|
|
|
|
'--btf_base=/sys/kernel/btf/vmlinux' was automatically added in this last
|
|
example, an option that was also introduced in this version where types used in
|
|
the wmi.ko module but present in vmlinux can be found so that there is no
|
|
duplicity of types.
|
|
|
|
- Update libbpf to get the split BTF support and use some of its functions to
|
|
load BTF and speed up DWARF loading and BTF encoding.
|
|
|
|
- Support cross-compiled ELF binaries with different endianness
|
|
|
|
- Support showing typedefs for anonymous types, like structs, unions and enums,
|
|
see the "Align enumerators" entry below for an example, another:
|
|
|
|
$ pahole rwlock_t
|
|
typedef struct {
|
|
arch_rwlock_t raw_lock; /* 0 8 */
|
|
|
|
/* size: 8, cachelines: 1, members: 1 */
|
|
/* last cacheline: 8 bytes */
|
|
} rwlock_t;
|
|
$
|
|
|
|
- Align enumerators:
|
|
|
|
$ pahole ZSTD_strategy
|
|
typedef enum {
|
|
ZSTD_fast = 0,
|
|
ZSTD_dfast = 1,
|
|
ZSTD_greedy = 2,
|
|
ZSTD_lazy = 3,
|
|
ZSTD_lazy2 = 4,
|
|
ZSTD_btlazy2 = 5,
|
|
ZSTD_btopt = 6,
|
|
ZSTD_btopt2 = 7,
|
|
} ZSTD_strategy;
|
|
$
|
|
|
|
- Workaround bugs in the generation of DWARF records for functions in some gcc
|
|
versions that were causing breakage in the encoding of BTF:
|
|
|
|
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97060 "Missing DW_AT_declaration=1 in dwarf data"
|
|
|
|
- Ignore zero-sized ELF symbols instead of erroring out.
|
|
|
|
- Handle union forward declaration properly in the BTF loader.
|
|
|
|
- Introduce --numeric_version for use in scripts and Makefiles:
|
|
|
|
$ pahole --version
|
|
v1.19
|
|
$ pahole --numeric_version
|
|
119
|
|
$
|
|
|
|
To avoid things like this in the kernel's scripts/link-vmlinux.sh:
|
|
|
|
pahole_ver=$(${PAHOLE} --version | sed -E 's/v([0-9]+)\.([0-9]+)/\1\2/')
|
|
|
|
- Try sole pfunct argument as a function name, just like pahole with type names:
|
|
|
|
$ pfunct tcp_v4_rcv
|
|
int tcp_v4_rcv(struct sk_buff * skb);
|
|
$
|
|
|
|
- Speed up pfunct using some of the load techniques used in pahole.
|
|
|
|
- Discard CUs after BTF encoding as they're not used anymore, greatly reducing
|
|
memory usage and speeding up vmlinux BTF encoding.
|
|
|
|
- Revamp how per-CPU variables are encoded in BTF.
|
|
|
|
- Include BTF info for static functions.
|
|
|
|
- Use BTF's string APIs for strings management, greatly improving performance
|
|
over the tsearch().
|
|
|
|
- Increase size of DWARF lookup hash table, shaving off about 1 second out of
|
|
about 20 seconds total for Linux BTF dedup.
|
|
|
|
- Stop BTF encoding when errors are found in some DWARF CU.
|
|
|
|
- Implement --packed, to show just packed structures, for instance, here are
|
|
the top 5 packed data structures in the Linux kernel:
|
|
|
|
$ pahole --sizes --packed | sort -k2 -nr | head -5
|
|
e820_table 64004 0
|
|
boot_params 4096 0
|
|
efi_variable 2084 0
|
|
snd_soc_tplg_pcm 912 0
|
|
ntb_info_regs 800 0
|
|
$
|
|
|
|
And here is one of them:
|
|
|
|
$ pahole efi_variable
|
|
struct efi_variable {
|
|
efi_char16_t VariableName[512]; /* 0 1024 */
|
|
/* --- cacheline 16 boundary (1024 bytes) --- */
|
|
efi_guid_t VendorGuid; /* 1024 16 */
|
|
long unsigned int DataSize; /* 1040 8 */
|
|
__u8 Data[1024]; /* 1048 1024 */
|
|
/* --- cacheline 32 boundary (2048 bytes) was 24 bytes ago --- */
|
|
efi_status_t Status; /* 2072 8 */
|
|
__u32 Attributes; /* 2080 4 */
|
|
|
|
/* size: 2084, cachelines: 33, members: 6 */
|
|
/* last cacheline: 36 bytes */
|
|
} __attribute__((__packed__));
|
|
$
|
|
|
|
- Fix bug in distros such as OpenSUSE:15.2 where DW_AT_alignment isn't defined.
|
|
|
|
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
|