Re: [RFC PATCH v6 25/32] perf tools: Add 'bpf.' config section to perf default config

From: Wangnan (F)
Date: Thu Jun 11 2015 - 04:11:08 EST




On 2015/6/11 15:45, Namhyung Kim wrote:
On Tue, Jun 09, 2015 at 04:43:19PM -0700, Alexei Starovoitov wrote:
On 6/8/15 10:50 PM, Wang Nan wrote:
perf_bpf_config() is added to parse 'bpf' section in perf config file.
Following is an example:

[bpf]
clang-path = /llvm/bin/x86_64-linux-clang"
llc-path = /llvm/bin/x86_64-linux-llc"
clang-opt = "-nostdinc -isystem /llvm/lib/clang/include -I/kernel/arch/x86/include ..."
llc-opt = ""
a section to specify -I flags to compile prog.c is useful,
but users shouldn't be populating it manually for kernel headers.
How about adding a script that can figure out $(LINUXINCLUDE)
automatically ?
Maybe a dummy question. For what reason it needs such headers? Is it
possible to have a (part of?) copy of needed bits in the perf source?

Thanks,
Namhyung

It is improtant for eBPF script that it should be able to extract information
from kernel pointers. For example: to extract registers from 'struct pt_regs' and
to extract fields from 'struct page *'. I believe this is an improtant reason
why we decide to use C-like language instead of designing a DLS. Therefore, when
compiling .c to .o, kernel source is mandatory. Since we don't want to limit the
ability of data accessing of eBPF scripts, we have to give it ability to access all
kernel headers.

Thank you for reviewing.

You can even invoke such flag detector from perf via something like:
f = open /tmpdir/Makefile
fprintf(f, "obj-y := dummy.o\n");
fprintf(f, "$(obj)/%%.o: $(src)/%%.c\n");
fprintf(f, "\t@echo -n \"$(NOSTDINC_FLAGS) $(LINUXINCLUDE) $(EXTRA_CFLAGS)\"
%s\n", cachefile);
snprintf(cmd, "make -s -C /lib/modules/%s/build M=%s dummy.o",
uts_release, tmpdir);
system(cmd);
read flags from cachefile and cache it for the future.
...
or as independent script that populates .perfconfig



--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/