Go to file
Andrii Nakryiko 5d1c4029bd dwarves: Fix classification of byte/bit hole for aligned bitfield
This patch fixes a bug in class__find_holes() with determining byte hole
as a bit hole in case where previous member is not bitfield, but current
one is aligned bitfield. See example below, notice hole classification
hw_stopped field..

  $ cat test/bit_test.c
  struct s {
          long unused: 62;
          /* 2 bit hole */
          int hw_stopped;
          /* 4 byte hole */
          long unused2: 55;
          /* 9 bit padding */
  };

  int main() {
          static struct s s;
          return 0;
  }

  $ clang -g test/bit_test.c -o test/bit_test

  $ pahole -JV test/bit_test
  File test/bit_test:
  [1] STRUCT s kind_flag=1 size=24 vlen=3
          unused type_id=2 bitfield_size=62 bits_offset=0
          hw_stopped type_id=3 bitfield_size=0 bits_offset=64
          unused2 type_id=2 bitfield_size=55 bits_offset=128
  [2] INT long int size=8 bit_offset=0 nr_bits=64 encoding=SIGNED
  [3] INT int size=4 bit_offset=0 nr_bits=32 encoding=SIGNED

BEFORE:

  $ pahole -F btf test/bit_test
  struct s {
          long int                   unused:62;            /*     0: 0  8 */

          /* XXX 2 bits hole, try to pack */

          int                        hw_stopped;           /*     8     4 */

          /* XXX 32 bits hole, try to pack */

          long int                   unused2:55;           /*    16: 0  8 */

          /* size: 24, cachelines: 1, members: 3 */
          /* sum members: 4 */
          /* sum bitfield members: 117 bits, bit holes: 2, sum bit holes: 34 bits */
          /* bit_padding: 9 bits */
          /* last cacheline: 24 bytes */
  };

AFTER:

  $ pahole -F btf test/bit_test
  struct s {
          long int                   unused:62;            /*     0: 0  8 */

          /* XXX 2 bits hole, try to pack */

          int                        hw_stopped;           /*     8     4 */

          /* XXX 4 bytes hole, try to pack */

          long int                   unused2:55;           /*    16: 0  8 */

          /* size: 24, cachelines: 1, members: 3 */
          /* sum members: 4, holes: 1, sum holes: 4 */
          /* sum bitfield members: 117 bits, bit holes: 1, sum bit holes: 2 bits */
          /* bit_padding: 9 bits */
          /* last cacheline: 24 bytes */
  };

