aboutsummaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2016-07-30 15:11:36 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2016-07-30 15:11:36 -0400
commit7f7d556496a025e5334d52df9e1ebe3674cda22a (patch)
tree8381f6643367fa6ca26a0f9f6325baca155a9a12 /tools
parent228ffba23e6865651c12626d5b46524a205ba810 (diff)
parent9ecabeded80b0ea60a75a8ed7df0c90cd36e6a3d (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/Build5
-rw-r--r--tools/lib/bpf/libbpf.c7
-rw-r--r--tools/perf/arch/s390/util/Build2
-rw-r--r--tools/perf/arch/s390/util/machine.c19
-rw-r--r--tools/perf/util/Build5
-rw-r--r--tools/perf/util/machine.c8
-rw-r--r--tools/perf/util/machine.h1
-rw-r--r--tools/perf/util/python-ext-sources1
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/
2libapi-y += fs/ 2libapi-y += fs/
3libapi-y += cpu.o 3libapi-y += cpu.o
4libapi-y += debug.o 4libapi-y += debug.o
5libapi-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
2libperf-y += kvm-stat.o 2libperf-y += kvm-stat.o
3 3
4libperf-$(CONFIG_DWARF) += dwarf-regs.o 4libperf-$(CONFIG_DWARF) += dwarf-regs.o
5
6libperf-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
8int 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
70libperf-y += stat-shadow.o 70libperf-y += stat-shadow.o
71libperf-y += record.o 71libperf-y += record.o
72libperf-y += srcline.o 72libperf-y += srcline.o
73libperf-y += str_error_r.o
74libperf-y += data.o 73libperf-y += data.o
75libperf-y += tsc.o 74libperf-y += tsc.o
76libperf-y += cloexec.o 75libperf-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}
1096int __weak arch__fix_module_text_start(u64 *start __maybe_unused,
1097 const char *name __maybe_unused)
1098{
1099 return 0;
1100}
1096 1101
1097static int machine__create_module(void *arg, const char *name, u64 start) 1102static 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
217struct map *machine__findnew_module_map(struct machine *machine, u64 start, 217struct map *machine__findnew_module_map(struct machine *machine, u64 start,
218 const char *filename); 218 const char *filename);
219int arch__fix_module_text_start(u64 *start, const char *name);
219 220
220int __machine__load_kallsyms(struct machine *machine, const char *filename, 221int __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
18util/thread_map.c 17util/thread_map.c
19util/util.c 18util/util.c