diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2016-07-30 15:11:36 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2016-07-30 15:11:36 -0400 |
| commit | 7f7d556496a025e5334d52df9e1ebe3674cda22a (patch) | |
| tree | 8381f6643367fa6ca26a0f9f6325baca155a9a12 /tools | |
| parent | 228ffba23e6865651c12626d5b46524a205ba810 (diff) | |
| parent | 9ecabeded80b0ea60a75a8ed7df0c90cd36e6a3d (diff) | |
Merge branch 'perf-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull perf fixes from Thomas Gleixner:
"This update contains:
- a fix for the bpf tools to use the new EM_BPF code
- a fix for the module parser of perf to retrieve the
proper text start address
- add str_error_c to libapi to avoid linking against
tools/lib/str_error_r.o"
* 'perf-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
tools lib api: Add str_error_c to libapi
perf s390: Fix 'start' address of module's map
tools lib bpf: Use official ELF e_machine value
Diffstat (limited to 'tools')
| -rw-r--r-- | tools/lib/api/Build | 5 | ||||
| -rw-r--r-- | tools/lib/bpf/libbpf.c | 7 | ||||
| -rw-r--r-- | tools/perf/arch/s390/util/Build | 2 | ||||
| -rw-r--r-- | tools/perf/arch/s390/util/machine.c | 19 | ||||
| -rw-r--r-- | tools/perf/util/Build | 5 | ||||
| -rw-r--r-- | tools/perf/util/machine.c | 8 | ||||
| -rw-r--r-- | tools/perf/util/machine.h | 1 | ||||
| -rw-r--r-- | tools/perf/util/python-ext-sources | 1 |
8 files changed, 41 insertions, 7 deletions
diff --git a/tools/lib/api/Build b/tools/lib/api/Build index 954c644f7ad9..6e2373db5598 100644 --- a/tools/lib/api/Build +++ b/tools/lib/api/Build | |||
| @@ -2,3 +2,8 @@ libapi-y += fd/ | |||
| 2 | libapi-y += fs/ | 2 | libapi-y += fs/ |
| 3 | libapi-y += cpu.o | 3 | libapi-y += cpu.o |
| 4 | libapi-y += debug.o | 4 | libapi-y += debug.o |
| 5 | libapi-y += str_error_r.o | ||
| 6 | |||
| 7 | $(OUTPUT)str_error_r.o: ../str_error_r.c FORCE | ||
| 8 | $(call rule_mkdir) | ||
| 9 | $(call if_changed_dep,cc_o_c) | ||
diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c index 32e6b6bc6f7d..b699aea9a025 100644 --- a/tools/lib/bpf/libbpf.c +++ b/tools/lib/bpf/libbpf.c | |||
| @@ -37,6 +37,10 @@ | |||
| 37 | #include "libbpf.h" | 37 | #include "libbpf.h" |
| 38 | #include "bpf.h" | 38 | #include "bpf.h" |
| 39 | 39 | ||
| 40 | #ifndef EM_BPF | ||
| 41 | #define EM_BPF 247 | ||
| 42 | #endif | ||
| 43 | |||
| 40 | #define __printf(a, b) __attribute__((format(printf, a, b))) | 44 | #define __printf(a, b) __attribute__((format(printf, a, b))) |
| 41 | 45 | ||
| 42 | __printf(1, 2) | 46 | __printf(1, 2) |
| @@ -439,7 +443,8 @@ static int bpf_object__elf_init(struct bpf_object *obj) | |||
| 439 | } | 443 | } |
| 440 | ep = &obj->efile.ehdr; | 444 | ep = &obj->efile.ehdr; |
| 441 | 445 | ||
| 442 | if ((ep->e_type != ET_REL) || (ep->e_machine != 0)) { | 446 | /* Old LLVM set e_machine to EM_NONE */ |
| 447 | if ((ep->e_type != ET_REL) || (ep->e_machine && (ep->e_machine != EM_BPF))) { | ||
| 443 | pr_warning("%s is not an eBPF object file\n", | 448 | pr_warning("%s is not an eBPF object file\n", |
| 444 | obj->path); | 449 | obj->path); |
| 445 | err = -LIBBPF_ERRNO__FORMAT; | 450 | err = -LIBBPF_ERRNO__FORMAT; |
diff --git a/tools/perf/arch/s390/util/Build b/tools/perf/arch/s390/util/Build index 8a61372bb47a..5bd7b9260cc0 100644 --- a/tools/perf/arch/s390/util/Build +++ b/tools/perf/arch/s390/util/Build | |||
| @@ -2,3 +2,5 @@ libperf-y += header.o | |||
| 2 | libperf-y += kvm-stat.o | 2 | libperf-y += kvm-stat.o |
| 3 | 3 | ||
| 4 | libperf-$(CONFIG_DWARF) += dwarf-regs.o | 4 | libperf-$(CONFIG_DWARF) += dwarf-regs.o |
| 5 | |||
| 6 | libperf-y += machine.o | ||
diff --git a/tools/perf/arch/s390/util/machine.c b/tools/perf/arch/s390/util/machine.c new file mode 100644 index 000000000000..b9a95a1a8e69 --- /dev/null +++ b/tools/perf/arch/s390/util/machine.c | |||
| @@ -0,0 +1,19 @@ | |||
| 1 | #include <unistd.h> | ||
| 2 | #include <stdio.h> | ||
| 3 | #include <string.h> | ||
| 4 | #include "util.h" | ||
| 5 | #include "machine.h" | ||
| 6 | #include "api/fs/fs.h" | ||
| 7 | |||
| 8 | int arch__fix_module_text_start(u64 *start, const char *name) | ||
| 9 | { | ||
| 10 | char path[PATH_MAX]; | ||
| 11 | |||
| 12 | snprintf(path, PATH_MAX, "module/%.*s/sections/.text", | ||
| 13 | (int)strlen(name) - 2, name + 1); | ||
| 14 | |||
| 15 | if (sysfs__read_ull(path, (unsigned long long *)start) < 0) | ||
| 16 | return -1; | ||
| 17 | |||
| 18 | return 0; | ||
| 19 | } | ||
diff --git a/tools/perf/util/Build b/tools/perf/util/Build index 2fa7d8b69873..91c5f6e1af59 100644 --- a/tools/perf/util/Build +++ b/tools/perf/util/Build | |||
| @@ -70,7 +70,6 @@ libperf-y += stat.o | |||
| 70 | libperf-y += stat-shadow.o | 70 | libperf-y += stat-shadow.o |
| 71 | libperf-y += record.o | 71 | libperf-y += record.o |
| 72 | libperf-y += srcline.o | 72 | libperf-y += srcline.o |
| 73 | libperf-y += str_error_r.o | ||
| 74 | libperf-y += data.o | 73 | libperf-y += data.o |
| 75 | libperf-y += tsc.o | 74 | libperf-y += tsc.o |
| 76 | libperf-y += cloexec.o | 75 | libperf-y += cloexec.o |
| @@ -176,10 +175,6 @@ $(OUTPUT)util/libstring.o: ../lib/string.c FORCE | |||
| 176 | $(call rule_mkdir) | 175 | $(call rule_mkdir) |
| 177 | $(call if_changed_dep,cc_o_c) | 176 | $(call if_changed_dep,cc_o_c) |
| 178 | 177 | ||
| 179 | $(OUTPUT)util/str_error_r.o: ../lib/str_error_r.c FORCE | ||
| 180 | $(call rule_mkdir) | ||
| 181 | $(call if_changed_dep,cc_o_c) | ||
| 182 | |||
| 183 | $(OUTPUT)util/hweight.o: ../lib/hweight.c FORCE | 178 | $(OUTPUT)util/hweight.o: ../lib/hweight.c FORCE |
| 184 | $(call rule_mkdir) | 179 | $(call rule_mkdir) |
| 185 | $(call if_changed_dep,cc_o_c) | 180 | $(call if_changed_dep,cc_o_c) |
diff --git a/tools/perf/util/machine.c b/tools/perf/util/machine.c index bc2cdbd09a25..cb6388dbdd98 100644 --- a/tools/perf/util/machine.c +++ b/tools/perf/util/machine.c | |||
| @@ -1093,12 +1093,20 @@ static int machine__set_modules_path(struct machine *machine) | |||
| 1093 | 1093 | ||
| 1094 | return map_groups__set_modules_path_dir(&machine->kmaps, modules_path, 0); | 1094 | return map_groups__set_modules_path_dir(&machine->kmaps, modules_path, 0); |
| 1095 | } | 1095 | } |
| 1096 | int __weak arch__fix_module_text_start(u64 *start __maybe_unused, | ||
| 1097 | const char *name __maybe_unused) | ||
| 1098 | { | ||
| 1099 | return 0; | ||
| 1100 | } | ||
| 1096 | 1101 | ||
| 1097 | static int machine__create_module(void *arg, const char *name, u64 start) | 1102 | static int machine__create_module(void *arg, const char *name, u64 start) |
| 1098 | { | 1103 | { |
| 1099 | struct machine *machine = arg; | 1104 | struct machine *machine = arg; |
| 1100 | struct map *map; | 1105 | struct map *map; |
| 1101 | 1106 | ||
| 1107 | if (arch__fix_module_text_start(&start, name) < 0) | ||
| 1108 | return -1; | ||
| 1109 | |||
| 1102 | map = machine__findnew_module_map(machine, start, name); | 1110 | map = machine__findnew_module_map(machine, start, name); |
| 1103 | if (map == NULL) | 1111 | if (map == NULL) |
| 1104 | return -1; | 1112 | return -1; |
diff --git a/tools/perf/util/machine.h b/tools/perf/util/machine.h index 41ac9cfd416b..20739f746bc4 100644 --- a/tools/perf/util/machine.h +++ b/tools/perf/util/machine.h | |||
| @@ -216,6 +216,7 @@ struct symbol *machine__find_kernel_function_by_name(struct machine *machine, | |||
| 216 | 216 | ||
| 217 | struct map *machine__findnew_module_map(struct machine *machine, u64 start, | 217 | struct map *machine__findnew_module_map(struct machine *machine, u64 start, |
| 218 | const char *filename); | 218 | const char *filename); |
| 219 | int arch__fix_module_text_start(u64 *start, const char *name); | ||
| 219 | 220 | ||
| 220 | int __machine__load_kallsyms(struct machine *machine, const char *filename, | 221 | int __machine__load_kallsyms(struct machine *machine, const char *filename, |
| 221 | enum map_type type, bool no_kcore, symbol_filter_t filter); | 222 | enum map_type type, bool no_kcore, symbol_filter_t filter); |
diff --git a/tools/perf/util/python-ext-sources b/tools/perf/util/python-ext-sources index 5065ec98049c..b7d4f4aeee61 100644 --- a/tools/perf/util/python-ext-sources +++ b/tools/perf/util/python-ext-sources | |||
| @@ -13,7 +13,6 @@ util/cpumap.c | |||
| 13 | ../lib/bitmap.c | 13 | ../lib/bitmap.c |
| 14 | ../lib/find_bit.c | 14 | ../lib/find_bit.c |
| 15 | ../lib/hweight.c | 15 | ../lib/hweight.c |
| 16 | ../lib/str_error_r.c | ||
| 17 | ../lib/vsprintf.c | 16 | ../lib/vsprintf.c |
| 18 | util/thread_map.c | 17 | util/thread_map.c |
| 19 | util/util.c | 18 | util/util.c |
