Commit 85c66be1 authored by Borislav Petkov's avatar Borislav Petkov Committed by Arnaldo Carvalho de Melo

perf tools: Introduce tools/lib/lk library

This introduces the tools/lib/lk library, that will gradually have the
routines that now are used in tools/perf/ and other tools and that can
be shared.

Start by carving out debugfs routines for general use.
Signed-off-by: default avatarBorislav Petkov <bp@suse.de>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Steven Rostedt <rostedt@goodmis.org>
Link: http://lkml.kernel.org/r/1361374353-30385-5-git-send-email-bp@alien8.de
[ committer note: Add tools/lib/lk/ to perf's MANIFEST so that its tarballs continue to build ]
Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent 9687b89d
...@@ -33,7 +33,13 @@ help: ...@@ -33,7 +33,13 @@ help:
cpupower: FORCE cpupower: FORCE
$(call descend,power/$@) $(call descend,power/$@)
firewire lguest perf usb virtio vm: FORCE firewire guest usb virtio vm: FORCE
$(call descend,$@)
liblk: FORCE
$(call descend,lib/lk)
perf: liblk FORCE
$(call descend,$@) $(call descend,$@)
selftests: FORCE selftests: FORCE
...@@ -61,7 +67,13 @@ install: cpupower_install firewire_install lguest_install perf_install \ ...@@ -61,7 +67,13 @@ install: cpupower_install firewire_install lguest_install perf_install \
cpupower_clean: cpupower_clean:
$(call descend,power/cpupower,clean) $(call descend,power/cpupower,clean)
firewire_clean lguest_clean perf_clean usb_clean virtio_clean vm_clean: firewire_clean lguest_clean usb_clean virtio_clean vm_clean:
$(call descend,$(@:_clean=),clean)
liblk_clean:
$(call descend,lib/lk,clean)
perf_clean: liblk_clean
$(call descend,$(@:_clean=),clean) $(call descend,$(@:_clean=),clean)
selftests_clean: selftests_clean:
......
include ../../scripts/Makefile.include
# guard against environment variables
LIB_H=
LIB_OBJS=
LIB_H += debugfs.h
LIB_OBJS += $(OUTPUT)debugfs.o
LIBFILE = liblk.a
CFLAGS = -ggdb3 -Wall -Wextra -std=gnu99 -Werror $(CFLAGS_OPTIMIZE) -D_FORTIFY_SOURCE=2 $(EXTRA_WARNINGS) $(EXTRA_CFLAGS) -fPIC
EXTLIBS = -lpthread -lrt -lelf -lm
ALL_CFLAGS = $(CFLAGS) $(BASIC_CFLAGS) -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64
ALL_LDFLAGS = $(LDFLAGS)
RM = rm -f
$(LIBFILE): $(LIB_OBJS)
$(QUIET_AR)$(RM) $@ && $(AR) rcs $(OUTPUT)$@ $(LIB_OBJS)
$(LIB_OBJS): $(LIB_H)
$(OUTPUT)%.o: %.c
$(QUIET_CC)$(CC) -o $@ -c $(ALL_CFLAGS) $<
$(OUTPUT)%.s: %.c
$(QUIET_CC)$(CC) -S $(ALL_CFLAGS) $<
$(OUTPUT)%.o: %.S
$(QUIET_CC)$(CC) -o $@ -c $(ALL_CFLAGS) $<
clean:
$(RM) $(LIB_OBJS) $(LIBFILE)
.PHONY: clean
#include "util.h" #include <errno.h>
#include "debugfs.h" #include <stdio.h>
#include "cache.h" #include <stdlib.h>
#include <string.h>
#include <linux/kernel.h> #include <stdbool.h>
#include <sys/vfs.h>
#include <sys/mount.h> #include <sys/mount.h>
#include <linux/magic.h>
#include <linux/kernel.h>
#include "debugfs.h"
char debugfs_mountpoint[PATH_MAX + 1] = "/sys/kernel/debug"; char debugfs_mountpoint[PATH_MAX + 1] = "/sys/kernel/debug";
char tracing_events_path[PATH_MAX + 1] = "/sys/kernel/debug/tracing/events"; char tracing_events_path[PATH_MAX + 1] = "/sys/kernel/debug/tracing/events";
static const char *debugfs_known_mountpoints[] = { static const char * const debugfs_known_mountpoints[] = {
"/sys/kernel/debug/", "/sys/kernel/debug/",
"/debug/", "/debug/",
0, 0,
...@@ -19,12 +24,12 @@ static bool debugfs_found; ...@@ -19,12 +24,12 @@ static bool debugfs_found;
/* find the path to the mounted debugfs */ /* find the path to the mounted debugfs */
const char *debugfs_find_mountpoint(void) const char *debugfs_find_mountpoint(void)
{ {
const char **ptr; const char * const *ptr;
char type[100]; char type[100];
FILE *fp; FILE *fp;
if (debugfs_found) if (debugfs_found)
return (const char *) debugfs_mountpoint; return (const char *)debugfs_mountpoint;
ptr = debugfs_known_mountpoints; ptr = debugfs_known_mountpoints;
while (*ptr) { while (*ptr) {
......
#ifndef __DEBUGFS_H__ #ifndef __LK_DEBUGFS_H__
#define __DEBUGFS_H__ #define __LK_DEBUGFS_H__
#define _STR(x) #x
#define STR(x) _STR(x)
/*
* On most systems <limits.h> would have given us this, but not on some systems
* (e.g. GNU/Hurd).
*/
#ifndef PATH_MAX
#define PATH_MAX 4096
#endif
#ifndef DEBUGFS_MAGIC
#define DEBUGFS_MAGIC 0x64626720
#endif
#ifndef PERF_DEBUGFS_ENVIRONMENT
#define PERF_DEBUGFS_ENVIRONMENT "PERF_DEBUGFS_DIR"
#endif
const char *debugfs_find_mountpoint(void); const char *debugfs_find_mountpoint(void);
int debugfs_valid_mountpoint(const char *debugfs); int debugfs_valid_mountpoint(const char *debugfs);
...@@ -9,4 +28,4 @@ void debugfs_set_path(const char *mountpoint); ...@@ -9,4 +28,4 @@ void debugfs_set_path(const char *mountpoint);
extern char debugfs_mountpoint[]; extern char debugfs_mountpoint[];
extern char tracing_events_path[]; extern char tracing_events_path[];
#endif /* __DEBUGFS_H__ */ #endif /* __LK_DEBUGFS_H__ */
tools/perf tools/perf
tools/scripts tools/scripts
tools/lib/traceevent tools/lib/traceevent
tools/lib/lk
include/linux/const.h include/linux/const.h
include/linux/perf_event.h include/linux/perf_event.h
include/linux/rbtree.h include/linux/rbtree.h
......
...@@ -215,6 +215,7 @@ BASIC_CFLAGS = \ ...@@ -215,6 +215,7 @@ BASIC_CFLAGS = \
-Iutil \ -Iutil \
-I. \ -I. \
-I$(TRACE_EVENT_DIR) \ -I$(TRACE_EVENT_DIR) \
-I../lib/ \
-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE
BASIC_LDFLAGS = BASIC_LDFLAGS =
...@@ -240,19 +241,28 @@ SCRIPT_SH += perf-archive.sh ...@@ -240,19 +241,28 @@ SCRIPT_SH += perf-archive.sh
grep-libs = $(filter -l%,$(1)) grep-libs = $(filter -l%,$(1))
strip-libs = $(filter-out -l%,$(1)) strip-libs = $(filter-out -l%,$(1))
LK_DIR = ../lib/lk/
TRACE_EVENT_DIR = ../lib/traceevent/ TRACE_EVENT_DIR = ../lib/traceevent/
LK_PATH=$(LK_DIR)
ifneq ($(OUTPUT),) ifneq ($(OUTPUT),)
TE_PATH=$(OUTPUT) TE_PATH=$(OUTPUT)
ifneq ($(subdir),)
LK_PATH=$(OUTPUT)$(LK_DIR)
else
LK_PATH=$(OUTPUT)
endif
else else
TE_PATH=$(TRACE_EVENT_DIR) TE_PATH=$(TRACE_EVENT_DIR)
endif endif
LIBTRACEEVENT = $(TE_PATH)libtraceevent.a LIBTRACEEVENT = $(TE_PATH)libtraceevent.a
TE_LIB := -L$(TE_PATH) -ltraceevent
export LIBTRACEEVENT export LIBTRACEEVENT
LIBLK = $(LK_PATH)liblk.a
export LIBLK
# python extension build directories # python extension build directories
PYTHON_EXTBUILD := $(OUTPUT)python_ext_build/ PYTHON_EXTBUILD := $(OUTPUT)python_ext_build/
PYTHON_EXTBUILD_LIB := $(PYTHON_EXTBUILD)lib/ PYTHON_EXTBUILD_LIB := $(PYTHON_EXTBUILD)lib/
...@@ -355,7 +365,6 @@ LIB_H += util/cache.h ...@@ -355,7 +365,6 @@ LIB_H += util/cache.h
LIB_H += util/callchain.h LIB_H += util/callchain.h
LIB_H += util/build-id.h LIB_H += util/build-id.h
LIB_H += util/debug.h LIB_H += util/debug.h
LIB_H += util/debugfs.h
LIB_H += util/sysfs.h LIB_H += util/sysfs.h
LIB_H += util/pmu.h LIB_H += util/pmu.h
LIB_H += util/event.h LIB_H += util/event.h
...@@ -416,7 +425,6 @@ LIB_OBJS += $(OUTPUT)util/annotate.o ...@@ -416,7 +425,6 @@ LIB_OBJS += $(OUTPUT)util/annotate.o
LIB_OBJS += $(OUTPUT)util/build-id.o LIB_OBJS += $(OUTPUT)util/build-id.o
LIB_OBJS += $(OUTPUT)util/config.o LIB_OBJS += $(OUTPUT)util/config.o
LIB_OBJS += $(OUTPUT)util/ctype.o LIB_OBJS += $(OUTPUT)util/ctype.o
LIB_OBJS += $(OUTPUT)util/debugfs.o
LIB_OBJS += $(OUTPUT)util/sysfs.o LIB_OBJS += $(OUTPUT)util/sysfs.o
LIB_OBJS += $(OUTPUT)util/pmu.o LIB_OBJS += $(OUTPUT)util/pmu.o
LIB_OBJS += $(OUTPUT)util/environment.o LIB_OBJS += $(OUTPUT)util/environment.o
...@@ -536,7 +544,7 @@ BUILTIN_OBJS += $(OUTPUT)builtin-kvm.o ...@@ -536,7 +544,7 @@ BUILTIN_OBJS += $(OUTPUT)builtin-kvm.o
BUILTIN_OBJS += $(OUTPUT)builtin-inject.o BUILTIN_OBJS += $(OUTPUT)builtin-inject.o
BUILTIN_OBJS += $(OUTPUT)tests/builtin-test.o BUILTIN_OBJS += $(OUTPUT)tests/builtin-test.o
PERFLIBS = $(LIB_FILE) $(LIBTRACEEVENT) PERFLIBS = $(LIB_FILE) $(LIBLK) $(LIBTRACEEVENT)
# #
# Platform specific tweaks # Platform specific tweaks
...@@ -1051,6 +1059,18 @@ $(LIBTRACEEVENT): ...@@ -1051,6 +1059,18 @@ $(LIBTRACEEVENT):
$(LIBTRACEEVENT)-clean: $(LIBTRACEEVENT)-clean:
$(QUIET_SUBDIR0)$(TRACE_EVENT_DIR) $(QUIET_SUBDIR1) O=$(OUTPUT) clean $(QUIET_SUBDIR0)$(TRACE_EVENT_DIR) $(QUIET_SUBDIR1) O=$(OUTPUT) clean
# if subdir is set, we've been called from above so target has been built
# already
$(LIBLK):
ifeq ($(subdir),)
$(QUIET_SUBDIR0)$(LK_DIR) $(QUIET_SUBDIR1) O=$(OUTPUT) liblk.a
endif
$(LIBLK)-clean:
ifeq ($(subdir),)
$(QUIET_SUBDIR0)$(LK_DIR) $(QUIET_SUBDIR1) O=$(OUTPUT) clean
endif
help: help:
@echo 'Perf make targets:' @echo 'Perf make targets:'
@echo ' doc - make *all* documentation (see below)' @echo ' doc - make *all* documentation (see below)'
...@@ -1171,7 +1191,7 @@ $(INSTALL_DOC_TARGETS): ...@@ -1171,7 +1191,7 @@ $(INSTALL_DOC_TARGETS):
### Cleaning rules ### Cleaning rules
clean: $(LIBTRACEEVENT)-clean clean: $(LIBTRACEEVENT)-clean $(LIBLK)-clean
$(RM) $(LIB_OBJS) $(BUILTIN_OBJS) $(LIB_FILE) $(OUTPUT)perf-archive $(OUTPUT)perf.o $(LANG_BINDINGS) $(RM) $(LIB_OBJS) $(BUILTIN_OBJS) $(LIB_FILE) $(OUTPUT)perf-archive $(OUTPUT)perf.o $(LANG_BINDINGS)
$(RM) $(ALL_PROGRAMS) perf $(RM) $(ALL_PROGRAMS) perf
$(RM) *.spec *.pyc *.pyo */*.pyc */*.pyo $(OUTPUT)common-cmds.h TAGS tags cscope* $(RM) *.spec *.pyc *.pyo */*.pyc */*.pyo $(OUTPUT)common-cmds.h TAGS tags cscope*
...@@ -1181,6 +1201,6 @@ clean: $(LIBTRACEEVENT)-clean ...@@ -1181,6 +1201,6 @@ clean: $(LIBTRACEEVENT)-clean
$(RM) $(OUTPUT)util/*-flex* $(RM) $(OUTPUT)util/*-flex*
$(python-clean) $(python-clean)
.PHONY: all install clean strip $(LIBTRACEEVENT) .PHONY: all install clean strip $(LIBTRACEEVENT) $(LIBLK)
.PHONY: shell_compatibility_test please_set_SHELL_PATH_to_a_more_modern_shell .PHONY: shell_compatibility_test please_set_SHELL_PATH_to_a_more_modern_shell
.PHONY: .FORCE-PERF-VERSION-FILE TAGS tags cscope .FORCE-PERF-CFLAGS .PHONY: .FORCE-PERF-VERSION-FILE TAGS tags cscope .FORCE-PERF-CFLAGS
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
#include "util/parse-options.h" #include "util/parse-options.h"
#include "util/trace-event.h" #include "util/trace-event.h"
#include "util/debug.h" #include "util/debug.h"
#include "util/debugfs.h" #include <lk/debugfs.h>
#include "util/tool.h" #include "util/tool.h"
#include "util/stat.h" #include "util/stat.h"
......
...@@ -37,7 +37,7 @@ ...@@ -37,7 +37,7 @@
#include "util/strfilter.h" #include "util/strfilter.h"
#include "util/symbol.h" #include "util/symbol.h"
#include "util/debug.h" #include "util/debug.h"
#include "util/debugfs.h" #include <lk/debugfs.h>
#include "util/parse-options.h" #include "util/parse-options.h"
#include "util/probe-finder.h" #include "util/probe-finder.h"
#include "util/probe-event.h" #include "util/probe-event.h"
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
#include "util/quote.h" #include "util/quote.h"
#include "util/run-command.h" #include "util/run-command.h"
#include "util/parse-events.h" #include "util/parse-events.h"
#include "util/debugfs.h" #include <lk/debugfs.h>
#include <pthread.h> #include <pthread.h>
const char perf_usage_string[] = const char perf_usage_string[] =
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
#include "evsel.h" #include "evsel.h"
#include "evlist.h" #include "evlist.h"
#include "sysfs.h" #include "sysfs.h"
#include "debugfs.h" #include <lk/debugfs.h>
#include "tests.h" #include "tests.h"
#include <linux/hw_breakpoint.h> #include <linux/hw_breakpoint.h>
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* Released under the GPL v2. (and only v2, not any later version) * Released under the GPL v2. (and only v2, not any later version)
*/ */
#include "util.h" #include "util.h"
#include "debugfs.h" #include <lk/debugfs.h>
#include <poll.h> #include <poll.h>
#include "cpumap.h" #include "cpumap.h"
#include "thread_map.h" #include "thread_map.h"
......
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
#include <byteswap.h> #include <byteswap.h>
#include <linux/bitops.h> #include <linux/bitops.h>
#include "asm/bug.h" #include "asm/bug.h"
#include "debugfs.h" #include <lk/debugfs.h>
#include "event-parse.h" #include "event-parse.h"
#include "evsel.h" #include "evsel.h"
#include "evlist.h" #include "evlist.h"
......
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
#include "symbol.h" #include "symbol.h"
#include "cache.h" #include "cache.h"
#include "header.h" #include "header.h"
#include "debugfs.h" #include <lk/debugfs.h>
#include "parse-events-bison.h" #include "parse-events-bison.h"
#define YY_EXTRA_TYPE int #define YY_EXTRA_TYPE int
#include "parse-events-flex.h" #include "parse-events-flex.h"
......
...@@ -40,7 +40,7 @@ ...@@ -40,7 +40,7 @@
#include "color.h" #include "color.h"
#include "symbol.h" #include "symbol.h"
#include "thread.h" #include "thread.h"
#include "debugfs.h" #include <lk/debugfs.h>
#include "trace-event.h" /* For __maybe_unused */ #include "trace-event.h" /* For __maybe_unused */
#include "probe-event.h" #include "probe-event.h"
#include "probe-finder.h" #include "probe-finder.h"
......
...@@ -15,7 +15,6 @@ util/thread_map.c ...@@ -15,7 +15,6 @@ util/thread_map.c
util/util.c util/util.c
util/xyarray.c util/xyarray.c
util/cgroup.c util/cgroup.c
util/debugfs.c
util/rblist.c util/rblist.c
util/strlist.c util/strlist.c
util/sysfs.c util/sysfs.c
......
...@@ -24,6 +24,7 @@ cflags += getenv('CFLAGS', '').split() ...@@ -24,6 +24,7 @@ cflags += getenv('CFLAGS', '').split()
build_lib = getenv('PYTHON_EXTBUILD_LIB') build_lib = getenv('PYTHON_EXTBUILD_LIB')
build_tmp = getenv('PYTHON_EXTBUILD_TMP') build_tmp = getenv('PYTHON_EXTBUILD_TMP')
libtraceevent = getenv('LIBTRACEEVENT') libtraceevent = getenv('LIBTRACEEVENT')
liblk = getenv('LIBLK')
ext_sources = [f.strip() for f in file('util/python-ext-sources') ext_sources = [f.strip() for f in file('util/python-ext-sources')
if len(f.strip()) > 0 and f[0] != '#'] if len(f.strip()) > 0 and f[0] != '#']
...@@ -32,7 +33,7 @@ perf = Extension('perf', ...@@ -32,7 +33,7 @@ perf = Extension('perf',
sources = ext_sources, sources = ext_sources,
include_dirs = ['util/include'], include_dirs = ['util/include'],
extra_compile_args = cflags, extra_compile_args = cflags,
extra_objects = [libtraceevent], extra_objects = [libtraceevent, liblk],
) )
setup(name='perf', setup(name='perf',
......
...@@ -38,7 +38,7 @@ ...@@ -38,7 +38,7 @@
#include "../perf.h" #include "../perf.h"
#include "trace-event.h" #include "trace-event.h"
#include "debugfs.h" #include <lk/debugfs.h>
#include "evsel.h" #include "evsel.h"
#define VERSION "0.5" #define VERSION "0.5"
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment