diff options
author | Namhyung Kim <namhyung.kim@lge.com> | 2012-08-06 13:41:21 +0900 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2012-08-09 16:26:38 -0300 |
commit | 393be2e3747ea3ef0d2e724115a5f42b2fa50dbd (patch) | |
tree | 6cdc2568e3a6a485f8bbf3d0f94f83873daad3a7 /tools/perf/util | |
parent | e5a1845fc0aeca85c98115980c3531129f87e18d (diff) | |
download | lwn-393be2e3747ea3ef0d2e724115a5f42b2fa50dbd.tar.gz lwn-393be2e3747ea3ef0d2e724115a5f42b2fa50dbd.zip |
perf symbols: Support minimal build without libelf
Now we have isolated all ELF-specific stuff, it's possible to build
without libelf. The output binary can do most of jobs but lacks (user
level) symbol information - kernel symbols are still accessable thanks
to the kallsyms.
To build perf without libelf (elfutils), give NO_LIBELF=1 to make.
For now, only 'perf probe' command is removed since it depends on
libelf/libdw heavily.
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/r/1344228082-15569-4-git-send-email-namhyung@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools/perf/util')
-rwxr-xr-x | tools/perf/util/generate-cmdlist.sh | 15 | ||||
-rw-r--r-- | tools/perf/util/map.c | 3 | ||||
-rw-r--r-- | tools/perf/util/symbol-minimal.c | 39 |
3 files changed, 56 insertions, 1 deletions
diff --git a/tools/perf/util/generate-cmdlist.sh b/tools/perf/util/generate-cmdlist.sh index f06f6fd148f8..389590c1ad21 100755 --- a/tools/perf/util/generate-cmdlist.sh +++ b/tools/perf/util/generate-cmdlist.sh @@ -21,4 +21,19 @@ do p }' "Documentation/perf-$cmd.txt" done + +echo "#ifndef NO_LIBELF_SUPPORT" +sed -n -e 's/^perf-\([^ ]*\)[ ].* full.*/\1/p' command-list.txt | +sort | +while read cmd +do + sed -n ' + /^NAME/,/perf-'"$cmd"'/H + ${ + x + s/.*perf-'"$cmd"' - \(.*\)/ {"'"$cmd"'", "\1"},/ + p + }' "Documentation/perf-$cmd.txt" +done +echo "#endif /* NO_LIBELF_SUPPORT */" echo "};" diff --git a/tools/perf/util/map.c b/tools/perf/util/map.c index 115654c469c6..287cb3452b4b 100644 --- a/tools/perf/util/map.c +++ b/tools/perf/util/map.c @@ -156,6 +156,7 @@ int map__load(struct map *self, symbol_filter_t filter) pr_warning(", continuing without symbols\n"); return -1; } else if (nr == 0) { +#ifndef NO_LIBELF_SUPPORT const size_t len = strlen(name); const size_t real_len = len - sizeof(DSO__DELETED); @@ -168,7 +169,7 @@ int map__load(struct map *self, symbol_filter_t filter) pr_warning("no symbols found in %s, maybe install " "a debug package?\n", name); } - +#endif return -1; } /* diff --git a/tools/perf/util/symbol-minimal.c b/tools/perf/util/symbol-minimal.c new file mode 100644 index 000000000000..416ecf3bccf5 --- /dev/null +++ b/tools/perf/util/symbol-minimal.c @@ -0,0 +1,39 @@ +#include "symbol.h" + + +int filename__read_build_id(const char *filename __used, void *bf __used, + size_t size __used) +{ + return -1; +} + +int sysfs__read_build_id(const char *filename __used, void *build_id __used, + size_t size __used) +{ + return -1; +} + +int filename__read_debuglink(const char *filename __used, + char *debuglink __used, size_t size __used) +{ + return -1; +} + +int dso__synthesize_plt_symbols(struct dso *dso __used, char *name __used, + struct map *map __used, + symbol_filter_t filter __used) +{ + return 0; +} + +int dso__load_sym(struct dso *dso __used, struct map *map __used, + const char *name __used, int fd __used, + symbol_filter_t filter __used, int kmodule __used, + int want_symtab __used) +{ + return 0; +} + +void symbol__elf_init(void) +{ +} |