Signed-off-by: Andrii Nakryiko <andriin@fb.com>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Alexei Starovoitov <ast@fb.com>
Cc: Yonghong Song <yhs@fb.com>
Cc: dwarves@vger.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2019-04-03 10:37:03 -03:00
cmake/modules cmake: Add comments explaining build_id and fedora/rh detection 2009-06-27 13:32:20 -03:00
lib libbpf: Sync in latest libbpf sources 2019-03-29 15:53:13 -03:00
man-pages man-pages: Add entry for --hex 2017-09-05 10:13:06 -03:00
ostra [OSTRA]: Change ostra-cg license to GPLv2 2007-12-24 12:25:17 -02:00
rpm/SPECS v1.12 - New Release 2018-08-16 16:15:27 -03:00
.gitignore pahole: Add build dir, config.h to .gitignore 2019-02-11 12:55:46 -03:00
.gitmodules pahole: add libbpf as submodule under lib/bpf 2019-02-11 12:56:40 -03:00
CMakeLists.txt libbpf: Build as PIC and statically link into libdwarves 2019-02-19 10:21:29 -03:00
COPYING [LICENSE]: Add COPYING file and add missing license info on some files 2007-12-17 14:15:42 -02:00
MANIFEST MANIFEST: Add missing COPYING file 2018-09-11 11:22:41 -03:00
NEWS v1.12 - New Release 2018-08-16 16:15:27 -03:00
README [CMAKE]: Make the default install prefix be /usr/local 2007-04-19 18:01:47 -03:00
README.DEBUG README.DEBUG: Add an extra step to make the instructions cut'n'exec 2017-12-14 14:15:54 -03:00
README.btf README.btf: Add section on validating the .BTF section via the kernel 2018-08-16 12:05:29 -03:00
README.ctracer ctracer: update README.ctracer, f9 has the dwarves 2008-10-29 08:54:53 -02:00
btf_encoder.c dwarf_loader: Use DWARF recommended uniform bit offset scheme 2019-03-29 15:55:37 -03:00
btf_encoder.h Fixup copyright notices for BTF files authored by Facebook engineers 2019-01-18 20:34:05 -03:00
btf_loader.c dwarf_loader: Use DWARF recommended uniform bit offset scheme 2019-03-29 15:55:37 -03:00
btfdiff btfdiff: Support specifying custom pahole location 2019-02-22 18:06:27 -03:00
codiff.c Adopt SPDX-License-Identifier 2019-01-18 15:41:48 -03:00
config.h.cmake [DWARVES] Fixes a FIXME relating to a missing elf (libdw) symbol check. 2008-02-12 21:08:49 -02:00
ctf.h Adopt SPDX-License-Identifier 2019-01-18 15:41:48 -03:00
ctf_encoder.c libctf: The type_ids returned are uint32_t fixup where it was uint16_t 2019-03-11 11:44:53 -03:00
ctf_encoder.h Adopt SPDX-License-Identifier 2019-01-18 15:41:48 -03:00
ctf_loader.c loaders: Record CU's endianness in dwarf/btf/ctf loaders 2019-03-29 15:55:37 -03:00
ctfdwdiff ctfdwdiff: Don't ask for variables and inline expansions in pfunct 2009-03-31 19:21:46 -03:00
ctracer.c dwarves: Introduce type_id_t for use with the type IDs 2019-03-11 11:44:53 -03:00
dtagnames.c Adopt SPDX-License-Identifier 2019-01-18 15:41:48 -03:00
dutil.c Adopt SPDX-License-Identifier 2019-01-18 15:41:48 -03:00
dutil.h Adopt SPDX-License-Identifier 2019-01-18 15:41:48 -03:00
dwarf_loader.c dwarf_loader: Use DWARF recommended uniform bit offset scheme 2019-03-29 15:55:37 -03:00
dwarves.c dwarves: Fix classification of byte/bit hole for aligned bitfield 2019-04-03 10:37:03 -03:00
dwarves.h dwarves: Revert semantics of member bit/byte hole 2019-04-03 10:09:33 -03:00
dwarves_emit.c Adopt SPDX-License-Identifier 2019-01-18 15:41:48 -03:00
dwarves_emit.h Adopt SPDX-License-Identifier 2019-01-18 15:41:48 -03:00
dwarves_fprintf.c dwarves: Revert semantics of member bit/byte hole 2019-04-03 10:09:33 -03:00
dwarves_reorganize.c dwarves: Introduce type_id_t for use with the type IDs 2019-03-11 11:44:53 -03:00
dwarves_reorganize.h Adopt SPDX-License-Identifier 2019-01-18 15:41:48 -03:00
elf_symtab.c Adopt SPDX-License-Identifier 2019-01-18 15:41:48 -03:00
elf_symtab.h Adopt SPDX-License-Identifier 2019-01-18 15:41:48 -03:00
elfcreator.c Adopt SPDX-License-Identifier 2019-01-18 15:41:48 -03:00
elfcreator.h Adopt SPDX-License-Identifier 2019-01-18 15:41:48 -03:00
gobuffer.c Adopt SPDX-License-Identifier 2019-01-18 15:41:48 -03:00
gobuffer.h Adopt SPDX-License-Identifier 2019-01-18 15:41:48 -03:00
hash.h [DWARVES]: Use a hash table for the tags in a CU 2008-02-11 11:47:17 -02:00
libbtf.c btf_encoder: run BTF deduplication before writing out to ELF 2019-02-18 11:00:03 -03:00
libbtf.h btf_elf: Rename btf_elf__free() to btf_elf__delete() 2019-02-14 17:06:40 -03:00
libctf.c libctf: The type_ids returned are uint32_t fixup where it was uint16_t 2019-03-11 11:44:53 -03:00
libctf.h libctf: The type_ids returned are uint32_t fixup where it was uint16_t 2019-03-11 11:44:53 -03:00
list.h Adopt SPDX-License-Identifier 2019-01-18 15:41:48 -03:00
pahole.c pahole: Filter out unions when looking for packable structs 2019-03-28 16:53:26 -03:00
pdwtags.c Adopt SPDX-License-Identifier 2019-01-18 15:41:48 -03:00
pfunct.c dwarves: Introduce type_id_t for use with the type IDs 2019-03-11 11:44:53 -03:00
pglobal.c Adopt SPDX-License-Identifier 2019-01-18 15:41:48 -03:00
prefcnt.c Adopt SPDX-License-Identifier 2019-01-18 15:41:48 -03:00
rbtree.c Adopt SPDX-License-Identifier 2019-01-18 15:41:48 -03:00
rbtree.h Adopt SPDX-License-Identifier 2019-01-18 15:41:48 -03:00
regtest regtest: Accept --diff instad of plain 'diff' as long option 2012-05-14 19:36:58 -03:00
scncopy.c Adopt SPDX-License-Identifier 2019-01-18 15:41:48 -03:00
strings.c Adopt SPDX-License-Identifier 2019-01-18 15:41:48 -03:00
strings.h Adopt SPDX-License-Identifier 2019-01-18 15:41:48 -03:00
syscse.c dwarves: Introduce type_id_t for use with the type IDs 2019-03-11 11:44:53 -03:00

README

Build instructions:

1. install cmake
2. mkdir build
3. cd build
4. cmake -D__LIB=lib ..
5. make install

Default is to be installed on /usr/local, see rpm spec file for
installing on other places.

Known to work scenarios:

Mandriva Cooker:

cmake 2.4.5-1mdv2007.1
libelfutils1-devel 0.123-1mdv2007.1

Debian Unstable:

cmake 2.4.5-1
libdw-dev 0.123-2

Fedora Core 6:

cmake 2.4.5-2.fc6
elfutils-devel 0.126-1.fc6