mirror of
https://github.com/torvalds/linux.git
synced 2024-12-28 05:41:55 +00:00
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: Borislav 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: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
9687b89d21
commit
85c66be101
@ -33,7 +33,13 @@ help:
|
||||
cpupower: FORCE
|
||||
$(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,$@)
|
||||
|
||||
selftests: FORCE
|
||||
@ -61,7 +67,13 @@ install: cpupower_install firewire_install lguest_install perf_install \
|
||||
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)
|
||||
|
||||
selftests_clean:
|
||||
|
35
tools/lib/lk/Makefile
Normal file
35
tools/lib/lk/Makefile
Normal file
@ -0,0 +1,35 @@
|
||||
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
|
@ -1,14 +1,19 @@
|
||||
#include "util.h"
|
||||
#include "debugfs.h"
|
||||
#include "cache.h"
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <errno.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <stdbool.h>
|
||||
#include <sys/vfs.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 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/",
|
||||
"/debug/",
|
||||
0,
|
||||
@ -19,12 +24,12 @@ static bool debugfs_found;
|
||||
/* find the path to the mounted debugfs */
|
||||
const char *debugfs_find_mountpoint(void)
|
||||
{
|
||||
const char **ptr;
|
||||
const char * const *ptr;
|
||||
char type[100];
|
||||
FILE *fp;
|
||||
|
||||
if (debugfs_found)
|
||||
return (const char *) debugfs_mountpoint;
|
||||
return (const char *)debugfs_mountpoint;
|
||||
|
||||
ptr = debugfs_known_mountpoints;
|
||||
while (*ptr) {
|
31
tools/lib/lk/debugfs.h
Normal file
31
tools/lib/lk/debugfs.h
Normal file
@ -0,0 +1,31 @@
|
||||
#ifndef __LK_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);
|
||||
int debugfs_valid_mountpoint(const char *debugfs);
|
||||
char *debugfs_mount(const char *mountpoint);
|
||||
void debugfs_set_path(const char *mountpoint);
|
||||
|
||||
extern char debugfs_mountpoint[];
|
||||
extern char tracing_events_path[];
|
||||
|
||||
#endif /* __LK_DEBUGFS_H__ */
|
@ -1,6 +1,7 @@
|
||||
tools/perf
|
||||
tools/scripts
|
||||
tools/lib/traceevent
|
||||
tools/lib/lk
|
||||
include/linux/const.h
|
||||
include/linux/perf_event.h
|
||||
include/linux/rbtree.h
|
||||
|
@ -215,6 +215,7 @@ BASIC_CFLAGS = \
|
||||
-Iutil \
|
||||
-I. \
|
||||
-I$(TRACE_EVENT_DIR) \
|
||||
-I../lib/ \
|
||||
-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE
|
||||
|
||||
BASIC_LDFLAGS =
|
||||
@ -240,19 +241,28 @@ SCRIPT_SH += perf-archive.sh
|
||||
grep-libs = $(filter -l%,$(1))
|
||||
strip-libs = $(filter-out -l%,$(1))
|
||||
|
||||
LK_DIR = ../lib/lk/
|
||||
TRACE_EVENT_DIR = ../lib/traceevent/
|
||||
|
||||
LK_PATH=$(LK_DIR)
|
||||
|
||||
ifneq ($(OUTPUT),)
|
||||
TE_PATH=$(OUTPUT)
|
||||
ifneq ($(subdir),)
|
||||
LK_PATH=$(OUTPUT)$(LK_DIR)
|
||||
else
|
||||
LK_PATH=$(OUTPUT)
|
||||
endif
|
||||
else
|
||||
TE_PATH=$(TRACE_EVENT_DIR)
|
||||
endif
|
||||
|
||||
LIBTRACEEVENT = $(TE_PATH)libtraceevent.a
|
||||
TE_LIB := -L$(TE_PATH) -ltraceevent
|
||||
|
||||
export LIBTRACEEVENT
|
||||
|
||||
LIBLK = $(LK_PATH)liblk.a
|
||||
export LIBLK
|
||||
|
||||
# python extension build directories
|
||||
PYTHON_EXTBUILD := $(OUTPUT)python_ext_build/
|
||||
PYTHON_EXTBUILD_LIB := $(PYTHON_EXTBUILD)lib/
|
||||
@ -355,7 +365,6 @@ LIB_H += util/cache.h
|
||||
LIB_H += util/callchain.h
|
||||
LIB_H += util/build-id.h
|
||||
LIB_H += util/debug.h
|
||||
LIB_H += util/debugfs.h
|
||||
LIB_H += util/sysfs.h
|
||||
LIB_H += util/pmu.h
|
||||
LIB_H += util/event.h
|
||||
@ -416,7 +425,6 @@ LIB_OBJS += $(OUTPUT)util/annotate.o
|
||||
LIB_OBJS += $(OUTPUT)util/build-id.o
|
||||
LIB_OBJS += $(OUTPUT)util/config.o
|
||||
LIB_OBJS += $(OUTPUT)util/ctype.o
|
||||
LIB_OBJS += $(OUTPUT)util/debugfs.o
|
||||
LIB_OBJS += $(OUTPUT)util/sysfs.o
|
||||
LIB_OBJS += $(OUTPUT)util/pmu.o
|
||||
LIB_OBJS += $(OUTPUT)util/environment.o
|
||||
@ -536,7 +544,7 @@ BUILTIN_OBJS += $(OUTPUT)builtin-kvm.o
|
||||
BUILTIN_OBJS += $(OUTPUT)builtin-inject.o
|
||||
BUILTIN_OBJS += $(OUTPUT)tests/builtin-test.o
|
||||
|
||||
PERFLIBS = $(LIB_FILE) $(LIBTRACEEVENT)
|
||||
PERFLIBS = $(LIB_FILE) $(LIBLK) $(LIBTRACEEVENT)
|
||||
|
||||
#
|
||||
# Platform specific tweaks
|
||||
@ -1051,6 +1059,18 @@ $(LIBTRACEEVENT):
|
||||
$(LIBTRACEEVENT)-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:
|
||||
@echo 'Perf make targets:'
|
||||
@echo ' doc - make *all* documentation (see below)'
|
||||
@ -1171,7 +1191,7 @@ $(INSTALL_DOC_TARGETS):
|
||||
|
||||
### 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) $(ALL_PROGRAMS) perf
|
||||
$(RM) *.spec *.pyc *.pyo */*.pyc */*.pyo $(OUTPUT)common-cmds.h TAGS tags cscope*
|
||||
@ -1181,6 +1201,6 @@ clean: $(LIBTRACEEVENT)-clean
|
||||
$(RM) $(OUTPUT)util/*-flex*
|
||||
$(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: .FORCE-PERF-VERSION-FILE TAGS tags cscope .FORCE-PERF-CFLAGS
|
||||
|
@ -12,7 +12,7 @@
|
||||
#include "util/parse-options.h"
|
||||
#include "util/trace-event.h"
|
||||
#include "util/debug.h"
|
||||
#include "util/debugfs.h"
|
||||
#include <lk/debugfs.h>
|
||||
#include "util/tool.h"
|
||||
#include "util/stat.h"
|
||||
|
||||
|
@ -37,7 +37,7 @@
|
||||
#include "util/strfilter.h"
|
||||
#include "util/symbol.h"
|
||||
#include "util/debug.h"
|
||||
#include "util/debugfs.h"
|
||||
#include <lk/debugfs.h>
|
||||
#include "util/parse-options.h"
|
||||
#include "util/probe-finder.h"
|
||||
#include "util/probe-event.h"
|
||||
|
@ -13,7 +13,7 @@
|
||||
#include "util/quote.h"
|
||||
#include "util/run-command.h"
|
||||
#include "util/parse-events.h"
|
||||
#include "util/debugfs.h"
|
||||
#include <lk/debugfs.h>
|
||||
#include <pthread.h>
|
||||
|
||||
const char perf_usage_string[] =
|
||||
|
@ -3,7 +3,7 @@
|
||||
#include "evsel.h"
|
||||
#include "evlist.h"
|
||||
#include "sysfs.h"
|
||||
#include "debugfs.h"
|
||||
#include <lk/debugfs.h>
|
||||
#include "tests.h"
|
||||
#include <linux/hw_breakpoint.h>
|
||||
|
||||
|
@ -1,12 +0,0 @@
|
||||
#ifndef __DEBUGFS_H__
|
||||
#define __DEBUGFS_H__
|
||||
|
||||
const char *debugfs_find_mountpoint(void);
|
||||
int debugfs_valid_mountpoint(const char *debugfs);
|
||||
char *debugfs_mount(const char *mountpoint);
|
||||
void debugfs_set_path(const char *mountpoint);
|
||||
|
||||
extern char debugfs_mountpoint[];
|
||||
extern char tracing_events_path[];
|
||||
|
||||
#endif /* __DEBUGFS_H__ */
|
@ -7,7 +7,7 @@
|
||||
* Released under the GPL v2. (and only v2, not any later version)
|
||||
*/
|
||||
#include "util.h"
|
||||
#include "debugfs.h"
|
||||
#include <lk/debugfs.h>
|
||||
#include <poll.h>
|
||||
#include "cpumap.h"
|
||||
#include "thread_map.h"
|
||||
|
@ -10,7 +10,7 @@
|
||||
#include <byteswap.h>
|
||||
#include <linux/bitops.h>
|
||||
#include "asm/bug.h"
|
||||
#include "debugfs.h"
|
||||
#include <lk/debugfs.h>
|
||||
#include "event-parse.h"
|
||||
#include "evsel.h"
|
||||
#include "evlist.h"
|
||||
|
@ -10,7 +10,7 @@
|
||||
#include "symbol.h"
|
||||
#include "cache.h"
|
||||
#include "header.h"
|
||||
#include "debugfs.h"
|
||||
#include <lk/debugfs.h>
|
||||
#include "parse-events-bison.h"
|
||||
#define YY_EXTRA_TYPE int
|
||||
#include "parse-events-flex.h"
|
||||
|
@ -40,7 +40,7 @@
|
||||
#include "color.h"
|
||||
#include "symbol.h"
|
||||
#include "thread.h"
|
||||
#include "debugfs.h"
|
||||
#include <lk/debugfs.h>
|
||||
#include "trace-event.h" /* For __maybe_unused */
|
||||
#include "probe-event.h"
|
||||
#include "probe-finder.h"
|
||||
|
@ -15,7 +15,6 @@ util/thread_map.c
|
||||
util/util.c
|
||||
util/xyarray.c
|
||||
util/cgroup.c
|
||||
util/debugfs.c
|
||||
util/rblist.c
|
||||
util/strlist.c
|
||||
util/sysfs.c
|
||||
|
@ -24,6 +24,7 @@ cflags += getenv('CFLAGS', '').split()
|
||||
build_lib = getenv('PYTHON_EXTBUILD_LIB')
|
||||
build_tmp = getenv('PYTHON_EXTBUILD_TMP')
|
||||
libtraceevent = getenv('LIBTRACEEVENT')
|
||||
liblk = getenv('LIBLK')
|
||||
|
||||
ext_sources = [f.strip() for f in file('util/python-ext-sources')
|
||||
if len(f.strip()) > 0 and f[0] != '#']
|
||||
@ -32,7 +33,7 @@ perf = Extension('perf',
|
||||
sources = ext_sources,
|
||||
include_dirs = ['util/include'],
|
||||
extra_compile_args = cflags,
|
||||
extra_objects = [libtraceevent],
|
||||
extra_objects = [libtraceevent, liblk],
|
||||
)
|
||||
|
||||
setup(name='perf',
|
||||
|
@ -38,7 +38,7 @@
|
||||
|
||||
#include "../perf.h"
|
||||
#include "trace-event.h"
|
||||
#include "debugfs.h"
|
||||
#include <lk/debugfs.h>
|
||||
#include "evsel.h"
|
||||
|
||||
#define VERSION "0.5"
|
||||
|
Loading…
Reference in New Issue
Block a user