diff --git a/.dwarves.metadata b/.dwarves.metadata
new file mode 100644
index 0000000..9538a36
--- /dev/null
+++ b/.dwarves.metadata
@@ -0,0 +1 @@
+4bd8a111efefbf4058942e76d1193810e4ee5515 SOURCES/dwarves-1.21.tar.xz
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..a738b0b
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+SOURCES/dwarves-1.21.tar.xz
diff --git a/SOURCES/0001-btf-Remove-ftrace-filter.patch b/SOURCES/0001-btf-Remove-ftrace-filter.patch
new file mode 100644
index 0000000..2cb3a1c
--- /dev/null
+++ b/SOURCES/0001-btf-Remove-ftrace-filter.patch
@@ -0,0 +1,392 @@
+From 58a98f76ac95b1bb11920ff2b58206b2364e6b3b Mon Sep 17 00:00:00 2001
+From: Martin KaFai Lau <kafai@fb.com>
+Date: Thu, 6 May 2021 13:56:22 -0700
+Subject: [PATCH] btf: Remove ftrace filter
+
+BTF is currently generated for functions that are in ftrace list
+or extern.
+
+A recent use case also needs BTF generated for functions included in
+allowlist.
+
+In particular, the kernel commit:
+
+  e78aea8b2170 ("bpf: tcp: Put some tcp cong functions in allowlist for bpf-tcp-cc")
+
+allows bpf program to directly call a few tcp cc kernel functions. Those
+kernel functions are currently allowed only if CONFIG_DYNAMIC_FTRACE
+is set to ensure they are in the ftrace list but this kconfig dependency
+is unnecessary.
+
+Those kernel functions are specified under an ELF section .BTF_ids.
+There was an earlier attempt [0] to add another filter for the functions in
+the .BTF_ids section.  That discussion concluded that the ftrace filter
+should be removed instead.
+
+This patch is to remove the ftrace filter and its related functions.
+
+Number of BTF FUNC with and without is_ftrace_func():
+My kconfig in x86: 40643 vs 46225
+Jiri reported on arm: 25022 vs 55812
+
+[0]: https://lore.kernel.org/dwarves/20210423213728.3538141-1-kafai@fb.com/
+
+Signed-off-by: Martin KaFai Lau <kafai@fb.com>
+Tested-by: Nathan Chancellor <nathan@kernel.org> # build
+Acked-by: Jiri Olsa <jolsa@kernel.org>
+Acked-by: Jiri Slaby <jirislaby@kernel.org>
+Cc: Andrii Nakryiko <andrii@kernel.org>
+Cc: Jiri Olsa <jolsa@kernel.org>
+Cc: kernel-team@fb.com
+Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
+---
+ btf_encoder.c | 285 ++------------------------------------------------
+ 1 file changed, 7 insertions(+), 278 deletions(-)
+
+diff --git a/btf_encoder.c b/btf_encoder.c
+index 80e896961d4e..c711f124b31e 100644
+--- a/btf_encoder.c
++++ b/btf_encoder.c
+@@ -27,17 +27,8 @@
+  */
+ #define KSYM_NAME_LEN 128
+ 
+-struct funcs_layout {
+-	unsigned long mcount_start;
+-	unsigned long mcount_stop;
+-	unsigned long mcount_sec_idx;
+-};
+-
+ struct elf_function {
+ 	const char	*name;
+-	unsigned long	 addr;
+-	unsigned long	 size;
+-	unsigned long	 sh_addr;
+ 	bool		 generated;
+ };
+ 
+@@ -64,12 +55,9 @@ static void delete_functions(void)
+ #define max(x, y) ((x) < (y) ? (y) : (x))
+ #endif
+ 
+-static int collect_function(struct btf_elf *btfe, GElf_Sym *sym,
+-			    size_t sym_sec_idx)
++static int collect_function(struct btf_elf *btfe, GElf_Sym *sym)
+ {
+ 	struct elf_function *new;
+-	static GElf_Shdr sh;
+-	static size_t last_idx;
+ 	const char *name;
+ 
+ 	if (elf_sym__type(sym) != STT_FUNC)
+@@ -91,257 +79,12 @@ static int collect_function(struct btf_elf *btfe, GElf_Sym *sym,
+ 		functions = new;
+ 	}
+ 
+-	if (sym_sec_idx != last_idx) {
+-		if (!elf_section_by_idx(btfe->elf, &sh, sym_sec_idx))
+-			return 0;
+-		last_idx = sym_sec_idx;
+-	}
+-
+ 	functions[functions_cnt].name = name;
+-	functions[functions_cnt].addr = elf_sym__value(sym);
+-	functions[functions_cnt].size = elf_sym__size(sym);
+-	functions[functions_cnt].sh_addr = sh.sh_addr;
+ 	functions[functions_cnt].generated = false;
+ 	functions_cnt++;
+ 	return 0;
+ }
+ 
+-static int addrs_cmp(const void *_a, const void *_b)
+-{
+-	const __u64 *a = _a;
+-	const __u64 *b = _b;
+-
+-	if (*a == *b)
+-		return 0;
+-	return *a < *b ? -1 : 1;
+-}
+-
+-static int get_vmlinux_addrs(struct btf_elf *btfe, struct funcs_layout *fl,
+-			     __u64 **paddrs, __u64 *pcount)
+-{
+-	__u64 *addrs, count, offset;
+-	unsigned int addr_size, i;
+-	Elf_Data *data;
+-	GElf_Shdr shdr;
+-	Elf_Scn *sec;
+-
+-	/* Initialize for the sake of all error paths below. */
+-	*paddrs = NULL;
+-	*pcount = 0;
+-
+-	if (!fl->mcount_start || !fl->mcount_stop)
+-		return 0;
+-
+-	/*
+-	 * Find mcount addressed marked by __start_mcount_loc
+-	 * and __stop_mcount_loc symbols and load them into
+-	 * sorted array.
+-	 */
+-	sec = elf_getscn(btfe->elf, fl->mcount_sec_idx);
+-	if (!sec || !gelf_getshdr(sec, &shdr)) {
+-		fprintf(stderr, "Failed to get section(%lu) header.\n",
+-			fl->mcount_sec_idx);
+-		return -1;
+-	}
+-
+-	/* Get address size from processed file's ELF class. */
+-	addr_size = gelf_getclass(btfe->elf) == ELFCLASS32 ? 4 : 8;
+-
+-	offset = fl->mcount_start - shdr.sh_addr;
+-	count  = (fl->mcount_stop - fl->mcount_start) / addr_size;
+-
+-	data = elf_getdata(sec, 0);
+-	if (!data) {
+-		fprintf(stderr, "Failed to get section(%lu) data.\n",
+-			fl->mcount_sec_idx);
+-		return -1;
+-	}
+-
+-	addrs = malloc(count * sizeof(addrs[0]));
+-	if (!addrs) {
+-		fprintf(stderr, "Failed to allocate memory for ftrace addresses.\n");
+-		return -1;
+-	}
+-
+-	if (addr_size == sizeof(__u64)) {
+-		memcpy(addrs, data->d_buf + offset, count * addr_size);
+-	} else {
+-		for (i = 0; i < count; i++)
+-			addrs[i] = (__u64) *((__u32 *) (data->d_buf + offset + i * addr_size));
+-	}
+-
+-	*paddrs = addrs;
+-	*pcount = count;
+-	return 0;
+-}
+-
+-static int
+-get_kmod_addrs(struct btf_elf *btfe, __u64 **paddrs, __u64 *pcount)
+-{
+-	__u64 *addrs, count;
+-	unsigned int addr_size, i;
+-	GElf_Shdr shdr_mcount;
+-	Elf_Data *data;
+-	Elf_Scn *sec;
+-
+-	/* Initialize for the sake of all error paths below. */
+-	*paddrs = NULL;
+-	*pcount = 0;
+-
+-	/* get __mcount_loc */
+-	sec = elf_section_by_name(btfe->elf, &btfe->ehdr, &shdr_mcount,
+-				  "__mcount_loc", NULL);
+-	if (!sec) {
+-		if (btf_elf__verbose) {
+-			printf("%s: '%s' doesn't have __mcount_loc section\n", __func__,
+-			       btfe->filename);
+-		}
+-		return 0;
+-	}
+-
+-	data = elf_getdata(sec, NULL);
+-	if (!data) {
+-		fprintf(stderr, "Failed to data for __mcount_loc section.\n");
+-		return -1;
+-	}
+-
+-	/* Get address size from processed file's ELF class. */
+-	addr_size = gelf_getclass(btfe->elf) == ELFCLASS32 ? 4 : 8;
+-
+-	count = data->d_size / addr_size;
+-
+-	addrs = malloc(count * sizeof(addrs[0]));
+-	if (!addrs) {
+-		fprintf(stderr, "Failed to allocate memory for ftrace addresses.\n");
+-		return -1;
+-	}
+-
+-	if (addr_size == sizeof(__u64)) {
+-		memcpy(addrs, data->d_buf, count * addr_size);
+-	} else {
+-		for (i = 0; i < count; i++)
+-			addrs[i] = (__u64) *((__u32 *) (data->d_buf + i * addr_size));
+-	}
+-
+-	/*
+-	 * We get Elf object from dwfl_module_getelf function,
+-	 * which performs all possible relocations, including
+-	 * __mcount_loc section.
+-	 *
+-	 * So addrs array now contains relocated values, which
+-	 * we need take into account when we compare them to
+-	 * functions values, see comment in setup_functions
+-	 * function.
+-	 */
+-	*paddrs = addrs;
+-	*pcount = count;
+-	return 0;
+-}
+-
+-static int is_ftrace_func(struct elf_function *func, __u64 *addrs, __u64 count)
+-{
+-	__u64 start = func->addr;
+-	__u64 addr, end = func->addr + func->size;
+-
+-	/*
+-	 * The invariant here is addr[r] that is the smallest address
+-	 * that is >= than function start addr. Except the corner case
+-	 * where there is no such r, but for that we have a final check
+-	 * in the return.
+-	 */
+-	size_t l = 0, r = count - 1, m;
+-
+-	/* make sure we don't use invalid r */
+-	if (count == 0)
+-		return false;
+-
+-	while (l < r) {
+-		m = l + (r - l) / 2;
+-		addr = addrs[m];
+-
+-		if (addr >= start) {
+-			/* we satisfy invariant, so tighten r */
+-			r = m;
+-		} else {
+-			/* m is not good enough as l, maybe m + 1 will be */
+-			l = m + 1;
+-		}
+-	}
+-
+-	return start <= addrs[r] && addrs[r] < end;
+-}
+-
+-static int setup_functions(struct btf_elf *btfe, struct funcs_layout *fl)
+-{
+-	__u64 *addrs, count, i;
+-	int functions_valid = 0;
+-	bool kmod = false;
+-
+-	/*
+-	 * Check if we are processing vmlinux image and
+-	 * get mcount data if it's detected.
+-	 */
+-	if (get_vmlinux_addrs(btfe, fl, &addrs, &count))
+-		return -1;
+-
+-	/*
+-	 * Check if we are processing kernel module and
+-	 * get mcount data if it's detected.
+-	 */
+-	if (!addrs) {
+-		if (get_kmod_addrs(btfe, &addrs, &count))
+-			return -1;
+-		kmod = true;
+-	}
+-
+-	if (!addrs) {
+-		if (btf_elf__verbose)
+-			printf("ftrace symbols not detected, falling back to DWARF data\n");
+-		delete_functions();
+-		return 0;
+-	}
+-
+-	qsort(addrs, count, sizeof(addrs[0]), addrs_cmp);
+-	qsort(functions, functions_cnt, sizeof(functions[0]), functions_cmp);
+-
+-	/*
+-	 * Let's got through all collected functions and filter
+-	 * out those that are not in ftrace.
+-	 */
+-	for (i = 0; i < functions_cnt; i++) {
+-		struct elf_function *func = &functions[i];
+-		/*
+-		 * For vmlinux image both addrs[x] and functions[x]::addr
+-		 * values are final address and are comparable.
+-		 *
+-		 * For kernel module addrs[x] is final address, but
+-		 * functions[x]::addr is relative address within section
+-		 * and needs to be relocated by adding sh_addr.
+-		 */
+-		if (kmod)
+-			func->addr += func->sh_addr;
+-
+-		/* Make sure function is within ftrace addresses. */
+-		if (is_ftrace_func(func, addrs, count)) {
+-			/*
+-			 * We iterate over sorted array, so we can easily skip
+-			 * not valid item and move following valid field into
+-			 * its place, and still keep the 'new' array sorted.
+-			 */
+-			if (i != functions_valid)
+-				functions[functions_valid] = functions[i];
+-			functions_valid++;
+-		}
+-	}
+-
+-	functions_cnt = functions_valid;
+-	free(addrs);
+-
+-	if (btf_elf__verbose)
+-		printf("Found %d functions!\n", functions_cnt);
+-	return 0;
+-}
+-
+ static struct elf_function *find_function(const struct btf_elf *btfe,
+ 					  const char *name)
+ {
+@@ -620,23 +363,8 @@ static int collect_percpu_var(struct btf_elf *btfe, GElf_Sym *sym,
+ 	return 0;
+ }
+ 
+-static void collect_symbol(GElf_Sym *sym, struct funcs_layout *fl,
+-			   size_t sym_sec_idx)
+-{
+-	if (!fl->mcount_start &&
+-	    !strcmp("__start_mcount_loc", elf_sym__name(sym, btfe->symtab))) {
+-		fl->mcount_start = sym->st_value;
+-		fl->mcount_sec_idx = sym_sec_idx;
+-	}
+-
+-	if (!fl->mcount_stop &&
+-	    !strcmp("__stop_mcount_loc", elf_sym__name(sym, btfe->symtab)))
+-		fl->mcount_stop = sym->st_value;
+-}
+-
+ static int collect_symbols(struct btf_elf *btfe, bool collect_percpu_vars)
+ {
+-	struct funcs_layout fl = { };
+ 	Elf32_Word sym_sec_idx;
+ 	uint32_t core_id;
+ 	GElf_Sym sym;
+@@ -648,9 +376,8 @@ static int collect_symbols(struct btf_elf *btfe, bool collect_percpu_vars)
+ 	elf_symtab__for_each_symbol_index(btfe->symtab, core_id, sym, sym_sec_idx) {
+ 		if (collect_percpu_vars && collect_percpu_var(btfe, &sym, sym_sec_idx))
+ 			return -1;
+-		if (collect_function(btfe, &sym, sym_sec_idx))
++		if (collect_function(btfe, &sym))
+ 			return -1;
+-		collect_symbol(&sym, &fl, sym_sec_idx);
+ 	}
+ 
+ 	if (collect_percpu_vars) {
+@@ -661,9 +388,11 @@ static int collect_symbols(struct btf_elf *btfe, bool collect_percpu_vars)
+ 			printf("Found %d per-CPU variables!\n", percpu_var_cnt);
+ 	}
+ 
+-	if (functions_cnt && setup_functions(btfe, &fl)) {
+-		fprintf(stderr, "Failed to filter DWARF functions\n");
+-		return -1;
++	if (functions_cnt) {
++		qsort(functions, functions_cnt, sizeof(functions[0]),
++		      functions_cmp);
++		if (btf_elf__verbose)
++			printf("Found %d functions!\n", functions_cnt);
+ 	}
+ 
+ 	return 0;
+-- 
+2.31.1
+
diff --git a/SPECS/dwarves.spec b/SPECS/dwarves.spec
new file mode 100644
index 0000000..9806f29
--- /dev/null
+++ b/SPECS/dwarves.spec
@@ -0,0 +1,504 @@
+%define libname libdwarves
+%define libver 1
+
+Name: dwarves
+Version: 1.21
+Release: 2%{?dist}
+License: GPLv2
+Summary: Debugging Information Manipulation Tools (pahole & friends)
+URL: http://acmel.wordpress.com
+Source: http://fedorapeople.org/~acme/dwarves/%{name}-%{version}.tar.xz
+Requires: %{libname}%{libver} = %{version}-%{release}
+Patch1: 0001-btf-Remove-ftrace-filter.patch
+BuildRequires: gcc
+BuildRequires: cmake >= 2.8.12
+BuildRequires: zlib-devel
+BuildRequires: elfutils-devel >= 0.130
+
+%description
+dwarves is a set of tools that use the debugging information inserted in
+ELF binaries by compilers such as GCC, used by well known debuggers such as
+GDB, and more recent ones such as systemtap.
+
+Utilities in the dwarves suite include pahole, that can be used to find
+alignment holes in structs and classes in languages such as C, C++, but not
+limited to these.
+
+It also extracts other information such as CPU cacheline alignment, helping
+pack those structures to achieve more cache hits.
+
+These tools can also be used to encode and read the BTF type information format
+used with the Linux kernel bpf syscall, using 'pahole -J' and 'pahole -F btf'.
+
+A diff like tool, codiff can be used to compare the effects changes in source
+code generate on the resulting binaries.
+
+Another tool is pfunct, that can be used to find all sorts of information about
+functions, inlines, decisions made by the compiler about inlining, etc.
+
+One example of pfunct usage is in the fullcircle tool, a shell that drivers
+pfunct to generate compileable code out of a .o file and then build it using
+gcc, with the same compiler flags, and then use codiff to make sure the
+original .o file and the new one generated from debug info produces the same
+debug info.
+
+Pahole also can be used to use all this type information to pretty print raw data
+according to command line directions.
+
+Headers can have its data format described from debugging info and offsets from
+it can be used to further format a number of records.
+
+The btfdiff utility compares the output of pahole from BTF and DWARF to make
+sure they produce the same results.
+
+%package -n %{libname}%{libver}
+Summary: Debugging information  processing library
+
+%description -n %{libname}%{libver}
+Debugging information processing library.
+
+%package -n %{libname}%{libver}-devel
+Summary: Debugging information library development files
+Requires: %{libname}%{libver} = %{version}-%{release}
+
+%description -n %{libname}%{libver}-devel
+Debugging information processing library development files.
+
+%prep
+%setup -q
+%patch1 -p1
+
+%build
+%cmake -DCMAKE_BUILD_TYPE=Release .
+%cmake_build
+
+%install
+rm -Rf %{buildroot}
+%cmake_install
+
+%ldconfig_scriptlets -n %{libname}%{libver}
+
+%files
+%doc README.ctracer
+%doc README.btf
+%doc changes-v1.21
+%doc NEWS
+%{_bindir}/btfdiff
+%{_bindir}/codiff
+%{_bindir}/ctracer
+%{_bindir}/dtagnames
+%{_bindir}/fullcircle
+%{_bindir}/pahole
+%{_bindir}/pdwtags
+%{_bindir}/pfunct
+%{_bindir}/pglobal
+%{_bindir}/prefcnt
+%{_bindir}/scncopy
+%{_bindir}/syscse
+%{_bindir}/ostra-cg
+%dir %{_datadir}/dwarves/
+%dir %{_datadir}/dwarves/runtime/
+%dir %{_datadir}/dwarves/runtime/python/
+%defattr(0644,root,root,0755)
+%{_mandir}/man1/pahole.1*
+%{_datadir}/dwarves/runtime/Makefile
+%{_datadir}/dwarves/runtime/linux.blacklist.cu
+%{_datadir}/dwarves/runtime/ctracer_relay.c
+%{_datadir}/dwarves/runtime/ctracer_relay.h
+%attr(0755,root,root) %{_datadir}/dwarves/runtime/python/ostra.py*
+
+%files -n %{libname}%{libver}
+%{_libdir}/%{libname}.so.*
+%{_libdir}/%{libname}_emit.so.*
+%{_libdir}/%{libname}_reorganize.so.*
+
+%files -n %{libname}%{libver}-devel
+%doc MANIFEST README
+%{_includedir}/dwarves/btf_encoder.h
+%{_includedir}/dwarves/config.h
+%{_includedir}/dwarves/ctf_encoder.h
+%{_includedir}/dwarves/ctf.h
+%{_includedir}/dwarves/dutil.h
+%{_includedir}/dwarves/dwarves.h
+%{_includedir}/dwarves/dwarves_emit.h
+%{_includedir}/dwarves/dwarves_reorganize.h
+%{_includedir}/dwarves/elfcreator.h
+%{_includedir}/dwarves/elf_symtab.h
+%{_includedir}/dwarves/gobuffer.h
+%{_includedir}/dwarves/hash.h
+%{_includedir}/dwarves/libbtf.h
+%{_includedir}/dwarves/libctf.h
+%{_includedir}/dwarves/list.h
+%{_includedir}/dwarves/rbtree.h
+%{_includedir}/dwarves/pahole_strings.h
+%{_libdir}/%{libname}.so
+%{_libdir}/%{libname}_emit.so
+%{_libdir}/%{libname}_reorganize.so
+
+%changelog
+* Mon Aug 09 2021 Mohan Boddu <mboddu@redhat.com> - 1.21-2
+- Rebuilt for IMA sigs, glibc 2.34, aarch64 flags
+  Related: rhbz#1991688
+
+* Fri May 14 2021 Jiri Olsa <jolsa@redhat.com> - 1.21-1
+- remove ftrace filter
+- New release: v1.21
+- DWARF loader:
+- Handle DWARF5 DW_OP_addrx properly
+- Handle subprogram ret type with abstract_origin properly
+- Check .notes section for LTO build info
+- Check .debug_abbrev for cross-CU references
+- Permit merging all DWARF CU's for clang LTO built binary
+- Factor out common code to initialize a cu
+- Permit a flexible HASHTAGS__BITS
+- Use a better hashing function, from libbpf
+- btf_encoder:
+- Add --btf_gen_all flag
+- Match ftrace addresses within ELF functions
+- Funnel ELF error reporting through a macro
+- Sanitize non-regular int base type
+- Add support for the floating-point types
+- Pretty printer:
+- Honour conf_fprintf.hex when printing enumerations
+
+* Thu Apr 15 2021 Mohan Boddu <mboddu@redhat.com> - 1.20-2
+- Rebuilt for RHEL 9 BETA on Apr 15th 2021. Related: rhbz#1947937
+
+* Tue Feb  2 2021 Arnaldo Carvalho de Melo <acme@redhat.com> - 1.20-1
+- New release: 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
+- Cope with functions without a name
+- Fix BTF variable generation for kernel modules
+- Fix address size to match what is in the ELF file being processed.
+- Use kernel module ftrace addresses when finding which functions to encode.
+- libbpf:
+- Allow use of packaged version.
+- dwarf_loader:
+- Support DW_AT_data_bit_offset
+- DW_FORM_implicit_const in attr_numeric() and attr_offset()
+- Support DW_TAG_GNU_call_site, standardized rename of DW_TAG_GNU_call_site.
+- build:
+- Fix compilation on 32-bit architectures.
+
+* Fri Nov 20 2020 Arnaldo Carvalho de Melo <acme@redhat.com> - 1.19-1
+- New release: 1.19
+- Split BTF
+- DWARF workarounds for DW_AT_declaration
+- Support cross-compiled ELF binaries with different endianness
+- Support showing typedefs for anonymous types
+- Speedups using libbpf algorithms
+- See changes-v1.19 for a complete and more detailed list of changes
+
+* Fri Oct 02 2020 Arnaldo Carvalho de Melo <acme@redhat.com> - 1.18-1
+- New release: 1.18
+- Use debugging info to pretty print raw data
+- Store percpu variables in vmlinux BTF.
+- Fixes to address segfaults on the gdb testsuite binaries
+- Bail out on partial units for now, avoiding segfaults and providing warning to user.
+
+* Mon Aug 31 2020 - Zamir SUN <sztsian@gmail.com> - 1.17-4
+- Fix FTBFS
+- Resolves: bug 1863459
+
+* Sat Aug 01 2020 Fedora Release Engineering <releng@fedoraproject.org> - 1.17-3
+- Second attempt - Rebuilt for
+  https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
+
+* Mon Jul 27 2020 Fedora Release Engineering <releng@fedoraproject.org> - 1.17-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
+
+* Fri Mar 13 2020 Arnaldo Carvalho de Melo <acme@redhat.com> - 1.17-1
+- New release: 1.17
+- Support raw BTF as available in /sys/kernel/btf/vmlinux.
+- When the sole argument passed isn't a file, take it as a class name:
+- Do not require a class name to operate without a file name.
+- Make --find_pointers_to consider unions:
+- Make --contains and --find_pointers_to honour --unions
+- Add support for finding pointers to void:
+- Make --contains and --find_pointers_to to work with base types:
+- Make --contains look for more than just unions, structs:
+- Consider unions when looking for classes containing some class:
+- Introduce --unions to consider just unions:
+- Fix -m/--nr_methods - Number of functions operating on a type pointer
+
+* Wed Feb 12 2020 Arnaldo Carvalho de Melo <acme@redhat.com> - 1.16-1
+- New release: 1.16
+- BTF encoder: Preserve and encode exported functions as BTF_KIND_FUNC.
+- BTF loader: Add support for BTF_KIND_FUNC
+- Pretty printer: Account inline type __aligned__ member types for spacing
+- Pretty printer: Fix alignment of class members that are structs/enums/unions
+- Pretty printer: Avoid infinite loop trying to determine type with static data member of its own type.
+- RPM spec file:  Add dwarves dependency on libdwarves1.
+- pfunct: type->type == 0 is void, fix --compile for that
+- pdwtags: Print DW_TAG_subroutine_type as well
+- core: Fix ptr_table__add_with_id() handling of pt->nr_entries
+- pglobal: Allow passing the format path specifier, to use with BTF
+- Tree wide: Fixup issues pointed out by various coverity reports.
+
+* Tue Jan 28 2020 Fedora Release Engineering <releng@fedoraproject.org> - 1.15-4
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
+
+* Wed Jul 24 2019 Fedora Release Engineering <releng@fedoraproject.org> - 1.15-3
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
+
+* Mon Jul  1 2019 Arnaldo Carvalho de Melo <acme@redhat.com> - 1.15-2
+- Fix bug when processing classes without members
+
+* Thu Jun 27 2019 Arnaldo Carvalho de Melo <acme@redhat.com> - 1.15-1
+- New release: 1.15
+- Fix --expand_types/-E segfault
+- Fixup endless printing named structs inside structs in --expand_types
+- Avoid NULL deref with num config in __class__fprintf()
+
+* Tue Apr 23 2019 Arnaldo Carvalho de Melo <acme@redhat.com> - 1.13-1
+- New release: 1.13
+- Infer __packed__ attributes, i.e. __attribute__((__packed__))
+- Support DW_AT_alignment, i.e. __attribute__((__aligned__(N)))
+- Decode BTF type format and pretty print it
+- BTF encoding fixes
+- Use libbpf's BTF deduplication
+- Support unions as arguments to -C/--class
+- New 'pfunct --compile' generates compilable output with type definitions
+
+* Thu Jan 31 2019 Fedora Release Engineering <releng@fedoraproject.org> - 1.12-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
+
+* Fri Aug 31 2018 Arnaldo Carvalho de Melo <acme@redhat.com> - 1.12-1
+- New release: 1.12
+- union member cacheline boundaries for all inner structs
+- print union member offsets
+- Document 'pahole --hex'
+- Encode BTF type format for use with eBPF
+
+* Thu Jul 12 2018 Fedora Release Engineering <releng@fedoraproject.org> - 1.10-15
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
+
+* Wed Feb 07 2018 Fedora Release Engineering <releng@fedoraproject.org> - 1.10-14
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
+
+* Wed Aug 02 2017 Fedora Release Engineering <releng@fedoraproject.org> - 1.10-13
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild
+
+* Wed Jul 26 2017 Fedora Release Engineering <releng@fedoraproject.org> - 1.10-12
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
+
+* Fri Feb 10 2017 Fedora Release Engineering <releng@fedoraproject.org> - 1.10-11
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild
+
+* Wed Aug 03 2016 Cole Robinson <crobinso@redhat.com> - 1.10-9%{?dist}
+- pdwtags: don't fail on unhandled tags (bz 1348200)
+
+* Wed Feb 03 2016 Fedora Release Engineering <releng@fedoraproject.org> - 1.10-9
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild
+
+* Wed Jun 17 2015 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.10-8
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild
+
+* Fri Sep 05 2014 Marcin Juszkiewicz <mjuszkiewicz@redhat.com> - 1.10-7
+- backport removal of DW_TAG_mutable_type
+
+* Sat Aug 16 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.10-6
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild
+
+* Sat Jun 07 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.10-5
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild
+
+* Sat Aug 03 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.10-4
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild
+
+* Wed Feb 13 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.10-3
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild
+
+* Wed Jul 18 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.10-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild
+
+* Wed May 30 2012 Arnaldo Carvalho de Melo <acme@redhat.com> - 1.10-1
+- New release
+
+* Fri Jan 13 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.9-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild
+
+* Sat Nov 20 2010 Arnaldo Carvalho de Melo <acme@redhat.com> - 1.9-1
+- New release
+
+* Tue Feb 08 2010 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.8-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild
+
+* Fri Dec  4 2009 Arnaldo Carvalho de Melo <acme@redhat.com> - 1.8-1
+- New release
+
+* Fri Feb 13 2009 Arnaldo Carvalho de Melo <acme@redhat.com> - 1.7-2
+- Own /usr/share/dwarves, fixes #473645 
+
+* Fri Feb 13 2009 Arnaldo Carvalho de Melo <acme@redhat.com> - 1.7-1
+- A CTF decoder based on work done by David S. Miller
+- Handle DW_TAG_class_type,
+- Add support for showing classes with a prefix
+- Add support to DW_TAG_ptr_to_member_type
+- Handle typedef definitions in functions
+- Print the number of members in a struct/class
+- Handle the empty base optimization trick (Zero sized C++ class)
+- codiff detect changes in the prototype even when function size doesn't change
+- pfunct: Implement --expand_types
+- Reduce memory consumption by using a strings table
+- Speed up struct search by name
+- Several minor bug fixes and infrastructure improvements.
+- Initial man page for pahole
+
+* Mon Feb 11 2008 Arnaldo Carvalho de Melo <acme@redhat.com> - 1.6-1
+- c83d935a4fd561a3807f520c126c2a61ae1f4d83
+- [DWARVES]: Use a hash table for the tags in a CU
+
+* Thu Feb  7 2008 Arnaldo Carvalho de Melo <acme@redhat.com> - 1.5-1
+- c4e49add9e48ff08a8ba4187ea43d795af995136
+- PAHOLE: Introduce --defined_in
+- DWARVES: Another fix for DW_TAG_base_type entries without DW_AT_name
+- PAHOLE: Cope with DW_TAG_basic_type entries without DW_AT_name
+- CODIFF: Allow passing /dev/null as one of the files to compare
+- DWARVES: Allow passing NULL as self to cu__find_
+- DWARVES: Fixup usage messages
+- DWARVES: Find holes in inner, nameless structs
+- DWARVES: Adopt tag__follow_typedef from pahole
+- DWARVES: Add some destructors: tag, cu, namespace
+- CODIFF: Check if the objects are the same when we have build-id
+- DWARVES: Introduce cu__same_build_id
+- DWARVES_REORGANIZE: Proper tail padding fixup
+- DWARVES: Don't search in empty structs
+- DWARVES: Follow const and volatile tags to its ultimate types
+- PAHOLE: Add a newline after the --class_dwarf_offset output
+- PAHOLE: Expose type__find_first_biggest_size_base_type_member
+- DWARVES: Introduce type__find_first_biggest_size_base_type_member
+- PAHOLE: Account arrays properly when changing word-size
+- PAHOLE: Follow typedefs too when resizing unions
+- PAHOLE: Follow typedefs to find if they are resized structs/unions
+- PAHOLE: Check if types of struct and union members were already resized
+- DWARVES_REORGANIZE: Fixup class__fixup_alingment
+- PAHOLE: Allow changing the architecture word-size
+- DWARVES_REORGANIZE: Adopt class__add_offsets_from and class__fixup_alignment from ctracer
+- DWARVES: build id support requires a recent elfutils package
+
+* Sat Jan  5 2008 Arnaldo Carvalho de Melo <acme@redhat.com> - 1.4-1
+- 8e099cf5d1f204e9ea1a9c8c0f1a09a43458d9d3
+- codiff fixes
+
+* Sun Dec  9 2007 Arnaldo Carvalho de Melo <acme@redhat.com> - 1.3-2
+- c6c71398cd2481e219ea3ef63f32c6479ba4f08f
+- SPEC file adjustments to follow http://fedoraproject.org/wiki/Packaging/cmake
+
+* Sat Dec  8 2007 Arnaldo Carvalho de Melo <acme@redhat.com> - 1.3-1
+- c4ee21aa122f51f2601893b2118b7f7902d2f410
+- Fixed bitfield byte offset handling, now there are no
+  more BRAIN FART alerts on a x86_64 linux kernel and on
+  an old openbsd kernel image.
+
+* Thu Dec  6 2007 Arnaldo Carvalho de Melo <acme@redhat.com> - 1.2-1
+- 07e0974f2c3798acb8e9a2d06f6b2ece7a01c508
+- Fix a patological bitfield case
+
+* Thu Dec  6 2007 Arnaldo Carvalho de Melo <acme@redhat.com> - 1.1-1
+- 2c01420b51e889196b42a204910b46811ab22f1a
+- ctracer now generates systemtap scripts
+- Lots of other fixes, see git changelog.
+
+* Tue May  8 2007 Arnaldo Carvalho de Melo <acme@redhat.com> - 1.0-1
+- 161c6712f4ae1b7e2ea50df3a0d5c28310905cec
+- handle --help, -? --usage on with_executable_option()
+
+* Tue May  8 2007 Arnaldo Carvalho de Melo <acme@redhat.com>
+- b8eb5eb214f3897ea6faa3272879baa8bf2573c0
+- Fix cus__loadfl detection of --executable
+
+* Sun May  6 2007 Arnaldo Carvalho de Melo <acme@redhat.com>
+- 05351ece16e5203717dd21a6fc1ad2e6ff87c203
+- libdwarves_emit
+
+* Tue Apr  3 2007 Arnaldo Carvalho de Melo <acme@redhat.com>
+- f3c4f527f70053e39b402005107ead6cb10e0b4a
+- Fix some --reorganize bugs
+
+* Mon Apr  2 2007 Arnaldo Carvalho de Melo <acme@redhat.com>
+- 1ec66565a12ce7f197cd40e3901ed6be84935781
+- --reorganize improvements
+- --packable uses --reorganize code to show structs that can be packed by
+  reorganization done with --reorganize.
+
+* Fri Mar 30 2007 Arnaldo Carvalho de Melo <acme@redhat.com>
+- fd3542317508d04e8178c5d391385d2aa50d6fb7
+- Use libdwfl in all tools that handle just one file, codiff and ctracer
+  still need work and are still using plain libdw.
+
+* Sun Feb 25 2007 Arnaldo Carvalho de Melo <acme@redhat.com>
+- 3c148cd84b74b89663febdefab23356952906502
+- _snprintf routines changed to _fprintf
+- codiff shows diffs in number and total size of inline expansions
+- codiff shows diffs in the number of lexblocks
+- better alignment in the --expand_types case
+- CMake improvements
+
+* Fri Feb  2 2007 Arnaldo Carvalho de Melo <acme@redhat.com>
+- d37f41df58c375412badf827e24dfc346cea2ff2
+- ostra-cg
+- relay/debugfs
+- mini-structs
+- ctracer2ostra
+- All this in the Makefile
+
+* Fri Feb  2 2007 Arnaldo Carvalho de Melo <acme@redhat.com>
+- b7cad1782d683571ffb2601b429ab151bddad5d7
+- pglobal, by Davi Arnaut
+- pahole --show_reorg_steps
+- Reorganize bitfields in pahole --reorganize
+
+* Tue Jan 30 2007 Arnaldo Carvalho de Melo <acme@redhat.com>
+- 8e236f4ca37b8a3d2057f4ede5a14ab1fa99f73c
+- x86-64 lib install fixes
+
+* Tue Jan 30 2007 Arnaldo Carvalho de Melo <acme@redhat.com>
+- 4a4b75e75a6d7f34215d320cc4a9f669b6ba4075
+- pahole --reorganize
+
+* Mon Jan 29 2007 Arnaldo Carvalho de Melo <acme@redhat.com>
+- 2de67fcaf401ac1e20feca5fa88dfc63fbc4203e
+- Type expansion!
+
+* Sat Jan 27 2007 Arnaldo Carvalho de Melo <acme@redhat.com>
+- 6bf2d2d7707b65e7ca21a13706d8d07824cd6f2f
+- ctracer improvements, /usr/lib/ctracer/, etc
+
+* Fri Jan 26 2007 Arnaldo Carvalho de Melo <acme@redhat.com>
+- c49f2c963425d5c09c429370e10d9af3d7d7fe32
+- Emit typedefs of typedef arrays
+- Detect typedef loops
+- Fix emission of arrays of structs, unions, etc
+- use sysconf for the default cacheline size
+
+* Wed Jan 18 2007 Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
+- fab0db03ea9046893ca110bb2b7d71b764f61033
+- pdwtags added
+
+* Wed Jan 17 2007 Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
+- e3786105c007a39ff3dbfb36a3037e786021e0c6
+- First Fedora native build
+- struct, enum, enum, void typedefs
+
+* Sat Jan 13 2007 Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
+- 9a413e60a3875980d99817722bf019cba3a24573
+- pahole --nr_methods, improvements in tag__print, better support for unions
+
+* Fri Jan 12 2007 Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
+- a1f5422656a91568a8b4edbcebaae9c1837b5cbd
+- Support a DW_TAG_reference_type
+
+* Fri Jan 12 2007 Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
+- 0ad467a32187e1929c14054a0fc7326bc4d235c8 
+- Added a description
+
+* Thu Jan 11 2007 Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
+- new release with type not found asserts replaced by error messages
+
+* Thu Jan 11 2007 Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
+- package created