ANNOUNCE: pahole v1.20 (gcc11 DWARF5's default, lots of ELF sections, BTF)

From: Arnaldo Carvalho de Melo
Date: Thu Feb 04 2021 - 17:08:32 EST


Hi,

The v1.20 release of pahole and its friends is out, mostly
addressing problems related to gcc 11 defaulting to DWARF5 for -g,
available at the usual places:

Main git repo:

git://git.kernel.org/pub/scm/devel/pahole/pahole.git

Mirror git repo:

https://github.com/acmel/dwarves.git

tarball + gpg signature:

https://fedorapeople.org/~acme/dwarves/dwarves-1.20.tar.xz
https://fedorapeople.org/~acme/dwarves/dwarves-1.20.tar.bz2
https://fedorapeople.org/~acme/dwarves/dwarves-1.20.tar.sign

Best Regards,

- Arnaldo

v1.20:

BTF encoder:

- Improve ELF error reporting using elf_errmsg(elf_errno()).

- Improve objcopy error handling.

- Fix handling of 'restrict' qualifier, that was being treated as a 'const'.

- Support SHN_XINDEX in st_shndx symbol indexes, to handle ELF objects with
more than 65534 sections, for instance, which happens with kernels built
with 'KCFLAGS="-ffunction-sections -fdata-sections", Other cases may
include when using FG-ASLR, LTO.

- Cope with functions without a name, as seen sometimes when building kernel
images with some versions of clang, when a SEGFAULT was taking place.

- Fix BTF variable generation for kernel modules, not skipping variables at
offset zero.

- Fix address size to match what is in the ELF file being processed, to fix using
a 64-bit pahole binary to generate BTF for a 32-bit vmlinux image.

- Use kernel module ftrace addresses when finding which functions to encode,
which increases the number of functions encoded.

libbpf:

- Allow use of packaged version, for distros wanting to dynamically link with
the system's libbpf package instead of using the libbpf git submodule shipped
in pahole's source code.

DWARF loader:

- Support DW_AT_data_bit_offset

This appeared in DWARF4 but is supported only in gcc's -gdwarf-5,
support it in a way that makes the output be the same for both cases.

$ gcc -gdwarf-5 -c examples/dwarf5/bf.c
$ pahole bf.o
struct pea {
long int a:1; /* 0: 0 8 */
long int b:1; /* 0: 1 8 */
long int c:1; /* 0: 2 8 */

/* XXX 29 bits hole, try to pack */
/* Bitfield combined with next fields */

int after_bitfield; /* 4 4 */

/* size: 8, cachelines: 1, members: 4 */
/* sum members: 4 */
/* sum bitfield members: 3 bits, bit holes: 1, sum bit holes: 29 bits */
/* last cacheline: 8 bytes */
};

- DW_FORM_implicit_const in attr_numeric() and attr_offset()

- Support DW_TAG_GNU_call_site, its the standardized rename of the previously supported
DW_TAG_GNU_call_site.

build:

- Fix compilation on 32-bit architectures.

Signed-off-by: Arnaldo Carvalho de Melo <acme@xxxxxxxxxx>