linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [GIT PULL 0/2] perf/urgent improvement and fix
@ 2016-07-26 21:07 Arnaldo Carvalho de Melo
  2016-07-26 21:07 ` [PATCH 1/2] tools lib bpf: Use official ELF e_machine value Arnaldo Carvalho de Melo
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Arnaldo Carvalho de Melo @ 2016-07-26 21:07 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: linux-kernel, Arnaldo Carvalho de Melo, Alexei Starovoitov,
	Christian Borntraeger, David Ahern, Jiri Olsa, pi3orama,
	Song Shan Gong, Wang Nan, Zefan Li, Arnaldo Carvalho de Melo

Hi Ingo,

	Please consider pulling,

- Arnaldo

Build results (some more images added):

  # perf stat dm
  alpine:3.4: Ok
  android-ndk:r12b: Ok
  centos:5: Ok
  centos:6: Ok
  centos:7: Ok
  debian:7: Ok
  debian:8: Ok
  debian:experimental: Ok
  fedora:21: Ok
  fedora:22: Ok
  fedora:23: Ok
  fedora:24: Ok
  fedora:rawhide: Ok
  mageia:5: Ok
  opensuse:13.2: Ok
  opensuse:42.1: Ok
  ubuntu:14.04.4: Ok
  ubuntu:15.10: Ok
  ubuntu:16.04: Ok
  ubuntu:16.04-x-arm64: Ok
  ubuntu:16.04-x-armhf: Ok
  ubuntu:16.04-x-powerpc64: Ok
  ubuntu:16.04-x-powerpc64el: Ok
  ubuntu:16.04-x-s390: Ok

The following changes since commit 674d2d69b14f677a771ceec4b48bfade94a0c5f1:

  Merge tag 'perf-core-for-mingo-20160725' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/core (2016-07-25 19:48:41 +0200)

are available in the git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.git tags/perf-urgent-for-mingo-20160726

for you to fetch changes up to 203d8a4aa6edf2c19206316d439ec5dae52ce581:

  perf s390: Fix 'start' address of module's map (2016-07-26 16:46:12 -0300)

----------------------------------------------------------------
perf/urgent fixes:

- Fix obtaining the 'start' address for a kernel module on s390, where
  .text doesn't coincides with the start of the module as reported on
  /proc/modules (Song Shan Gong)

- Use official ELF e_machine value for BPF objects generated via perf + LLVM
  when specifying BPF scriptlet in 'perf record/trace --event' (Wang Nan)

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

----------------------------------------------------------------
Song Shan Gong (1):
      perf s390: Fix 'start' address of module's map

Wang Nan (1):
      tools lib bpf: Use official ELF e_machine value

 tools/lib/bpf/libbpf.c              |  7 ++++++-
 tools/perf/arch/s390/util/Build     |  2 ++
 tools/perf/arch/s390/util/machine.c | 19 +++++++++++++++++++
 tools/perf/util/machine.c           |  8 ++++++++
 tools/perf/util/machine.h           |  1 +
 5 files changed, 36 insertions(+), 1 deletion(-)
 create mode 100644 tools/perf/arch/s390/util/machine.c

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH 1/2] tools lib bpf: Use official ELF e_machine value
  2016-07-26 21:07 [GIT PULL 0/2] perf/urgent improvement and fix Arnaldo Carvalho de Melo
@ 2016-07-26 21:07 ` Arnaldo Carvalho de Melo
  2016-07-26 21:07 ` [PATCH 2/2] perf s390: Fix 'start' address of module's map Arnaldo Carvalho de Melo
  2016-07-27  9:01 ` [GIT PULL 0/2] perf/urgent improvement and fix Ingo Molnar
  2 siblings, 0 replies; 4+ messages in thread
From: Arnaldo Carvalho de Melo @ 2016-07-26 21:07 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: linux-kernel, Wang Nan, Zefan Li, pi3orama, Arnaldo Carvalho de Melo

From: Wang Nan <wangnan0@huawei.com>

New LLVM will issue newly assigned EM_BPF machine code. The new code
will be propagated to glibc and libelf.

This patch introduces the new machine code to libbpf.

Signed-off-by: Wang Nan <wangnan0@huawei.com>
Acked-by: Alexei Starovoitov <ast@kernel.org>
Cc: Zefan Li <lizefan@huawei.com>
Cc: pi3orama@163.com
Link: http://lkml.kernel.org/r/1468821668-60088-1-git-send-email-wangnan0@huawei.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/lib/bpf/libbpf.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

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 @@
 #include "libbpf.h"
 #include "bpf.h"
 
