On Mon, 2022-04-04 at 14:58 -0700, Andrii Nakryiko wrote: > On Mon, Apr 4, 2022 at 3:29 AM Ilya Leoshkevich <iii@xxxxxxxxxxxxx> > wrote: > > > > attach_probe selftest fails on Debian-based distros with `failed to > > resolve full path for 'libc.so.6'`. The reason is that these > > distros > > embraced multiarch to the point where even for the "main" > > architecture > > they store libc in /lib/<triple>. > > > > This is configured in /etc/ld.so.conf and in theory it's possible > > to > > replicate the loader's parsing and processing logic in libbpf, > > however > > a much simpler solution is to just enumerate the known library > > paths. > > > > Signed-off-by: Ilya Leoshkevich <iii@xxxxxxxxxxxxx> > > --- > > tools/lib/bpf/libbpf.c | 54 ++++++++++++++++++++++++++++++++++++-- > > ---- > > 1 file changed, 47 insertions(+), 7 deletions(-) > > > > diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c > > index 6d2be53e4ba9..4f616b11564f 100644 > > --- a/tools/lib/bpf/libbpf.c > > +++ b/tools/lib/bpf/libbpf.c > > @@ -10707,21 +10707,61 @@ static long elf_find_func_offset(const > > char *binary_path, const char *name) > > return ret; > > } > > > > +static void add_debian_library_paths(const char **search_paths, > > int *n) > > +{ > > + /* > > + * Based on https://packages.debian.org/sid/libc6. > > + * > > + * Assume that the traced program is built for the same > > architecture > > + * as libbpf, which should cover the vast majority of > > cases. > > + */ > > +#if defined(__x86_64__) > > can you please also drop defined() where possible, it looks cleaner > to me: > > #if __x86_64__ > > vs > > #if defined(__x86_64__) The consensus in the existing kernel and tools code (including libbpf itself) seems to be to use #if defined() or #ifdef for such macros: $ git grep __x86_64__ | wc -l 306 $ git grep __x86_64__ | grep -v \ -e '#\s*ifdef __x86_64__' \ -e 'defined\s*(__x86_64__)' \ -e '#\s*ifndef __x86_64__' \ -e '#\s*else' \ -e '#\s*endif' arch/x86/Makefile: CHECKFLAGS += -D__x86_64__ arch/x86/Makefile.um:CHECKFLAGS += -m64 -D__x86_64__ tools/lib/bpf/libbpf.c:#if __x86_64__ tools/testing/selftests/ipc/Makefile: CFLAGS := -DCONFIG_X86_64 - D__x86_64__ tools/testing/selftests/rcutorture/bin/mkinitrd.sh:if echo -e "#if __x86_64__||__i386__||__i486__||__i586__||__i686__" \ tools/testing/selftests/x86/mov_ss_trap.c:#if __x86_64__ I think `#if __x86_64__` should work in most cases, but I'd rather stick with the existing style if you don't mind.