blob: 7757fba963dba0ca7fd29a2882237f7bed0e9406 [file] [log] [blame]
Thu Aug 16 2018
1ca2e351dfa1 README.btf: Add section on validating the .BTF section via the kernel
9eda5e8163ce README.btf: No need to use 'llvm.opts = -mattr=dwarfris' with elfutils >= 0.173
7818af53f64a dwarves: Add a README.btf file with steps to test the BTF encoder
f727c22191d0 dwarf_loader: Initial support for DW_TAG_partial_unit
e975ff247aa8 dwarves_fprintf: Print cacheline boundaries in multiple union members
68645f7facc2 btf: Add BTF support
81466af0d4f8 pahole: Show the file where a struct was used
2dd87be78bb2 dwarves_fprintf: Show offsets at union members
66cf3983e1ac README.DEBUG: Add an extra step to make the instructions cut'n'exec
2a092d61453c dwarves: Fix cus__load_files() success return value
02a456f5f54c pahole: Search and use running kernel vmlinux when no file is passed
5f057919a0c0 man-pages: Add entry for --hex
[acme@jouet pahole]$
Wed Jun 2017
5a57eb074170 man-pages: Update URL to the dwarves paper
b52386d041fa dwarves_fprintf: Find holes when expanding types
103e89bb257d dwarves_fprintf: Find holes on structs embedded in other structs
ab97c07a7ebe dwarves_fprintf: Fixup cacheline boundary printing on expanded structs
046ad67af383 dwarves_fprintf: Shorten class__fprintf() sig
44130bf70e1c dwarves: Update e-mail address
327757975b94 dwarf_loader: Add URL for template tags description
f4d5e21fd1b2 dwarf_loader: Tidy up template tags usage
e12bf9999944 dwarf_loader: Do not hash unsupported tags
3afcfbec9e08 dwarf_loader: Add DW_TAG_GNU_formal_parameter_pack stub in process_function
55d9b20dbaf6 dwarf_loader: Ignore DW_TAG_dwarf_procedure when processing functions
45618c7ec122 dwarf_loader: Initial support for DW_TAG_unspecified_type
658a238b9890 dwarf_loader: Stop emitting warnings about DW_TAG_call_site
0fbb39291d59 dwarf_loader: Add support for DW_TAG_restrict_type
9df42c68265d dwarves: Initial support for rvalue_reference_type
8af5ccd86d21 dwarves: Use cus__fprintf_load_files_err() in the remaining tools
10515a7c4db7 dwarves: Introduce cus__fprintf_load_files_err()
0e6463635082 pahole: Show more informative message when errno is properly set on error
2566cc2c8715 pdwtags: Show proper error messages for files it can't handle
9f3f67e78679 dwarves: Fix cus__load_files() error return
ae3a2720c3d3 dutil: Add ____ilog2_NaN declaration to silence compiler warning
0b81b5ad4743 Update version in CMakeLists.txt
79536f4f9587 cmake: Use INTERFACE_LINK_LIBRARIES
1decb1bc4a41 dwarf_loader: Check cu__find_type_by_ref result
956343d05a41 Add instructions on how to build with debug info
e71353c3fa0a dwarf_loader: Ignore DW_TAG_dwarf_procedure
189695907242 dwarves_fprintf: Add the missing GNU_ suffix to DWARF_TAG_ created by the GNU project
d973b1d5daf0 dwarf_fprintf: Handle DW_TAG_GNU_call_site{_parameter}
c23eab4b1253 dwarf_loader: Print unknown tags as an hex number
943a0de0679a dwarves_fprintf: DW_TAG_mutable_type doesn't exist.
a8e562a15767 dwarf_loader: Use obstack_zalloc when allocating tag
fd3838ae9aa3 dwarves: Stop using 'self'
5ecf1aab9e10 dwarf_loader: Support DW_FORM_data{4,8} for reading class member offsets
c4ccdd5ae63b dwarves_reorganize: Fix member type fixup
e31fda3063e3 dwarves_reorganize: Fixup calculation of bytes needed for bitfield
1e461ec7e0e8 dwarves_fprintf: Fix printf types on 64bit linux
222f0067a9c3 dwarves_fprintf: Don't ignore virtual data members
e512e3f9b36b dwarves: Update git url
8c6378fd8834 dwarves: Support static class data members
a54515fa6ee4 dwarves: Stop using 'self'
6035b0d91f19 rpm: Add missing BuildRequires: zlib-devel
be7b691756ff dwarf_loader: Don't stop processing after finding unsupported tag
Wed May 30 2012
. Initial DWARF4 support, by Tom Tromey
. Add stubs for some new GNU Tags
. Fix build on older systems
. Fix a crash when pahole is called with -R -S, from Tal Kelrich
Ignore DW_TAG_template_{type,value}_parameter, fixing a bug reported at:
More work is needed to properly support these tags.
After a long time without a new release because I was trying to get the CTF
support completed, and due to the very strong gravity force in the Linux kernel
perf tools, here it is 1.8, with lots of performance improvements, bug fixes
and changes to better use these tools in scripts.
For full details please take a look at the git changesets, repo available at:
- Arnaldo
. Allow list of structs to be passed to pahole.
E.g.: 'pahole -C str_node,strings'
Suggested by Zack Weinberg <>, for scripting.
. Introduce --hex to print offsets and sizes in hexadecimal
. Improve detection of removal and addition of members in structs
. Detect changes in padding and the number of holes/bit_holes
. --no_parm_names
Because CTF doesn't encodes the names of the parameters and I want to
test the upcoming CTF function section code in ctftwdiff.
. pfunct --addr
Using an rbtree to find in which function the given addr is.
. Greatly reduce the data structures footprint and lookup by recoding
the IDs as short integers, that was done to facilitate support for CTF
but benefited the core libraries greatly.
. Handle GCC support for vector instructions
So now it recognizes, as printed by pdwtags:
908 typedef int __m64 __attribute__ ((__vector_size__ (8))); size: 8
909 int array __attribute__ ((__vector_size__ (8))); size: 8
910 int array __attribute__ ((__vector_size__ (4))); size: 4
911 short int array __attribute__ ((__vector_size__ (2))); size: 2
912 char array __attribute__ ((__vector_size__ (1))); size: 1
. Destructors were added so that no leaks are left if this library is to
be used in other tools that don't end the program when done using this lib.
. Allow the tools to pass a callback that is used after loading each object
file (CU/Compile Unit), so that we can more quickly find tags and stop
the processing sooner, or at least delete the CU if it doesn't have anything
needed by the tool. This _greatly_ speeded up most of the tools.
. Tools now can pass a debug format "path", specifying the order it wants to
try, so that if a file have both DWARF and CTF, specifying 'ctf,dwarf' will
use the CTF info.
. Now the formatting routines are in a separate file, dwarves_fprintf.c. This
was done for organizational purposes but also to pave the way for multiple
formatting backends, so that we can print, for instance, in CSV the structs,
for easier scripting like done by several folks out there.
. Handle volatile typedef bitfields, like:
struct _GClosure {
volatile guint ref_count:15; /* 0:17 4 */
volatile guint meta_marshal:1; /* 0:16 4 */
volatile guint n_guards:1; /* 0:15 4 */
. Load java 'interfaces' as a struct/class.
. Fix buffer expansion bug, detected thanks to boost that provided things like:
virtual int undefine(class
boost::spirit::parser_context<boost::spirit::nil, class
boost::spirit::parser_context<boost::spirit::nil_t> > *); /*
. Allow optional addr information loading, speeding up some apps that don't
use such addresses (or in modes where addrs aren't used) such as pahole.
. Use a obstacks, speeding up apps as measured with the perf tools.
. Support zero sized arrays in the middle of a struct.
. Fix padding calculation in the reorganize routines.
. Fix bitfield demotion in the reorganize routines.
. Support "using" pointing to data members (C++).
. Properly support pointers to const, reported by Jan Engelhardt <>:
. Support more compact DW_AT_data_member_location form, pointed out by Mark
Wielaard <> and reported by Mike Snitzer <>
Experimental CTF support:
libdwarves was reorganized so that it can support multiple debugging formats,
with the first one being supported being the Compact C Type Format that comes
from the OpenSolaris world.
David S. Miller contributed an initial CTF decoder and from there I wrote an
To test this a regression testing harness (regtest in the sources) that will
take files with DWARF info and from there encode its contents in CTF in another
ELF section in the same file (.SUN_ctf). Then it will decode both the DWARF
and CTF sections and compare the results for pahole running with some new
flags that cope with some subtleties in the way CTF encodes things.
We have just one dimension in CTF, with the total number of entries,
in DWARF we can express this, but not in CTF:
__u8 addr[0][6]; /* 4 0 */
So --flat_arrays will show it as:
__u8 addr[0]; /* 4 0 */
To cope with things like 'char foo:8' that since CTF has only the
number of bits, can't be expressed as we don't know if it is a
bitfield or just a char without the ':8' suffix.
Look only at the first object file in a file with multiple object
files, like vmlinux. This is because the CTF support is not complete yet,
needing the merging of types in multiple object files to be done.
CTF has only a type for structs, not for classes like DWARF (DW_TAG_class_type
is not present in CTF), so print them all as 'struct'.
Running with the above limitations produce just a few mismatches, related to
packed structs and enumerations and bitfields.