#!/bin/bash # SPDX-License-Identifier: GPL-2.0-only # Copyright © 2019 Red Hat Inc, Arnaldo Carvalho de Melo # Use pahole to produce output from BTF and from DWARF, then do a diff # Use --flat_arrays with DWARF as BTF, like CTF, flattens arrays. # Use --show_private_classes as BTF shows all structs, while pahole knows # if some struct is defined only inside another struct/class or in a function, # this information is not available when loading from BTF. if [ $# -eq 0 ] ; then echo "Usage: btfdiff []" exit 1 fi dwarf_input=$1 btf_input=$dwarf_input if [ $# -eq 2 ] ; then btf_input=$2 fi btf_output=$(mktemp /tmp/btfdiff.btf.XXXXXX) dwarf_output=$(mktemp /tmp/btfdiff.dwarf.XXXXXX) pahole_bin=${PAHOLE-"pahole"} ${pahole_bin} -F dwarf \ --flat_arrays \ --sort \ --jobs \ --suppress_aligned_attribute \ --suppress_force_paddings \ --suppress_packed \ --show_private_classes $dwarf_input > $dwarf_output ${pahole_bin} -F btf \ --sort \ --suppress_aligned_attribute \ --suppress_packed \ $btf_input > $btf_output diff -up $dwarf_output $btf_output rm -f $btf_output $dwarf_output exit 0