+#ifndef EM_BPF
+#define EM_BPF 247
+#endif
+
 #define __printf(a, b)	__attribute__((format(printf, a, b)))
 
 __printf(1, 2)
@@ -439,7 +443,8 @@ static int bpf_object__elf_init(struct bpf_object *obj)
 	}
 	ep = &obj->efile.ehdr;
 
-	if ((ep->e_type != ET_REL) || (ep->e_machine != 0)) {
+	/* Old LLVM set e_machine to EM_NONE */
+	if ((ep->e_type != ET_REL) || (ep->e_machine && (ep->e_machine != EM_BPF))) {
 		pr_warning("%s is not an eBPF object file\n",
 			obj->path);
 		err = -LIBBPF_ERRNO__FORMAT;
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH 2/2] perf s390: Fix 'start' address of module's map
  2016-07-26 21:07 [GIT PULL 0/2] perf/urgent improvement and fix Arnaldo Carvalho de Melo
  2016-07-26 21:07 ` [PATCH 1/2] tools lib bpf: Use official ELF e_machine value Arnaldo Carvalho de Melo
@ 2016-07-26 21:07 ` Arnaldo Carvalho de Melo
  2016-07-27  9:01 ` [GIT PULL 0/2] perf/urgent improvement and fix Ingo Molnar
  2 siblings, 0 replies; 4+ messages in thread
From: Arnaldo Carvalho de Melo @ 2016-07-26 21:07 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: linux-kernel, Song Shan Gong, Christian Borntraeger, David Ahern,
	Arnaldo Carvalho de Melo

From: Song Shan Gong <gongss@linux.vnet.ibm.com>

At present, when creating module's map, perf gets 'start' address by
parsing '/proc/modules', but it's the module base address, it isn't the
start address of the '.text' section.

In most arches, it's OK. But for s390, it places 'GOT' and 'PLT'
relocations before '.text' section. So there exists an offset between
module base address and '.text' section, which will incur wrong symbol
resolution for modules.

Fix this bug by getting 'start' address of module's map from parsing
'/sys/module/[module name]/sections/.text', not from '/proc/modules'.

Signed-off-by: Song Shan Gong <gongss@linux.vnet.ibm.com>
Acked-by: Jiri Olsa <jolsa@kernel.org>
Cc: Christian Borntraeger <borntraeger@de.ibm.com>
Cc: David Ahern <dsahern@gmail.com>
Link: http://lkml.kernel.org/r/1469070651-6447-2-git-send-email-gongss@linux.vnet.ibm.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/arch/s390/util/Build     |  2 ++
 tools/perf/arch/s390/util/machine.c | 19 +++++++++++++++++++
 tools/perf/util/machine.c           |  8 ++++++++
 tools/perf/util/machine.h           |  1 +
 4 files changed, 30 insertions(+)
 create mode 100644 tools/perf/arch/s390/util/machine.c

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
 libperf-y += kvm-stat.o
 
 libperf-$(CONFIG_DWARF) += dwarf-regs.o
+
+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 @@
+#include <unistd.h>
+#include <stdio.h>
+#include <string.h>
+#include "util.h"
+#include "machine.h"
+#include "api/fs/fs.h"
+
+int arch__fix_module_text_start(u64 *start, const char *name)
+{
+	char path[PATH_MAX];
+
+	snprintf(path, PATH_MAX, "module/%.*s/sections/.text",
+				(int)strlen(name) - 2, name + 1);
+
+	if (sysfs__read_ull(path, (unsigned long long *)start) < 0)
+		return -1;
+
+	return 0;
+}
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)
 
 	return map_groups__set_modules_path_dir(&machine->kmaps, modules_path, 0);
 }
+int __weak arch__fix_module_text_start(u64 *start __maybe_unused,
+				const char *name __maybe_unused)
+{
+	return 0;
+}
 
 static int machine__create_module(void *arg, const char *name, u64 start)
 {
 	struct machine *machine = arg;
 	struct map *map;
 
+	if (arch__fix_module_text_start(&start, name) < 0)
+		return -1;
+
 	map = machine__findnew_module_map(machine, start, name);
 	if (map == NULL)
 		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,
 
 struct map *machine__findnew_module_map(struct machine *machine, u64 start,
 					const char *filename);
+int arch__fix_module_text_start(u64 *start, const char *name);
 
 int __machine__load_kallsyms(struct machine *machine, const char *filename,
 			     enum map_type type, bool no_kcore, symbol_filter_t filter);
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [GIT PULL 0/2] perf/urgent improvement and fix
  2016-07-26 21:07 [GIT PULL 0/2] perf/urgent improvement and fix Arnaldo Carvalho de Melo
  2016-07-26 21:07 ` [PATCH 1/2] tools lib bpf: Use official ELF e_machine value Arnaldo Carvalho de Melo
  2016-07-26 21:07 ` [PATCH 2/2] perf s390: Fix 'start' address of module's map Arnaldo Carvalho de Melo
@ 2016-07-27  9:01 ` Ingo Molnar
  2 siblings, 0 replies; 4+ messages in thread
From: Ingo Molnar @ 2016-07-27  9:01 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: linux-kernel, Alexei Starovoitov, Christian Borntraeger,
	David Ahern, Jiri Olsa, pi3orama, Song Shan Gong, Wang Nan,
	Zefan Li, Arnaldo Carvalho de Melo


* Arnaldo Carvalho de Melo <acme@kernel.org> wrote:

> Hi Ingo,
> 
> 	Please consider pulling,
> 
> - Arnaldo
> 
> Build results (some more images added):
> 
>   # perf stat dm
>   alpine:3.4: Ok
>   android-ndk:r12b: Ok
>   centos:5: Ok
>   centos:6: Ok
>   centos:7: Ok
>   debian:7: Ok
>   debian:8: Ok
>   debian:experimental: Ok
>   fedora:21: Ok
>   fedora:22: Ok
>   fedora:23: Ok
>   fedora:24: Ok
>   fedora:rawhide: Ok
>   mageia:5: Ok
>   opensuse:13.2: Ok
>   opensuse:42.1: Ok
>   ubuntu:14.04.4: Ok
>   ubuntu:15.10: Ok
>   ubuntu:16.04: Ok
>   ubuntu:16.04-x-arm64: Ok
>   ubuntu:16.04-x-armhf: Ok
>   ubuntu:16.04-x-powerpc64: Ok
>   ubuntu:16.04-x-powerpc64el: Ok
>   ubuntu:16.04-x-s390: Ok
> 
> The following changes since commit 674d2d69b14f677a771ceec4b48bfade94a0c5f1:
> 
>   Merge tag 'perf-core-for-mingo-20160725' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/core (2016-07-25 19:48:41 +0200)
> 
> are available in the git repository at:
> 
>   git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.git tags/perf-urgent-for-mingo-20160726
> 
> for you to fetch changes up to 203d8a4aa6edf2c19206316d439ec5dae52ce581:
> 
>   perf s390: Fix 'start' address of module's map (2016-07-26 16:46:12 -0300)
> 
> ----------------------------------------------------------------
> perf/urgent fixes:
> 
> - Fix obtaining the 'start' address for a kernel module on s390, where
>   .text doesn't coincides with the start of the module as reported on
>   /proc/modules (Song Shan Gong)
> 
> - Use official ELF e_machine value for BPF objects generated via perf + LLVM
>   when specifying BPF scriptlet in 'perf record/trace --event' (Wang Nan)
> 
> Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
> 
> ----------------------------------------------------------------
> Song Shan Gong (1):
>       perf s390: Fix 'start' address of module's map
> 
> Wang Nan (1):
>       tools lib bpf: Use official ELF e_machine value
> 
>  tools/lib/bpf/libbpf.c              |  7 ++++++-
>  tools/perf/arch/s390/util/Build     |  2 ++
>  tools/perf/arch/s390/util/machine.c | 19 +++++++++++++++++++
>  tools/perf/util/machine.c           |  8 ++++++++
>  tools/perf/util/machine.h           |  1 +
>  5 files changed, 36 insertions(+), 1 deletion(-)
>  create mode 100644 tools/perf/arch/s390/util/machine.c

Pulled, thanks a lot Arnaldo!

	Ingo

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2016-07-27  9:01 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-07-26 21:07 [GIT PULL 0/2] perf/urgent improvement and fix Arnaldo Carvalho de Melo
2016-07-26 21:07 ` [PATCH 1/2] tools lib bpf: Use official ELF e_machine value Arnaldo Carvalho de Melo
2016-07-26 21:07 ` [PATCH 2/2] perf s390: Fix 'start' address of module's map Arnaldo Carvalho de Melo
2016-07-27  9:01 ` [GIT PULL 0/2] perf/urgent improvement and fix Ingo Molnar

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).