Message ID | 20210923001024.550263-4-irogers@google.com (mailing list archive) |
---|---|
State | Accepted |
Commit | 08efcb4a638d260ef7fcbae64ecf7ceceb3f1841 |
Headers | show |
Series | [v3,1/4] perf: Enable libtracefs dynamic linking | expand |
Hi, On 23. 09. 21, 2:10, Ian Rogers wrote: > libtraceevent has added more levels of debug printout and with changes > like: > https://lore.kernel.org/linux-trace-devel/20210507095022.1079364-3-tz.stoyanov@gmail.com > previously generated output like "registering plugin" is no longer > displayed. This change makes it so that if perf's verbose debug output > is enabled then the debug and info libtraceevent messages can be > displayed. > The code is conditionally enabled based on the libtraceevent version as > discussed in the RFC: > https://lore.kernel.org/lkml/20210610060643.595673-1-irogers@google.com/ > > v2. Is a rebase and handles the case of building without > LIBTRACEEVENT_DYNAMIC. It breaks build with LIBTRACEEVENT_DYNAMIC and version 1.3.0: > util/debug.c: In function ‘perf_debug_option’: > util/debug.c:243:17: error: implicit declaration of function ‘tep_set_loglevel’ [-Werror=implicit-function-declaration] > 243 | tep_set_loglevel(TEP_LOG_INFO); > | ^~~~~~~~~~~~~~~~ > util/debug.c:243:34: error: ‘TEP_LOG_INFO’ undeclared (first use in this function); did you mean ‘TEP_PRINT_INFO’? > 243 | tep_set_loglevel(TEP_LOG_INFO); > | ^~~~~~~~~~~~ > | TEP_PRINT_INFO > util/debug.c:243:34: note: each undeclared identifier is reported only once for each function it appears in > util/debug.c:245:34: error: ‘TEP_LOG_DEBUG’ undeclared (first use in this function) > 245 | tep_set_loglevel(TEP_LOG_DEBUG); > | ^~~~~~~~~~~~~ > util/debug.c:247:34: error: ‘TEP_LOG_ALL’ undeclared (first use in this function) > 247 | tep_set_loglevel(TEP_LOG_ALL); > | ^~~~~~~~~~~ It is because the gcc's command line looks like: gcc ... -I/home/abuild/rpmbuild/BUILD/tools/lib/ ... -DLIBTRACEEVENT_VERSION=65790 ... So: > --- a/tools/perf/util/debug.c > +++ b/tools/perf/util/debug.c > @@ -24,6 +24,16 @@ > #include "util/parse-sublevel-options.h" > > #include <linux/ctype.h> > +#include <traceevent/event-parse.h> /home/abuild/rpmbuild/BUILD/tools/lib/traceevent/event-parse.h is taken here. > @@ -228,6 +238,15 @@ int perf_debug_option(const char *str) > /* Allow only verbose value in range (0, 10), otherwise set 0. */ > verbose = (verbose < 0) || (verbose > 10) ? 0 : verbose; > > +#if MAKE_LIBTRACEEVENT_VERSION(1, 3, 0) <= LIBTRACEEVENT_VERSION But -DLIBTRACEEVENT_VERSION=65790 is taken here (which is 1.3.0). > + if (verbose == 1) > + tep_set_loglevel(TEP_LOG_INFO); > + else if (verbose == 2) > + tep_set_loglevel(TEP_LOG_DEBUG); > + else if (verbose >= 3) > + tep_set_loglevel(TEP_LOG_ALL); > +#endif > + > return 0; > } > regards,
Ping -- perf build is still broken in 5.16-rc8 due to this. On 16. 12. 21, 9:07, Jiri Slaby wrote: > Hi, > > On 23. 09. 21, 2:10, Ian Rogers wrote: >> libtraceevent has added more levels of debug printout and with changes >> like: >> https://lore.kernel.org/linux-trace-devel/20210507095022.1079364-3-tz.stoyanov@gmail.com >> >> previously generated output like "registering plugin" is no longer >> displayed. This change makes it so that if perf's verbose debug output >> is enabled then the debug and info libtraceevent messages can be >> displayed. >> The code is conditionally enabled based on the libtraceevent version as >> discussed in the RFC: >> https://lore.kernel.org/lkml/20210610060643.595673-1-irogers@google.com/ >> >> v2. Is a rebase and handles the case of building without >> LIBTRACEEVENT_DYNAMIC. > > It breaks build with LIBTRACEEVENT_DYNAMIC and version 1.3.0: > > util/debug.c: In function ‘perf_debug_option’: > > util/debug.c:243:17: error: implicit declaration of function > ‘tep_set_loglevel’ [-Werror=implicit-function-declaration] > > 243 | tep_set_loglevel(TEP_LOG_INFO); > > | ^~~~~~~~~~~~~~~~ > > util/debug.c:243:34: error: ‘TEP_LOG_INFO’ undeclared (first use in > this function); did you mean ‘TEP_PRINT_INFO’? > > 243 | tep_set_loglevel(TEP_LOG_INFO); > > | ^~~~~~~~~~~~ > > | TEP_PRINT_INFO > > util/debug.c:243:34: note: each undeclared identifier is reported > only once for each function it appears in > > util/debug.c:245:34: error: ‘TEP_LOG_DEBUG’ undeclared (first use in > this function) > > 245 | tep_set_loglevel(TEP_LOG_DEBUG); > > | ^~~~~~~~~~~~~ > > util/debug.c:247:34: error: ‘TEP_LOG_ALL’ undeclared (first use in > this function) > > 247 | tep_set_loglevel(TEP_LOG_ALL); > > | ^~~~~~~~~~~ > > It is because the gcc's command line looks like: > gcc > ... > -I/home/abuild/rpmbuild/BUILD/tools/lib/ > ... > -DLIBTRACEEVENT_VERSION=65790 > ... > > So: > > >> --- a/tools/perf/util/debug.c >> +++ b/tools/perf/util/debug.c >> @@ -24,6 +24,16 @@ >> #include "util/parse-sublevel-options.h" >> #include <linux/ctype.h> >> +#include <traceevent/event-parse.h> > > /home/abuild/rpmbuild/BUILD/tools/lib/traceevent/event-parse.h is taken > here. > >> @@ -228,6 +238,15 @@ int perf_debug_option(const char *str) >> /* Allow only verbose value in range (0, 10), otherwise set 0. */ >> verbose = (verbose < 0) || (verbose > 10) ? 0 : verbose; >> +#if MAKE_LIBTRACEEVENT_VERSION(1, 3, 0) <= LIBTRACEEVENT_VERSION > > But > -DLIBTRACEEVENT_VERSION=65790 > is taken here (which is 1.3.0). > >> + if (verbose == 1) >> + tep_set_loglevel(TEP_LOG_INFO); >> + else if (verbose == 2) >> + tep_set_loglevel(TEP_LOG_DEBUG); >> + else if (verbose >= 3) >> + tep_set_loglevel(TEP_LOG_ALL); >> +#endif >> + >> return 0; >> } > > regards,
Em Mon, Jan 03, 2022 at 09:25:26AM +0100, Jiri Slaby escreveu: > Ping -- perf build is still broken in 5.16-rc8 due to this. Back from year end vacation, I'll try to fix this, from a quick read it uses in tree tools/lib/traceevent headers while building with the distro provided libtraceevent-devel package. - Arnaldo > On 16. 12. 21, 9:07, Jiri Slaby wrote: > > Hi, > > > > On 23. 09. 21, 2:10, Ian Rogers wrote: > > > libtraceevent has added more levels of debug printout and with changes > > > like: > > > https://lore.kernel.org/linux-trace-devel/20210507095022.1079364-3-tz.stoyanov@gmail.com > > > > > > previously generated output like "registering plugin" is no longer > > > displayed. This change makes it so that if perf's verbose debug output > > > is enabled then the debug and info libtraceevent messages can be > > > displayed. > > > The code is conditionally enabled based on the libtraceevent version as > > > discussed in the RFC: > > > https://lore.kernel.org/lkml/20210610060643.595673-1-irogers@google.com/ > > > > > > v2. Is a rebase and handles the case of building without > > > LIBTRACEEVENT_DYNAMIC. > > > > It breaks build with LIBTRACEEVENT_DYNAMIC and version 1.3.0: > > > util/debug.c: In function ‘perf_debug_option’: > > > util/debug.c:243:17: error: implicit declaration of function > > ‘tep_set_loglevel’ [-Werror=implicit-function-declaration] > > > 243 | tep_set_loglevel(TEP_LOG_INFO); > > > | ^~~~~~~~~~~~~~~~ > > > util/debug.c:243:34: error: ‘TEP_LOG_INFO’ undeclared (first use in > > this function); did you mean ‘TEP_PRINT_INFO’? > > > 243 | tep_set_loglevel(TEP_LOG_INFO); > > > | ^~~~~~~~~~~~ > > > | TEP_PRINT_INFO > > > util/debug.c:243:34: note: each undeclared identifier is reported > > only once for each function it appears in > > > util/debug.c:245:34: error: ‘TEP_LOG_DEBUG’ undeclared (first use in > > this function) > > > 245 | tep_set_loglevel(TEP_LOG_DEBUG); > > > | ^~~~~~~~~~~~~ > > > util/debug.c:247:34: error: ‘TEP_LOG_ALL’ undeclared (first use in > > this function) > > > 247 | tep_set_loglevel(TEP_LOG_ALL); > > > | ^~~~~~~~~~~ > > > > It is because the gcc's command line looks like: > > gcc > > ... > > -I/home/abuild/rpmbuild/BUILD/tools/lib/ > > ... > > -DLIBTRACEEVENT_VERSION=65790 > > ... > > > > So: > > > > > > > --- a/tools/perf/util/debug.c > > > +++ b/tools/perf/util/debug.c > > > @@ -24,6 +24,16 @@ > > > #include "util/parse-sublevel-options.h" > > > #include <linux/ctype.h> > > > +#include <traceevent/event-parse.h> > > > > /home/abuild/rpmbuild/BUILD/tools/lib/traceevent/event-parse.h is taken > > here. > > > > > @@ -228,6 +238,15 @@ int perf_debug_option(const char *str) > > > /* Allow only verbose value in range (0, 10), otherwise set 0. */ > > > verbose = (verbose < 0) || (verbose > 10) ? 0 : verbose; > > > +#if MAKE_LIBTRACEEVENT_VERSION(1, 3, 0) <= LIBTRACEEVENT_VERSION > > > > But > > -DLIBTRACEEVENT_VERSION=65790 > > is taken here (which is 1.3.0). > > > > > + if (verbose == 1) > > > + tep_set_loglevel(TEP_LOG_INFO); > > > + else if (verbose == 2) > > > + tep_set_loglevel(TEP_LOG_DEBUG); > > > + else if (verbose >= 3) > > > + tep_set_loglevel(TEP_LOG_ALL); > > > +#endif > > > + > > > return 0; > > > } > > > > regards, > > > -- > js > suse labs
On Mon, 3 Jan 2022 12:04:53 -0300 Arnaldo Carvalho de Melo <acme@kernel.org> wrote: > Em Mon, Jan 03, 2022 at 09:25:26AM +0100, Jiri Slaby escreveu: > > Ping -- perf build is still broken in 5.16-rc8 due to this. > > Back from year end vacation, I'll try to fix this, from a quick read it > uses in tree tools/lib/traceevent headers while building with the distro > provided libtraceevent-devel package. I'll try to take a look at this too. I'm pretty much done with my office renovation, and can now do some volunteer work ;-) -- Steve
Em Mon, Jan 03, 2022 at 09:25:26AM +0100, Jiri Slaby escreveu: > Ping -- perf build is still broken in 5.16-rc8 due to this. > > On 16. 12. 21, 9:07, Jiri Slaby wrote: > > Hi, > > > > On 23. 09. 21, 2:10, Ian Rogers wrote: > > > libtraceevent has added more levels of debug printout and with changes > > > like: > > > https://lore.kernel.org/linux-trace-devel/20210507095022.1079364-3-tz.stoyanov@gmail.com > > > > > > previously generated output like "registering plugin" is no longer > > > displayed. This change makes it so that if perf's verbose debug output > > > is enabled then the debug and info libtraceevent messages can be > > > displayed. > > > The code is conditionally enabled based on the libtraceevent version as > > > discussed in the RFC: > > > https://lore.kernel.org/lkml/20210610060643.595673-1-irogers@google.com/ > > > > > > v2. Is a rebase and handles the case of building without > > > LIBTRACEEVENT_DYNAMIC. > > > > It breaks build with LIBTRACEEVENT_DYNAMIC and version 1.3.0: > > > util/debug.c: In function ‘perf_debug_option’: > > > util/debug.c:243:17: error: implicit declaration of function > > ‘tep_set_loglevel’ [-Werror=implicit-function-declaration] > > > 243 | tep_set_loglevel(TEP_LOG_INFO); > > > | ^~~~~~~~~~~~~~~~ > > > util/debug.c:243:34: error: ‘TEP_LOG_INFO’ undeclared (first use in > > this function); did you mean ‘TEP_PRINT_INFO’? > > > 243 | tep_set_loglevel(TEP_LOG_INFO); > > > | ^~~~~~~~~~~~ > > > | TEP_PRINT_INFO > > > util/debug.c:243:34: note: each undeclared identifier is reported > > only once for each function it appears in > > > util/debug.c:245:34: error: ‘TEP_LOG_DEBUG’ undeclared (first use in > > this function) > > > 245 | tep_set_loglevel(TEP_LOG_DEBUG); > > > | ^~~~~~~~~~~~~ > > > util/debug.c:247:34: error: ‘TEP_LOG_ALL’ undeclared (first use in > > this function) > > > 247 | tep_set_loglevel(TEP_LOG_ALL); > > > | ^~~~~~~~~~~ > > > > It is because the gcc's command line looks like: > > gcc > > ... > > -I/home/abuild/rpmbuild/BUILD/tools/lib/ > > ... > > -DLIBTRACEEVENT_VERSION=65790 > > ... > > > > So: > > > > > > > --- a/tools/perf/util/debug.c > > > +++ b/tools/perf/util/debug.c > > > @@ -24,6 +24,16 @@ > > > #include "util/parse-sublevel-options.h" > > > #include <linux/ctype.h> > > > +#include <traceevent/event-parse.h> > > > > /home/abuild/rpmbuild/BUILD/tools/lib/traceevent/event-parse.h is taken > > here. > > > > > @@ -228,6 +238,15 @@ int perf_debug_option(const char *str) > > > /* Allow only verbose value in range (0, 10), otherwise set 0. */ > > > verbose = (verbose < 0) || (verbose > 10) ? 0 : verbose; > > > +#if MAKE_LIBTRACEEVENT_VERSION(1, 3, 0) <= LIBTRACEEVENT_VERSION > > > > But > > -DLIBTRACEEVENT_VERSION=65790 > > is taken here (which is 1.3.0). > > > > > + if (verbose == 1) > > > + tep_set_loglevel(TEP_LOG_INFO); > > > + else if (verbose == 2) > > > + tep_set_loglevel(TEP_LOG_DEBUG); > > > + else if (verbose >= 3) > > > + tep_set_loglevel(TEP_LOG_ALL); > > > +#endif > > > + > > > return 0; > > > } Tried reproducing here on fedora 34 but it is at 1.1.1: make: Leaving directory '/var/home/acme/git/perf/tools/perf' Performance counter stats for 'make -k LIBTRACEEVENT_DYNAMIC=1 BUILD_BPF_SKEL=1 CORESIGHT=1 PYTHON=python3 O=/tmp/build/perf -C tools/perf install-bin': 397,176,418,790 cycles:u 493,885,896,752 instructions:u # 1.24 insn per cycle 8.664957770 seconds time elapsed 97.706894000 seconds user 23.714293000 seconds sys On branch perf/urgent Your branch is ahead of 'quaco/perf/urgent' by 369 commits. (use "git push" to publish your local commits) nothing to commit, working tree clean 19: 'import perf' in python : Ok ⬢[acme@toolbox perf]$ git diff ⬢[acme@toolbox perf]$ rpm -q libtraceevent-devel libtraceevent-devel-1.1.1-2.fc34.x86_64 Lemme see in a container so that I can also test the fix. - Arnaldo
On 03. 01. 22, 16:15, Arnaldo Carvalho de Melo wrote:
> Tried reproducing here on fedora 34 but it is at 1.1.1:
FWIW, it's openSUSE Tumbleweed:
$ rpm -q libtraceevent1
libtraceevent1-1.3.0-1.3.x86_64
thanks,
On Mon, Jan 3, 2022 at 10:17 PM Jiri Slaby <jirislaby@kernel.org> wrote: > > On 03. 01. 22, 16:15, Arnaldo Carvalho de Melo wrote: > > Tried reproducing here on fedora 34 but it is at 1.1.1: > > FWIW, it's openSUSE Tumbleweed: > $ rpm -q libtraceevent1 > libtraceevent1-1.3.0-1.3.x86_64 I was able to reproduce in an opensuse tumbleweed container. $ pkg-config --modversion libtraceevent 1.3.0 $ make -C tools/perf O=/tmp/perf V=1 LIBTRACEEVENT_DYNAMIC=1 ... util/debug.c:245:34: error: 'TEP_LOG_DEBUG' undeclared (first use in this function) 245 | tep_set_loglevel(TEP_LOG_DEBUG); | ^~~~~~~~~~~~~ util/debug.c:247:34: error: 'TEP_LOG_ALL' undeclared (first use in this function) 247 | tep_set_loglevel(TEP_LOG_ALL); | ^~~~~~~~~~~ When I look at libtraceevent tagged as 1.3.0 I see TEP_LOG_ALL and TEP_LOG_DEBUG: https://git.kernel.org/pub/scm/libs/libtrace/libtraceevent.git/tree/src/event-parse.h?h=libtraceevent-1.3.0#n760 and checking opensuse's event-parse.h I see the values there. This makes it look like we're using the kernel libtraceevent header file (version 1.1.0) rather than the system one. The command line is: gcc -Wp,-MD,/tmp/perf/util/.debug.o.d -Wp,-MT,/tmp/perf/util/debug.o -Wbad-function-cast -Wdeclaration-after-statement -Wformat-security -Wformat-y2k -Winit-self -Wmissing-declarations -Wmissing-prototypes -Wno-system-headers -Wold-style-definition -Wpacked -Wredundant-decls -Wstrict-prototypes -Wswitch-default -Wswitch-enum -Wundef -Wwrite-strings -Wformat -Wno-type-limits -Wstrict-aliasing=3 -Wshadow -DHAVE_SYSCALL_TABLE_SUPPORT -DHAVE_ARCH_X86_64_SUPPORT -I/tmp/perf/arch/x86/include/generated -DHAVE_PERF_REGS_SUPPORT -DHAVE_ARCH_REGS_QUERY_REGISTER_OFFSET -Werror -O6 -fno-omit-frame-pointer -ggdb3 -funwind-tables -Wall -Wextra -std=gnu99 -fstack-protector-all -D_FORTIFY_SOURCE=2 -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -I/kernel-src/tools/lib/perf/include -I/kernel-src/tools/perf/util/include -I/kernel-src/tools/perf/arch/x86/include -I/kernel-src/tools/include/ -I/kernel-src/tools/arch/x86/include/uapi -I/kernel-src/tools/include/uapi -I/kernel-src/tools/arch/x86/include/ -I/kernel-src/tools/arch/x86/ -I/tmp/perf//util -I/tmp/perf/ -I/kernel-src/tools/perf/util -I/kernel-src/tools/perf -I/kernel-src/tools/lib/ -DHAVE_PTHREAD_ATTR_SETAFFINITY_NP -DHAVE_PTHREAD_BARRIER -DHAVE_EVENTFD_SUPPORT -DHAVE_GET_CURRENT_DIR_NAME -DHAVE_GETTID -DHAVE_FILE_HANDLE -DHAVE_GLIBC_SUPPORT -DHAVE_AIO_SUPPORT -DHAVE_SCHED_GETCPU_SUPPORT -DHAVE_SETNS_SUPPORT -DHAVE_LIBELF_SUPPORT -DHAVE_ELF_GETPHDRNUM_SUPPORT -DHAVE_GELF_GETNOTE_SUPPORT -DHAVE_ELF_GETSHDRSTRNDX_SUPPORT -DHAVE_LIBBPF_SUPPORT -DHAVE_JITDUMP -DHAVE_LIBPERL_SUPPORT -DHAVE_TIMERFD_SUPPORT -DNO_LIBPYTHON -DNO_DEMANGLE -DHAVE_ZLIB_SUPPORT -DHAVE_BACKTRACE_SUPPORT -DHAVE_KVM_STAT_SUPPORT -DHAVE_AUXTRACE_SUPPORT -DLIBTRACEEVENT_VERSION=65790 -I/tmp/perf/ -D"BUILD_STR(s)=#s" -c -o /tmp/perf/util/debug.o util/debug.c The #include is: #include <traceevent/event-parse.h> The system header is at: /usr/include/traceevent/event-parse.h The kernel one is at /kernel-src/tools/lib/traceevent/event-parse.h. Adding a #error to that confirms it is indeed being picked up. Checking with: https://gcc.gnu.org/onlinedocs/gcc/Directory-Options.html it is true from case 3 that -I: 3. Directories specified with -I options are scanned in left-to-right order. has priority over system: 4. Directories specified with -isystem options are scanned in left-to-right order. 5. Standard system directories are scanned. Which means we need to lower the priority of /kernel-src/tools/lib/traceevent or raise the priority of /usr/include/traceevent/. I thought I might be able to hack this with EXTRA_CFLAGS="-I/usr/include" but it still fails even though the -I is by my reading on the left of tools/lib: gcc -Wp,-MD,/tmp/perf/util/.debug.o.d -Wp,-MT,/tmp/perf/util/debug.o -I/usr/include -Wbad-function-cast -Wdeclaration-after-statement -Wformat-security -Wformat-y2k -Winit-self -Wmissing-declarations -Wmissing-prototypes -Wno-system-headers -Wold-style-definition -Wpacked -Wredundant-decls -Wstrict-prototypes -Wswitch-default -Wswitch-enum -Wundef -Wwrite-strings -Wformat -Wno-type-limits -Wstrict-aliasing=3 -Wshadow -DHAVE_SYSCALL_TABLE_SUPPORT -DHAVE_ARCH_X86_64_SUPPORT -I/tmp/perf/arch/x86/include/generated -DHAVE_PERF_REGS_SUPPORT -DHAVE_ARCH_REGS_QUERY_REGISTER_OFFSET -Werror -O6 -fno-omit-frame-pointer -ggdb3 -funwind-tables -Wall -Wextra -std=gnu99 -fstack-protector-all -D_FORTIFY_SOURCE=2 -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -I/kernel-src/tools/lib/perf/include -I/kernel-src/tools/perf/util/include -I/kernel-src/tools/perf/arch/x86/include -I/kernel-src/tools/include/ -I/kernel-src/tools/arch/x86/include/uapi -I/kernel-src/tools/include/uapi -I/kernel-src/tools/arch/x86/include/ -I/kernel-src/tools/arch/x86/ -I/tmp/perf//util -I/tmp/perf/ -I/kernel-src/tools/perf/util -I/kernel-src/tools/perf -I/kernel-src/tools/lib/ -DHAVE_PTHREAD_ATTR_SETAFFINITY_NP -DHAVE_PTHREAD_BARRIER -DHAVE_EVENTFD_SUPPORT -DHAVE_GET_CURRENT_DIR_NAME -DHAVE_GETTID -DHAVE_FILE_HANDLE -DHAVE_GLIBC_SUPPORT -DHAVE_AIO_SUPPORT -DHAVE_SCHED_GETCPU_SUPPORT -DHAVE_SETNS_SUPPORT -DHAVE_LIBELF_SUPPORT -DHAVE_ELF_GETPHDRNUM_SUPPORT -DHAVE_GELF_GETNOTE_SUPPORT -DHAVE_ELF_GETSHDRSTRNDX_SUPPORT -DHAVE_LIBBPF_SUPPORT -DHAVE_JITDUMP -DHAVE_LIBPERL_SUPPORT -DHAVE_TIMERFD_SUPPORT -DNO_LIBPYTHON -DNO_DEMANGLE -DHAVE_ZLIB_SUPPORT -DHAVE_BACKTRACE_SUPPORT -DHAVE_KVM_STAT_SUPPORT -DHAVE_AUXTRACE_SUPPORT -DLIBTRACEEVENT_VERSION=65790 -I/tmp/perf/ -D"BUILD_STR(s)=#s" -c -o /tmp/perf/util/debug.o util/debug.c Probably some sysroot related magic. Anyway, doing this 1 line fix solves it for me: ----- $ git diff diff --git a/tools/perf/Makefile.config b/tools/perf/Makefile.config index 96ad944ca6a8..0627286380fa 100644 --- a/tools/perf/Makefile.config +++ b/tools/perf/Makefile.config @@ -346,7 +346,7 @@ endif INC_FLAGS += -I$(src-perf)/util INC_FLAGS += -I$(src-perf) -INC_FLAGS += -I$(srctree)/tools/lib/ +INC_FLAGS += -idirafter$(srctree)/tools/lib/ CORE_CFLAGS += -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE ----- I'll send out a patch. Sorry for the trouble. Thanks, Ian
diff --git a/tools/perf/util/debug.c b/tools/perf/util/debug.c index 2c06abf6dcd2..c7a9fa0ffae9 100644 --- a/tools/perf/util/debug.c +++ b/tools/perf/util/debug.c @@ -24,6 +24,16 @@ #include "util/parse-sublevel-options.h" #include <linux/ctype.h> +#include <traceevent/event-parse.h> + +#define MAKE_LIBTRACEEVENT_VERSION(a, b, c) ((a)*255*255+(b)*255+(c)) +#ifndef LIBTRACEEVENT_VERSION +/* + * If LIBTRACEEVENT_VERSION wasn't computed then set to version 1.1.0 that ships + * with the Linux kernel tools. + */ +#define LIBTRACEEVENT_VERSION MAKE_LIBTRACEEVENT_VERSION(1, 1, 0) +#endif int verbose; int debug_peo_args; @@ -228,6 +238,15 @@ int perf_debug_option(const char *str) /* Allow only verbose value in range (0, 10), otherwise set 0. */ verbose = (verbose < 0) || (verbose > 10) ? 0 : verbose; +#if MAKE_LIBTRACEEVENT_VERSION(1, 3, 0) <= LIBTRACEEVENT_VERSION + if (verbose == 1) + tep_set_loglevel(TEP_LOG_INFO); + else if (verbose == 2) + tep_set_loglevel(TEP_LOG_DEBUG); + else if (verbose >= 3) + tep_set_loglevel(TEP_LOG_ALL); +#endif + return 0; }
libtraceevent has added more levels of debug printout and with changes like: https://lore.kernel.org/linux-trace-devel/20210507095022.1079364-3-tz.stoyanov@gmail.com previously generated output like "registering plugin" is no longer displayed. This change makes it so that if perf's verbose debug output is enabled then the debug and info libtraceevent messages can be displayed. The code is conditionally enabled based on the libtraceevent version as discussed in the RFC: https://lore.kernel.org/lkml/20210610060643.595673-1-irogers@google.com/ v2. Is a rebase and handles the case of building without LIBTRACEEVENT_DYNAMIC. Signed-off-by: Ian Rogers <irogers@google.com> --- tools/perf/util/debug.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+)