Message ID | 20191203170934.82741-1-cascardo@canonical.com |
---|---|
State | New |
Headers | show |
Series | [Unstable] libbpf: Fix readelf output parsing on powerpc with recent binutils | expand |
On Tue, Dec 03, 2019 at 02:09:34PM -0300, Thadeu Lima de Souza Cascardo wrote: > From: Aurelien Jarno <aurelien@aurel32.net> > > BugLink: https://bugs.launchpad.net/bugs/1854974 > > On powerpc with recent versions of binutils, readelf outputs an extra > field when dumping the symbols of an object file. For example: > > 35: 0000000000000838 96 FUNC LOCAL DEFAULT [<localentry>: 8] 1 btf_is_struct > > The extra "[<localentry>: 8]" prevents the GLOBAL_SYM_COUNT variable to > be computed correctly and causes the check_abi target to fail. > > Fix that by looking for the symbol name in the last field instead of the > 8th one. This way it should also cope with future extra fields. > > Signed-off-by: Aurelien Jarno <aurelien@aurel32.net> > Signed-off-by: Daniel Borkmann <daniel@iogearbox.net> > Tested-by: Michael Ellerman <mpe@ellerman.id.au> > Link: https://lore.kernel.org/bpf/20191201195728.4161537-1-aurelien@aurel32.net (cherry picked from commit 3464afdf11f9a1e031e7858a05351ceca1792fea linux-next) > Signed-off-by: Thadeu Lima de Souza Cascardo <cascardo@canonical.com> > --- > tools/lib/bpf/Makefile | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/tools/lib/bpf/Makefile b/tools/lib/bpf/Makefile > index 56ce6292071b..a7d7d35885c7 100644 > --- a/tools/lib/bpf/Makefile > +++ b/tools/lib/bpf/Makefile > @@ -145,7 +145,7 @@ PC_FILE := $(addprefix $(OUTPUT),$(PC_FILE)) > > GLOBAL_SYM_COUNT = $(shell readelf -s --wide $(BPF_IN_SHARED) | \ > cut -d "@" -f1 | sed 's/_v[0-9]_[0-9]_[0-9].*//' | \ > - awk '/GLOBAL/ && /DEFAULT/ && !/UND/ {print $$8}' | \ > + awk '/GLOBAL/ && /DEFAULT/ && !/UND/ {print $$NF}' | \ > sort -u | wc -l) > VERSIONED_SYM_COUNT = $(shell readelf -s --wide $(OUTPUT)libbpf.so | \ > grep -Eo '[^ ]+@LIBBPF_' | cut -d@ -f1 | sort -u | wc -l) > @@ -217,7 +217,7 @@ check_abi: $(OUTPUT)libbpf.so > "versioned in $(VERSION_SCRIPT)." >&2; \ > readelf -s --wide $(OUTPUT)libbpf-in.o | \ > cut -d "@" -f1 | sed 's/_v[0-9]_[0-9]_[0-9].*//' | \ > - awk '/GLOBAL/ && /DEFAULT/ && !/UND/ {print $$8}'| \ > + awk '/GLOBAL/ && /DEFAULT/ && !/UND/ {print $$NF}'| \ > sort -u > $(OUTPUT)libbpf_global_syms.tmp; \ > readelf -s --wide $(OUTPUT)libbpf.so | \ > grep -Eo '[^ ]+@LIBBPF_' | cut -d@ -f1 | \ > -- > 2.20.1 > > > -- > kernel-team mailing list > kernel-team@lists.ubuntu.com > https://lists.ubuntu.com/mailman/listinfo/kernel-team
On Tue, Dec 03, 2019 at 02:09:34PM -0300, Thadeu Lima de Souza Cascardo wrote: > From: Aurelien Jarno <aurelien@aurel32.net> > > BugLink: https://bugs.launchpad.net/bugs/1854974 > > On powerpc with recent versions of binutils, readelf outputs an extra > field when dumping the symbols of an object file. For example: > > 35: 0000000000000838 96 FUNC LOCAL DEFAULT [<localentry>: 8] 1 btf_is_struct > > The extra "[<localentry>: 8]" prevents the GLOBAL_SYM_COUNT variable to > be computed correctly and causes the check_abi target to fail. > > Fix that by looking for the symbol name in the last field instead of the > 8th one. This way it should also cope with future extra fields. > > Signed-off-by: Aurelien Jarno <aurelien@aurel32.net> > Signed-off-by: Daniel Borkmann <daniel@iogearbox.net> > Tested-by: Michael Ellerman <mpe@ellerman.id.au> > Link: https://lore.kernel.org/bpf/20191201195728.4161537-1-aurelien@aurel32.net > Signed-off-by: Thadeu Lima de Souza Cascardo <cascardo@canonical.com> Applied to unstable/master, thanks!
diff --git a/tools/lib/bpf/Makefile b/tools/lib/bpf/Makefile index 56ce6292071b..a7d7d35885c7 100644 --- a/tools/lib/bpf/Makefile +++ b/tools/lib/bpf/Makefile @@ -145,7 +145,7 @@ PC_FILE := $(addprefix $(OUTPUT),$(PC_FILE)) GLOBAL_SYM_COUNT = $(shell readelf -s --wide $(BPF_IN_SHARED) | \ cut -d "@" -f1 | sed 's/_v[0-9]_[0-9]_[0-9].*//' | \ - awk '/GLOBAL/ && /DEFAULT/ && !/UND/ {print $$8}' | \ + awk '/GLOBAL/ && /DEFAULT/ && !/UND/ {print $$NF}' | \ sort -u | wc -l) VERSIONED_SYM_COUNT = $(shell readelf -s --wide $(OUTPUT)libbpf.so | \ grep -Eo '[^ ]+@LIBBPF_' | cut -d@ -f1 | sort -u | wc -l) @@ -217,7 +217,7 @@ check_abi: $(OUTPUT)libbpf.so "versioned in $(VERSION_SCRIPT)." >&2; \ readelf -s --wide $(OUTPUT)libbpf-in.o | \ cut -d "@" -f1 | sed 's/_v[0-9]_[0-9]_[0-9].*//' | \ - awk '/GLOBAL/ && /DEFAULT/ && !/UND/ {print $$8}'| \ + awk '/GLOBAL/ && /DEFAULT/ && !/UND/ {print $$NF}'| \ sort -u > $(OUTPUT)libbpf_global_syms.tmp; \ readelf -s --wide $(OUTPUT)libbpf.so | \ grep -Eo '[^ ]+@LIBBPF_' | cut -d@ -f1 | \