Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1213621 > unrolled thread

[PATCH v2 0/4] perf probe, tracing/uprobes: Support probing at absolute address

Started byWang Nan <wangnan0@huawei.com>
First post2015-08-26 09:50 +0200
Last post2015-08-26 11:20 +0200
Articles 11 — 3 participants

Back to article view | Back to linux.kernel


Contents

  [PATCH v2 0/4] perf probe, tracing/uprobes: Support probing at absolute address Wang Nan <wangnan0@huawei.com> - 2015-08-26 09:50 +0200
    [PATCH v2 1/4] perf probe: Prevent segfault when reading probe point with absolute address Wang Nan <wangnan0@huawei.com> - 2015-08-26 09:50 +0200
    [PATCH v2 2/4] perf probe: Fix list result when address is zero Wang Nan <wangnan0@huawei.com> - 2015-08-26 09:50 +0200
      RE: [PATCH v2 2/4] perf probe: Fix list result when address is zero 平松雅巳 / HIRAMATU,MASAMI   <masami.hiramatsu.pt@hitachi.com> - 2015-08-26 11:30 +0200
        Re: [PATCH v2 2/4] perf probe: Fix list result when address is zero "Wangnan (F)" <wangnan0@huawei.com> - 2015-08-26 11:50 +0200
          RE: [PATCH v2 2/4] perf probe: Fix list result when address is zero 平松雅巳 / HIRAMATU,MASAMI   <masami.hiramatsu.pt@hitachi.com> - 2015-08-26 12:50 +0200
    [PATCH v2 4/4] tracing/uprobes: Do not print '0x  (null)' when offset is 0 Wang Nan <wangnan0@huawei.com> - 2015-08-26 09:50 +0200
      RE: [PATCH v2 4/4] tracing/uprobes: Do not print '0x  (null)' when  offset is 0 平松雅巳 / HIRAMATU,MASAMI   <masami.hiramatsu.pt@hitachi.com> - 2015-08-26 12:10 +0200
    [PATCH v2 3/4] perf probe: Support probing at absolute address Wang Nan <wangnan0@huawei.com> - 2015-08-26 09:50 +0200
      RE: [PATCH v2 3/4] perf probe: Support probing at absolute address 平松雅巳 / HIRAMATU,MASAMI   <masami.hiramatsu.pt@hitachi.com> - 2015-08-26 11:50 +0200
    RE: [PATCH v2 0/4] perf probe, tracing/uprobes: Support probing at  absolute address 平松雅巳 / HIRAMATU,MASAMI   <masami.hiramatsu.pt@hitachi.com> - 2015-08-26 11:20 +0200

#1213621 — [PATCH v2 0/4] perf probe, tracing/uprobes: Support probing at absolute address

FromWang Nan <wangnan0@huawei.com>
Date2015-08-26 09:50 +0200
Subject[PATCH v2 0/4] perf probe, tracing/uprobes: Support probing at absolute address
Message-ID<q1DD3-7K7-5@gated-at.bofh.it>
The goal of these 4 patches is to allow perf probing at absolute address
for uprobes and kprobes. During the development several small problem in
'perf probe -l' is found and fixed.

Patch 1 has already acked by Masami Hiramatsu.

Patch 2 fixes a problem about zero address in perf side.

Patch 3 is the main patch of these 4. It allows following command:

 # perf probe /lib/x86_64-linux-gnu/libc-2.19.so 0xeb860

 Different from v1, no extra '+' is required.

Patch 4 is a kernel side patch which fixes a small problem in uprobe_event
that, if address is 0, uprobe_events reports '0x  (null)'. It is independent
from the other patches.

Wang Nan (4):
  perf probe: Prevent segfault when reading probe point with absolute
    address
  perf probe: Fix list result when address is zero
  perf probe: Support probing at absolute address
  tracing/uprobes: Do not print '0x  (null)' when offset is 0

 kernel/trace/trace_uprobe.c    |  17 +++-
 tools/perf/util/probe-event.c  | 210 +++++++++++++++++++++++++++++++++++++----
 tools/perf/util/probe-event.h  |   4 +
 tools/perf/util/probe-finder.c |  21 +----
 4 files changed, 216 insertions(+), 36 deletions(-)

-- 
1.8.3.4

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [next] | [standalone]


#1213622 — [PATCH v2 1/4] perf probe: Prevent segfault when reading probe point with absolute address

FromWang Nan <wangnan0@huawei.com>
Date2015-08-26 09:50 +0200
Subject[PATCH v2 1/4] perf probe: Prevent segfault when reading probe point with absolute address
Message-ID<q1DD3-7K7-3@gated-at.bofh.it>
In reply to#1213621
'perf probe -l' panic if there is a manually inserted probing point
with absolute address. For example:

 # echo 'p:probe/abs_ffffffff811e6615 0xffffffff811e6615' > /sys/kernel/debug/tracing/kprobe_events
 # perf probe -l
 Segmentation fault (core dumped)

This patch fixes this problem by considering the situation that
"tp->symbol == NULL" in find_perf_probe_point_from_dwarf() and
find_perf_probe_point_from_map().

After this patch:

 # perf probe -l
 probe:abs_ffffffff811e6615 (on SyS_write+5@fs/read_write.c)

And when debug info is missing:

 # rm -rf ~/.debug
 # mv /lib/modules/4.2.0-rc1+/build/vmlinux /lib/modules/4.2.0-rc1+/build/vmlinux.bak
 # perf probe -l
 probe:abs_ffffffff811e6615 (on sys_write+5)

Signed-off-by: Wang Nan <wangnan0@huawei.com>
Acked-by: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
Cc: Arnaldo Carvalho de Melo <acme@kernel.org>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Steven Rostedt <rostedt@goodmis.org>
Link: http://lkml.kernel.org/r/1440509256-193590-1-git-send-email-wangnan0@huawei.com
---
 tools/perf/util/probe-event.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c
index f173372..ef325a2 100644
--- a/tools/perf/util/probe-event.c
+++ b/tools/perf/util/probe-event.c
@@ -517,7 +517,7 @@ static int find_perf_probe_point_from_dwarf(struct probe_trace_point *tp,
 		if (ret < 0)
 			goto error;
 		addr += stext;
-	} else {
+	} else if (tp->symbol) {
 		addr = kernel_get_symbol_address_by_name(tp->symbol, false);
 		if (addr == 0)
 			goto error;
@@ -1817,17 +1817,17 @@ static int find_perf_probe_point_from_map(struct probe_trace_point *tp,
 {
 	struct symbol *sym = NULL;
 	struct map *map;
-	u64 addr;
+	u64 addr = tp->address;
 	int ret = -ENOENT;
 
 	if (!is_kprobe) {
 		map = dso__new_map(tp->module);
 		if (!map)
 			goto out;
-		addr = tp->address;
 		sym = map__find_symbol(map, addr, NULL);
 	} else {
-		addr = kernel_get_symbol_address_by_name(tp->symbol, true);
+		if (tp->symbol)
+			addr = kernel_get_symbol_address_by_name(tp->symbol, true);
 		if (addr) {
 			addr += tp->offset;
 			sym = __find_kernel_function(addr, &map);
-- 
1.8.3.4

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1213624 — [PATCH v2 2/4] perf probe: Fix list result when address is zero

FromWang Nan <wangnan0@huawei.com>
Date2015-08-26 09:50 +0200
Subject[PATCH v2 2/4] perf probe: Fix list result when address is zero
Message-ID<q1DD4-7K7-9@gated-at.bofh.it>
In reply to#1213621
When manually added uprobe point with zero address, 'perf probe -l'
reports error. For example:

 # echo p:probe_libc/abs_0 /path/to/lib.bin:0x0 arg1=%ax > \
           /sys/kernel/debug/tracing/uprobe_events

 # perf probe -l
 Error: Failed to show event list.

Probing at 0x0 is possible and useful when lib.bin is not a normal
shared object but is manually mapped. However, in this case kernel
report:

 # cat /sys/kernel/debug/tracing/uprobe_events
 p:probe_libc/abs_0 /tmp/oxygen_root/lib64/libc-2.18.so:0x          (null) arg1=%ax

This patch supports the above kernel output.

In addition, this patch also fixes convert_to_perf_probe_point() that,
if failed to find probe point from both of dwarf and map, in all cases
pp->function should be filled with a strdup() result, or the following
ENOMEM error code is incorrect. Remove !tp->module && !is_kprobe
condition so always use address to build function name if symbol is not
found.

Signed-off-by: Wang Nan <wangnan0@huawei.com>
Cc: Arnaldo Carvalho de Melo <acme@kernel.org>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Steven Rostedt <rostedt@goodmis.org>
---
 tools/perf/util/probe-event.c | 30 ++++++++++++++++++++++++++----
 1 file changed, 26 insertions(+), 4 deletions(-)

diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c
index ef325a2..3ce223d 100644
--- a/tools/perf/util/probe-event.c
+++ b/tools/perf/util/probe-event.c
@@ -1521,9 +1521,31 @@ int parse_probe_trace_command(const char *cmd, struct probe_trace_event *tev)
 	} else
 		p = argv[1];
 	fmt1_str = strtok_r(p, "+", &fmt);
-	if (fmt1_str[0] == '0')	/* only the address started with 0x */
-		tp->address = strtoul(fmt1_str, NULL, 0);
-	else {
+	/* only the address started with 0x */
+	if (fmt1_str[0] == '0')	{
+		/*
+		 * Fix a special case:
+		 * if address == 0, kernel reports something like:
+		 * p:probe_libc/abs_0 /lib/libc-2.18.so:0x          (null) arg1=%ax
+		 * Newer kernel may fix that, but we want to
+		 * support old kernel also.
+		 */
+		if (strcmp(fmt1_str, "0x") == 0) {
+			if (!argv[2] || strcmp(argv[2], "(null)")) {
+				ret = -EINVAL;
+				goto out;
+			}
+			tp->address = 0;
+
+			free(argv[2]);
+			for (i = 2; argv[i + 1] != NULL; i++)
+				argv[i] = argv[i + 1];
+
+			argv[i] = NULL;
+			argc -= 1;
+		} else
+			tp->address = strtoul(fmt1_str, NULL, 0);
+	} else {
 		/* Only the symbol-based probe has offset */
 		tp->symbol = strdup(fmt1_str);
 		if (tp->symbol == NULL) {
@@ -1868,7 +1890,7 @@ static int convert_to_perf_probe_point(struct probe_trace_point *tp,
 	if (tp->symbol) {
 		pp->function = strdup(tp->symbol);
 		pp->offset = tp->offset;
-	} else if (!tp->module && !is_kprobe) {
+	} else {
 		ret = e_snprintf(buf, 128, "0x%" PRIx64, (u64)tp->address);
 		if (ret < 0)
 			return ret;
-- 
1.8.3.4

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1213697 — RE: [PATCH v2 2/4] perf probe: Fix list result when address is zero

From平松雅巳 / HIRAMATU,MASAMI <masami.hiramatsu.pt@hitachi.com>
Date2015-08-26 11:30 +0200
SubjectRE: [PATCH v2 2/4] perf probe: Fix list result when address is zero
Message-ID<q1FbQ-1C1-15@gated-at.bofh.it>
In reply to#1213624
PiBGcm9tOiBXYW5nIE5hbiBbbWFpbHRvOndhbmduYW4wQGh1YXdlaS5jb21dDQo+IA0KPiBXaGVu
IG1hbnVhbGx5IGFkZGVkIHVwcm9iZSBwb2ludCB3aXRoIHplcm8gYWRkcmVzcywgJ3BlcmYgcHJv
YmUgLWwnDQo+IHJlcG9ydHMgZXJyb3IuIEZvciBleGFtcGxlOg0KPiANCj4gICMgZWNobyBwOnBy
b2JlX2xpYmMvYWJzXzAgL3BhdGgvdG8vbGliLmJpbjoweDAgYXJnMT0lYXggPiBcDQo+ICAgICAg
ICAgICAgL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy91cHJvYmVfZXZlbnRzDQo+IA0KPiAgIyBw
ZXJmIHByb2JlIC1sDQo+ICBFcnJvcjogRmFpbGVkIHRvIHNob3cgZXZlbnQgbGlzdC4NCj4gDQo+
IFByb2JpbmcgYXQgMHgwIGlzIHBvc3NpYmxlIGFuZCB1c2VmdWwgd2hlbiBsaWIuYmluIGlzIG5v
dCBhIG5vcm1hbA0KPiBzaGFyZWQgb2JqZWN0IGJ1dCBpcyBtYW51YWxseSBtYXBwZWQuIEhvd2V2
ZXIsIGluIHRoaXMgY2FzZSBrZXJuZWwNCj4gcmVwb3J0Og0KPiANCj4gICMgY2F0IC9zeXMva2Vy
bmVsL2RlYnVnL3RyYWNpbmcvdXByb2JlX2V2ZW50cw0KPiAgcDpwcm9iZV9saWJjL2Fic18wIC90
bXAvb3h5Z2VuX3Jvb3QvbGliNjQvbGliYy0yLjE4LnNvOjB4ICAgICAgICAgIChudWxsKSBhcmcx
PSVheA0KPiANCj4gVGhpcyBwYXRjaCBzdXBwb3J0cyB0aGUgYWJvdmUga2VybmVsIG91dHB1dC4N
Cg0KRm9ybWVyIHBhcnQgaXMgT0sgdG8gbWUuDQoNCj4gDQo+IEluIGFkZGl0aW9uLCB0aGlzIHBh
dGNoIGFsc28gZml4ZXMgY29udmVydF90b19wZXJmX3Byb2JlX3BvaW50KCkgdGhhdCwNCj4gaWYg
ZmFpbGVkIHRvIGZpbmQgcHJvYmUgcG9pbnQgZnJvbSBib3RoIG9mIGR3YXJmIGFuZCBtYXAsIGlu
IGFsbCBjYXNlcw0KPiBwcC0+ZnVuY3Rpb24gc2hvdWxkIGJlIGZpbGxlZCB3aXRoIGEgc3RyZHVw
KCkgcmVzdWx0LCBvciB0aGUgZm9sbG93aW5nDQo+IEVOT01FTSBlcnJvciBjb2RlIGlzIGluY29y
cmVjdC4gUmVtb3ZlICF0cC0+bW9kdWxlICYmICFpc19rcHJvYmUNCj4gY29uZGl0aW9uIHNvIGFs
d2F5cyB1c2UgYWRkcmVzcyB0byBidWlsZCBmdW5jdGlvbiBuYW1lIGlmIHN5bWJvbCBpcyBub3QN
Cj4gZm91bmQuDQoNCk5vLCBJIHRoaW5rIHRoaXMgc2hvdWxkIGJlIGluY2x1ZGVkIGluIDMvNCwg
c2luY2UgdW50aWwgdGhhdCBwZXJmIHByb2JlDQpkb2Vzbid0IHN1cHBvcnQgYWJzb2x1dGUgYWRk
cmVzcyBvbiBrZXJuZWwuDQoNClRoYW5rIHlvdSwNCg0KPiANCj4gU2lnbmVkLW9mZi1ieTogV2Fu
ZyBOYW4gPHdhbmduYW4wQGh1YXdlaS5jb20+DQo+IENjOiBBcm5hbGRvIENhcnZhbGhvIGRlIE1l
bG8gPGFjbWVAa2VybmVsLm9yZz4NCj4gQ2M6IEluZ28gTW9sbmFyIDxtaW5nb0ByZWRoYXQuY29t
Pg0KPiBDYzogTWFzYW1pIEhpcmFtYXRzdSA8bWFzYW1pLmhpcmFtYXRzdS5wdEBoaXRhY2hpLmNv
bT4NCj4gQ2M6IE5hbWh5dW5nIEtpbSA8bmFtaHl1bmdAa2VybmVsLm9yZz4NCj4gQ2M6IFN0ZXZl
biBSb3N0ZWR0IDxyb3N0ZWR0QGdvb2RtaXMub3JnPg0KPiAtLS0NCj4gIHRvb2xzL3BlcmYvdXRp
bC9wcm9iZS1ldmVudC5jIHwgMzAgKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tDQo+ICAx
IGZpbGUgY2hhbmdlZCwgMjYgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkNCj4gDQo+IGRp
ZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvcHJvYmUtZXZlbnQuYyBiL3Rvb2xzL3BlcmYvdXRp
bC9wcm9iZS1ldmVudC5jDQo+IGluZGV4IGVmMzI1YTIuLjNjZTIyM2QgMTAwNjQ0DQo+IC0tLSBh
L3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1ldmVudC5jDQo+ICsrKyBiL3Rvb2xzL3BlcmYvdXRpbC9w
cm9iZS1ldmVudC5jDQo+IEBAIC0xNTIxLDkgKzE1MjEsMzEgQEAgaW50IHBhcnNlX3Byb2JlX3Ry
YWNlX2NvbW1hbmQoY29uc3QgY2hhciAqY21kLCBzdHJ1Y3QgcHJvYmVfdHJhY2VfZXZlbnQgKnRl
dikNCj4gIAl9IGVsc2UNCj4gIAkJcCA9IGFyZ3ZbMV07DQo+ICAJZm10MV9zdHIgPSBzdHJ0b2tf
cihwLCAiKyIsICZmbXQpOw0KPiAtCWlmIChmbXQxX3N0clswXSA9PSAnMCcpCS8qIG9ubHkgdGhl
IGFkZHJlc3Mgc3RhcnRlZCB3aXRoIDB4ICovDQo+IC0JCXRwLT5hZGRyZXNzID0gc3RydG91bChm
bXQxX3N0ciwgTlVMTCwgMCk7DQo+IC0JZWxzZSB7DQo+ICsJLyogb25seSB0aGUgYWRkcmVzcyBz
dGFydGVkIHdpdGggMHggKi8NCj4gKwlpZiAoZm10MV9zdHJbMF0gPT0gJzAnKQl7DQo+ICsJCS8q
DQo+ICsJCSAqIEZpeCBhIHNwZWNpYWwgY2FzZToNCj4gKwkJICogaWYgYWRkcmVzcyA9PSAwLCBr
ZXJuZWwgcmVwb3J0cyBzb21ldGhpbmcgbGlrZToNCj4gKwkJICogcDpwcm9iZV9saWJjL2Fic18w
IC9saWIvbGliYy0yLjE4LnNvOjB4ICAgICAgICAgIChudWxsKSBhcmcxPSVheA0KPiArCQkgKiBO
ZXdlciBrZXJuZWwgbWF5IGZpeCB0aGF0LCBidXQgd2Ugd2FudCB0bw0KPiArCQkgKiBzdXBwb3J0
IG9sZCBrZXJuZWwgYWxzby4NCj4gKwkJICovDQo+ICsJCWlmIChzdHJjbXAoZm10MV9zdHIsICIw
eCIpID09IDApIHsNCj4gKwkJCWlmICghYXJndlsyXSB8fCBzdHJjbXAoYXJndlsyXSwgIihudWxs
KSIpKSB7DQo+ICsJCQkJcmV0ID0gLUVJTlZBTDsNCj4gKwkJCQlnb3RvIG91dDsNCj4gKwkJCX0N
Cj4gKwkJCXRwLT5hZGRyZXNzID0gMDsNCj4gKw0KPiArCQkJZnJlZShhcmd2WzJdKTsNCj4gKwkJ
CWZvciAoaSA9IDI7IGFyZ3ZbaSArIDFdICE9IE5VTEw7IGkrKykNCj4gKwkJCQlhcmd2W2ldID0g
YXJndltpICsgMV07DQo+ICsNCj4gKwkJCWFyZ3ZbaV0gPSBOVUxMOw0KPiArCQkJYXJnYyAtPSAx
Ow0KPiArCQl9IGVsc2UNCj4gKwkJCXRwLT5hZGRyZXNzID0gc3RydG91bChmbXQxX3N0ciwgTlVM
TCwgMCk7DQo+ICsJfSBlbHNlIHsNCj4gIAkJLyogT25seSB0aGUgc3ltYm9sLWJhc2VkIHByb2Jl
IGhhcyBvZmZzZXQgKi8NCj4gIAkJdHAtPnN5bWJvbCA9IHN0cmR1cChmbXQxX3N0cik7DQo+ICAJ
CWlmICh0cC0+c3ltYm9sID09IE5VTEwpIHsNCj4gQEAgLTE4NjgsNyArMTg5MCw3IEBAIHN0YXRp
YyBpbnQgY29udmVydF90b19wZXJmX3Byb2JlX3BvaW50KHN0cnVjdCBwcm9iZV90cmFjZV9wb2lu
dCAqdHAsDQo+ICAJaWYgKHRwLT5zeW1ib2wpIHsNCj4gIAkJcHAtPmZ1bmN0aW9uID0gc3RyZHVw
KHRwLT5zeW1ib2wpOw0KPiAgCQlwcC0+b2Zmc2V0ID0gdHAtPm9mZnNldDsNCj4gLQl9IGVsc2Ug
aWYgKCF0cC0+bW9kdWxlICYmICFpc19rcHJvYmUpIHsNCj4gKwl9IGVsc2Ugew0KPiAgCQlyZXQg
PSBlX3NucHJpbnRmKGJ1ZiwgMTI4LCAiMHglIiBQUkl4NjQsICh1NjQpdHAtPmFkZHJlc3MpOw0K
PiAgCQlpZiAocmV0IDwgMCkNCj4gIAkJCXJldHVybiByZXQ7DQo+IC0tDQo+IDEuOC4zLjQNCg0K
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1213709 — Re: [PATCH v2 2/4] perf probe: Fix list result when address is zero

From"Wangnan (F)" <wangnan0@huawei.com>
Date2015-08-26 11:50 +0200
SubjectRe: [PATCH v2 2/4] perf probe: Fix list result when address is zero
Message-ID<q1Fvb-1Yz-19@gated-at.bofh.it>
In reply to#1213697

On 2015/8/26 17:29, 平松雅巳 / HIRAMATU,MASAMI wrote:
>> From: Wang Nan [mailto:wangnan0@huawei.com]
>>
>> When manually added uprobe point with zero address, 'perf probe -l'
>> reports error. For example:
>>
>>   # echo p:probe_libc/abs_0 /path/to/lib.bin:0x0 arg1=%ax > \
>>             /sys/kernel/debug/tracing/uprobe_events
>>
>>   # perf probe -l
>>   Error: Failed to show event list.
>>
>> Probing at 0x0 is possible and useful when lib.bin is not a normal
>> shared object but is manually mapped. However, in this case kernel
>> report:
>>
>>   # cat /sys/kernel/debug/tracing/uprobe_events
>>   p:probe_libc/abs_0 /tmp/oxygen_root/lib64/libc-2.18.so:0x          (null) arg1=%ax
>>
>> This patch supports the above kernel output.
> Former part is OK to me.
>
>> In addition, this patch also fixes convert_to_perf_probe_point() that,
>> if failed to find probe point from both of dwarf and map, in all cases
>> pp->function should be filled with a strdup() result, or the following
>> ENOMEM error code is incorrect. Remove !tp->module && !is_kprobe
>> condition so always use address to build function name if symbol is not
>> found.
> No, I think this should be included in 3/4, since until that perf probe
> doesn't support absolute address on kernel.

This is for manually introduced probing points.

convert_to_perf_probe_point is called by:

perf probe -l -> show_perf_probe_events -> __show_perf_probe_events --> convert_to_perf_probe_event

If there is a manually inserted probing point there, 'perf probe -l' reports an error.

Here is the result if I remove the second part:

$ git log --oneline  # I'm in 2/4
aae2c2c perf probe: Fix list result when address is zero
931dff5 perf probe: Prevent segfault when reading probe point with 
absolute address
...

$ git diff    # remove the second part
diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c
index 926bcec..de2c27e 100644
--- a/tools/perf/util/probe-event.c
+++ b/tools/perf/util/probe-event.c
@@ -1888,7 +1888,7 @@ static int convert_to_perf_probe_point(struct 
probe_trace_point *tp,
         if (tp->symbol) {
                 pp->function = strdup(tp->symbol);
                 pp->offset = tp->offset;
-       } else {
+       } else if (!tp->module && !is_kprobe) {
                 ret = e_snprintf(buf, 128, "0x%" PRIx64, (u64)tp->address);
                 if (ret < 0)
                         return ret;


...
# echo 'p:probe_libc/abs_5 /lib64/libc.so.6:0x5' > 
/sys/kernel/debug/tracing/uprobe_events
# cat /sys/kernel/debug/tracing/uprobe_events
  p:probe_libc/abs_5 /lib64/libc.so.6:0x0000000000000005
# perf probe -l
   Error: Failed to show event list

Then add it back:

$ git reset --hard HEAD
...
# perf probe -l
  probe_libc:abs_5     (on 0x5 in /lib64/libc.so.6)

Thank you.

> Thank you,
>
>> Signed-off-by: Wang Nan <wangnan0@huawei.com>
>> Cc: Arnaldo Carvalho de Melo <acme@kernel.org>
>> Cc: Ingo Molnar <mingo@redhat.com>
>> Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
>> Cc: Namhyung Kim <namhyung@kernel.org>
>> Cc: Steven Rostedt <rostedt@goodmis.org>
>> ---
>>   tools/perf/util/probe-event.c | 30 ++++++++++++++++++++++++++----
>>   1 file changed, 26 insertions(+), 4 deletions(-)
>>
>> diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c
>> index ef325a2..3ce223d 100644
>> --- a/tools/perf/util/probe-event.c
>> +++ b/tools/perf/util/probe-event.c
>> @@ -1521,9 +1521,31 @@ int parse_probe_trace_command(const char *cmd, struct probe_trace_event *tev)
>>   	} else
>>   		p = argv[1];
>>   	fmt1_str = strtok_r(p, "+", &fmt);
>> -	if (fmt1_str[0] == '0')	/* only the address started with 0x */
>> -		tp->address = strtoul(fmt1_str, NULL, 0);
>> -	else {
>> +	/* only the address started with 0x */
>> +	if (fmt1_str[0] == '0')	{
>> +		/*
>> +		 * Fix a special case:
>> +		 * if address == 0, kernel reports something like:
>> +		 * p:probe_libc/abs_0 /lib/libc-2.18.so:0x          (null) arg1=%ax
>> +		 * Newer kernel may fix that, but we want to
>> +		 * support old kernel also.
>> +		 */
>> +		if (strcmp(fmt1_str, "0x") == 0) {
>> +			if (!argv[2] || strcmp(argv[2], "(null)")) {
>> +				ret = -EINVAL;
>> +				goto out;
>> +			}
>> +			tp->address = 0;
>> +
>> +			free(argv[2]);
>> +			for (i = 2; argv[i + 1] != NULL; i++)
>> +				argv[i] = argv[i + 1];
>> +
>> +			argv[i] = NULL;
>> +			argc -= 1;
>> +		} else
>> +			tp->address = strtoul(fmt1_str, NULL, 0);
>> +	} else {
>>   		/* Only the symbol-based probe has offset */
>>   		tp->symbol = strdup(fmt1_str);
>>   		if (tp->symbol == NULL) {
>> @@ -1868,7 +1890,7 @@ static int convert_to_perf_probe_point(struct probe_trace_point *tp,
>>   	if (tp->symbol) {
>>   		pp->function = strdup(tp->symbol);
>>   		pp->offset = tp->offset;
>> -	} else if (!tp->module && !is_kprobe) {
>> +	} else {
>>   		ret = e_snprintf(buf, 128, "0x%" PRIx64, (u64)tp->address);
>>   		if (ret < 0)
>>   			return ret;
>> --
>> 1.8.3.4


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1213734 — RE: [PATCH v2 2/4] perf probe: Fix list result when address is zero

From平松雅巳 / HIRAMATU,MASAMI <masami.hiramatsu.pt@hitachi.com>
Date2015-08-26 12:50 +0200
SubjectRE: [PATCH v2 2/4] perf probe: Fix list result when address is zero
Message-ID<q1Grg-3jH-21@gated-at.bofh.it>
In reply to#1213709
PiBGcm9tOiBXYW5nbmFuIChGKSBbbWFpbHRvOndhbmduYW4wQGh1YXdlaS5jb21dDQo+ID4+DQo+
ID4+IFdoZW4gbWFudWFsbHkgYWRkZWQgdXByb2JlIHBvaW50IHdpdGggemVybyBhZGRyZXNzLCAn
cGVyZiBwcm9iZSAtbCcNCj4gPj4gcmVwb3J0cyBlcnJvci4gRm9yIGV4YW1wbGU6DQo+ID4+DQo+
ID4+ICAgIyBlY2hvIHA6cHJvYmVfbGliYy9hYnNfMCAvcGF0aC90by9saWIuYmluOjB4MCBhcmcx
PSVheCA+IFwNCj4gPj4gICAgICAgICAgICAgL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy91cHJv
YmVfZXZlbnRzDQo+ID4+DQo+ID4+ICAgIyBwZXJmIHByb2JlIC1sDQo+ID4+ICAgRXJyb3I6IEZh
aWxlZCB0byBzaG93IGV2ZW50IGxpc3QuDQo+ID4+DQo+ID4+IFByb2JpbmcgYXQgMHgwIGlzIHBv
c3NpYmxlIGFuZCB1c2VmdWwgd2hlbiBsaWIuYmluIGlzIG5vdCBhIG5vcm1hbA0KPiA+PiBzaGFy
ZWQgb2JqZWN0IGJ1dCBpcyBtYW51YWxseSBtYXBwZWQuIEhvd2V2ZXIsIGluIHRoaXMgY2FzZSBr
ZXJuZWwNCj4gPj4gcmVwb3J0Og0KPiA+Pg0KPiA+PiAgICMgY2F0IC9zeXMva2VybmVsL2RlYnVn
L3RyYWNpbmcvdXByb2JlX2V2ZW50cw0KPiA+PiAgIHA6cHJvYmVfbGliYy9hYnNfMCAvdG1wL294
eWdlbl9yb290L2xpYjY0L2xpYmMtMi4xOC5zbzoweCAgICAgICAgICAobnVsbCkgYXJnMT0lYXgN
Cj4gPj4NCj4gPj4gVGhpcyBwYXRjaCBzdXBwb3J0cyB0aGUgYWJvdmUga2VybmVsIG91dHB1dC4N
Cj4gPiBGb3JtZXIgcGFydCBpcyBPSyB0byBtZS4NCj4gPg0KPiA+PiBJbiBhZGRpdGlvbiwgdGhp
cyBwYXRjaCBhbHNvIGZpeGVzIGNvbnZlcnRfdG9fcGVyZl9wcm9iZV9wb2ludCgpIHRoYXQsDQo+
ID4+IGlmIGZhaWxlZCB0byBmaW5kIHByb2JlIHBvaW50IGZyb20gYm90aCBvZiBkd2FyZiBhbmQg
bWFwLCBpbiBhbGwgY2FzZXMNCj4gPj4gcHAtPmZ1bmN0aW9uIHNob3VsZCBiZSBmaWxsZWQgd2l0
aCBhIHN0cmR1cCgpIHJlc3VsdCwgb3IgdGhlIGZvbGxvd2luZw0KPiA+PiBFTk9NRU0gZXJyb3Ig
Y29kZSBpcyBpbmNvcnJlY3QuIFJlbW92ZSAhdHAtPm1vZHVsZSAmJiAhaXNfa3Byb2JlDQo+ID4+
IGNvbmRpdGlvbiBzbyBhbHdheXMgdXNlIGFkZHJlc3MgdG8gYnVpbGQgZnVuY3Rpb24gbmFtZSBp
ZiBzeW1ib2wgaXMgbm90DQo+ID4+IGZvdW5kLg0KPiA+IE5vLCBJIHRoaW5rIHRoaXMgc2hvdWxk
IGJlIGluY2x1ZGVkIGluIDMvNCwgc2luY2UgdW50aWwgdGhhdCBwZXJmIHByb2JlDQo+ID4gZG9l
c24ndCBzdXBwb3J0IGFic29sdXRlIGFkZHJlc3Mgb24ga2VybmVsLg0KPiANCj4gVGhpcyBpcyBm
b3IgbWFudWFsbHkgaW50cm9kdWNlZCBwcm9iaW5nIHBvaW50cy4NCj4gDQo+IGNvbnZlcnRfdG9f
cGVyZl9wcm9iZV9wb2ludCBpcyBjYWxsZWQgYnk6DQo+IA0KPiBwZXJmIHByb2JlIC1sIC0+IHNo
b3dfcGVyZl9wcm9iZV9ldmVudHMgLT4gX19zaG93X3BlcmZfcHJvYmVfZXZlbnRzIC0tPiBjb252
ZXJ0X3RvX3BlcmZfcHJvYmVfZXZlbnQNCj4gDQo+IElmIHRoZXJlIGlzIGEgbWFudWFsbHkgaW5z
ZXJ0ZWQgcHJvYmluZyBwb2ludCB0aGVyZSwgJ3BlcmYgcHJvYmUgLWwnIHJlcG9ydHMgYW4gZXJy
b3IuDQo+IA0KPiBIZXJlIGlzIHRoZSByZXN1bHQgaWYgSSByZW1vdmUgdGhlIHNlY29uZCBwYXJ0
Og0KPiANCj4gJCBnaXQgbG9nIC0tb25lbGluZSAgIyBJJ20gaW4gMi80DQo+IGFhZTJjMmMgcGVy
ZiBwcm9iZTogRml4IGxpc3QgcmVzdWx0IHdoZW4gYWRkcmVzcyBpcyB6ZXJvDQo+IDkzMWRmZjUg
cGVyZiBwcm9iZTogUHJldmVudCBzZWdmYXVsdCB3aGVuIHJlYWRpbmcgcHJvYmUgcG9pbnQgd2l0
aA0KPiBhYnNvbHV0ZSBhZGRyZXNzDQo+IC4uLg0KPiANCj4gJCBnaXQgZGlmZiAgICAjIHJlbW92
ZSB0aGUgc2Vjb25kIHBhcnQNCj4gZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1l
dmVudC5jIGIvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWV2ZW50LmMNCj4gaW5kZXggOTI2YmNlYy4u
ZGUyYzI3ZSAxMDA2NDQNCj4gLS0tIGEvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWV2ZW50LmMNCj4g
KysrIGIvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWV2ZW50LmMNCj4gQEAgLTE4ODgsNyArMTg4OCw3
IEBAIHN0YXRpYyBpbnQgY29udmVydF90b19wZXJmX3Byb2JlX3BvaW50KHN0cnVjdA0KPiBwcm9i
ZV90cmFjZV9wb2ludCAqdHAsDQo+ICAgICAgICAgIGlmICh0cC0+c3ltYm9sKSB7DQo+ICAgICAg
ICAgICAgICAgICAgcHAtPmZ1bmN0aW9uID0gc3RyZHVwKHRwLT5zeW1ib2wpOw0KPiAgICAgICAg
ICAgICAgICAgIHBwLT5vZmZzZXQgPSB0cC0+b2Zmc2V0Ow0KPiAtICAgICAgIH0gZWxzZSB7DQo+
ICsgICAgICAgfSBlbHNlIGlmICghdHAtPm1vZHVsZSAmJiAhaXNfa3Byb2JlKSB7DQo+ICAgICAg
ICAgICAgICAgICAgcmV0ID0gZV9zbnByaW50ZihidWYsIDEyOCwgIjB4JSIgUFJJeDY0LCAodTY0
KXRwLT5hZGRyZXNzKTsNCj4gICAgICAgICAgICAgICAgICBpZiAocmV0IDwgMCkNCj4gICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7DQo+IA0KPiANCj4gLi4uDQo+ICMgZWNobyAn
cDpwcm9iZV9saWJjL2Fic181IC9saWI2NC9saWJjLnNvLjY6MHg1JyA+DQo+IC9zeXMva2VybmVs
L2RlYnVnL3RyYWNpbmcvdXByb2JlX2V2ZW50cw0KPiAjIGNhdCAvc3lzL2tlcm5lbC9kZWJ1Zy90
cmFjaW5nL3Vwcm9iZV9ldmVudHMNCj4gICBwOnByb2JlX2xpYmMvYWJzXzUgL2xpYjY0L2xpYmMu
c28uNjoweDAwMDAwMDAwMDAwMDAwMDUNCj4gIyBwZXJmIHByb2JlIC1sDQo+ICAgIEVycm9yOiBG
YWlsZWQgdG8gc2hvdyBldmVudCBsaXN0DQo+IA0KPiBUaGVuIGFkZCBpdCBiYWNrOg0KPiANCj4g
JCBnaXQgcmVzZXQgLS1oYXJkIEhFQUQNCj4gLi4uDQo+ICMgcGVyZiBwcm9iZSAtbA0KPiAgIHBy
b2JlX2xpYmM6YWJzXzUgICAgIChvbiAweDUgaW4gL2xpYjY0L2xpYmMuc28uNikNCg0KSG1tLCBP
SywgdGhlbiB0aGlzIHNob3VsZCBiZSBpbiB0aGUgMS80IG9yIHNwbGl0dGVkIGFzIGFuIGluZGVw
ZW5kZW50IHBhdGNoLA0KYmVjYXVzZSB0aGlzIHBhcnQgaXQgaXMgbm90ICJ3aGVuIGFkZHJlc3Mg
aXMgemVybyIsIGp1c3Qgc3VwcG9ydCBzaG93aW5nDQphYnNvbHV0ZSBhZGRyZXNzIHByb2JlcyBv
biB1c2VyIGFwcGxpY2F0aW9ucy4NCg0KVGhhbmsgeW91LA0KDQo=
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1213630 — [PATCH v2 4/4] tracing/uprobes: Do not print '0x (null)' when offset is 0

FromWang Nan <wangnan0@huawei.com>
Date2015-08-26 09:50 +0200
Subject[PATCH v2 4/4] tracing/uprobes: Do not print '0x (null)' when offset is 0
Message-ID<q1DD5-7K7-29@gated-at.bofh.it>
In reply to#1213621
When manually added uprobe point with zero address, 'uprobe_events' output
'(null)' instead of 0x00000000:

 # echo p:probe_libc/abs_0 /path/to/lib.bin:0x0 arg1=%ax > \
            /sys/kernel/debug/tracing/uprobe_events

 # cat /sys/kernel/debug/tracing/uprobe_events
   p:probe_libc/abs_0 /path/to/lib.bin:0x          (null) arg1=%ax

This patch fixes this behavior:

 # cat /sys/kernel/debug/tracing/uprobe_events
 p:probe_libc/abs_0 /path/to/lib.bin:0x0000000000000000

Signed-off-by: Wang Nan <wangnan0@huawei.com>
Cc: Arnaldo Carvalho de Melo <acme@kernel.org>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Steven Rostedt <rostedt@goodmis.org>
---
 kernel/trace/trace_uprobe.c | 17 ++++++++++++++++-
 1 file changed, 16 insertions(+), 1 deletion(-)

diff --git a/kernel/trace/trace_uprobe.c b/kernel/trace/trace_uprobe.c
index f97479f..d2f6d0b 100644
--- a/kernel/trace/trace_uprobe.c
+++ b/kernel/trace/trace_uprobe.c
@@ -601,7 +601,22 @@ static int probes_seq_show(struct seq_file *m, void *v)
 
 	seq_printf(m, "%c:%s/%s", c, tu->tp.call.class->system,
 			trace_event_name(&tu->tp.call));
-	seq_printf(m, " %s:0x%p", tu->filename, (void *)tu->offset);
+	seq_printf(m, " %s:", tu->filename);
+
+	/* Don't print "0x  (null)" when offset is 0 */
+	if (tu->offset) {
+		seq_printf(m, "0x%p", (void *)tu->offset);
+	} else {
+		switch (sizeof(void *)) {
+		case 4:
+			seq_printf(m, "0x00000000");
+			break;
+		case 8:
+		default:
+			seq_printf(m, "0x0000000000000000");
+			break;
+		}
+	}
 
 	for (i = 0; i < tu->tp.nr_args; i++)
 		seq_printf(m, " %s=%s", tu->tp.args[i].name, tu->tp.args[i].comm);
-- 
1.8.3.4

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1213713 — RE: [PATCH v2 4/4] tracing/uprobes: Do not print '0x (null)' when offset is 0

From平松雅巳 / HIRAMATU,MASAMI <masami.hiramatsu.pt@hitachi.com>
Date2015-08-26 12:10 +0200
SubjectRE: [PATCH v2 4/4] tracing/uprobes: Do not print '0x (null)' when offset is 0
Message-ID<q1FOy-2Am-11@gated-at.bofh.it>
In reply to#1213630
PiBGcm9tOiBXYW5nIE5hbiBbbWFpbHRvOndhbmduYW4wQGh1YXdlaS5jb21dDQo+IA0KPiBXaGVu
IG1hbnVhbGx5IGFkZGVkIHVwcm9iZSBwb2ludCB3aXRoIHplcm8gYWRkcmVzcywgJ3Vwcm9iZV9l
dmVudHMnIG91dHB1dA0KPiAnKG51bGwpJyBpbnN0ZWFkIG9mIDB4MDAwMDAwMDA6DQo+IA0KPiAg
IyBlY2hvIHA6cHJvYmVfbGliYy9hYnNfMCAvcGF0aC90by9saWIuYmluOjB4MCBhcmcxPSVheCA+
IFwNCj4gICAgICAgICAgICAgL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy91cHJvYmVfZXZlbnRz
DQo+IA0KPiAgIyBjYXQgL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy91cHJvYmVfZXZlbnRzDQo+
ICAgIHA6cHJvYmVfbGliYy9hYnNfMCAvcGF0aC90by9saWIuYmluOjB4ICAgICAgICAgIChudWxs
KSBhcmcxPSVheA0KPiANCj4gVGhpcyBwYXRjaCBmaXhlcyB0aGlzIGJlaGF2aW9yOg0KPiANCj4g
ICMgY2F0IC9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvdXByb2JlX2V2ZW50cw0KPiAgcDpwcm9i
ZV9saWJjL2Fic18wIC9wYXRoL3RvL2xpYi5iaW46MHgwMDAwMDAwMDAwMDAwMDAwDQoNCg0KTG9v
a3MgR29vZCB0byBtZSA6KQ0KDQpBY2tlZC1ieTogTWFzYW1pIEhpcmFtYXRzdSA8bWFzYW1pLmhp
cmFtYXRzdS5wdEBoaXRhY2hpLmNvbT4NCg0KVGhhbmtzIQ0KDQo+IA0KPiBTaWduZWQtb2ZmLWJ5
OiBXYW5nIE5hbiA8d2FuZ25hbjBAaHVhd2VpLmNvbT4NCj4gQ2M6IEFybmFsZG8gQ2FydmFsaG8g
ZGUgTWVsbyA8YWNtZUBrZXJuZWwub3JnPg0KPiBDYzogSW5nbyBNb2xuYXIgPG1pbmdvQHJlZGhh
dC5jb20+DQo+IENjOiBNYXNhbWkgSGlyYW1hdHN1IDxtYXNhbWkuaGlyYW1hdHN1LnB0QGhpdGFj
aGkuY29tPg0KPiBDYzogTmFtaHl1bmcgS2ltIDxuYW1oeXVuZ0BrZXJuZWwub3JnPg0KPiBDYzog
U3RldmVuIFJvc3RlZHQgPHJvc3RlZHRAZ29vZG1pcy5vcmc+DQo+IC0tLQ0KPiAga2VybmVsL3Ry
YWNlL3RyYWNlX3Vwcm9iZS5jIHwgMTcgKysrKysrKysrKysrKysrKy0NCj4gIDEgZmlsZSBjaGFu
Z2VkLCAxNiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pDQo+IA0KPiBkaWZmIC0tZ2l0IGEv
a2VybmVsL3RyYWNlL3RyYWNlX3Vwcm9iZS5jIGIva2VybmVsL3RyYWNlL3RyYWNlX3Vwcm9iZS5j
DQo+IGluZGV4IGY5NzQ3OWYuLmQyZjZkMGIgMTAwNjQ0DQo+IC0tLSBhL2tlcm5lbC90cmFjZS90
cmFjZV91cHJvYmUuYw0KPiArKysgYi9rZXJuZWwvdHJhY2UvdHJhY2VfdXByb2JlLmMNCj4gQEAg
LTYwMSw3ICs2MDEsMjIgQEAgc3RhdGljIGludCBwcm9iZXNfc2VxX3Nob3coc3RydWN0IHNlcV9m
aWxlICptLCB2b2lkICp2KQ0KPiANCj4gIAlzZXFfcHJpbnRmKG0sICIlYzolcy8lcyIsIGMsIHR1
LT50cC5jYWxsLmNsYXNzLT5zeXN0ZW0sDQo+ICAJCQl0cmFjZV9ldmVudF9uYW1lKCZ0dS0+dHAu
Y2FsbCkpOw0KPiAtCXNlcV9wcmludGYobSwgIiAlczoweCVwIiwgdHUtPmZpbGVuYW1lLCAodm9p
ZCAqKXR1LT5vZmZzZXQpOw0KPiArCXNlcV9wcmludGYobSwgIiAlczoiLCB0dS0+ZmlsZW5hbWUp
Ow0KPiArDQo+ICsJLyogRG9uJ3QgcHJpbnQgIjB4ICAobnVsbCkiIHdoZW4gb2Zmc2V0IGlzIDAg
Ki8NCj4gKwlpZiAodHUtPm9mZnNldCkgew0KPiArCQlzZXFfcHJpbnRmKG0sICIweCVwIiwgKHZv
aWQgKil0dS0+b2Zmc2V0KTsNCj4gKwl9IGVsc2Ugew0KPiArCQlzd2l0Y2ggKHNpemVvZih2b2lk
ICopKSB7DQo+ICsJCWNhc2UgNDoNCj4gKwkJCXNlcV9wcmludGYobSwgIjB4MDAwMDAwMDAiKTsN
Cj4gKwkJCWJyZWFrOw0KPiArCQljYXNlIDg6DQo+ICsJCWRlZmF1bHQ6DQo+ICsJCQlzZXFfcHJp
bnRmKG0sICIweDAwMDAwMDAwMDAwMDAwMDAiKTsNCj4gKwkJCWJyZWFrOw0KPiArCQl9DQo+ICsJ
fQ0KPiANCj4gIAlmb3IgKGkgPSAwOyBpIDwgdHUtPnRwLm5yX2FyZ3M7IGkrKykNCj4gIAkJc2Vx
X3ByaW50ZihtLCAiICVzPSVzIiwgdHUtPnRwLmFyZ3NbaV0ubmFtZSwgdHUtPnRwLmFyZ3NbaV0u
Y29tbSk7DQo+IC0tDQo+IDEuOC4zLjQNCg0K
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1213631 — [PATCH v2 3/4] perf probe: Support probing at absolute address

FromWang Nan <wangnan0@huawei.com>
Date2015-08-26 09:50 +0200
Subject[PATCH v2 3/4] perf probe: Support probing at absolute address
Message-ID<q1DD4-7K7-25@gated-at.bofh.it>
In reply to#1213621
It should be useful to allow 'perf probe' probe at absolute offset of
a target. For example, when (u)probing at a instruction of a shared
object in a embedded system where debuginfo is not avaliable but we
know the offset of that instruction by manually digging.

This patch enables following perf probe command syntax:

 # perf probe 0xffffffff811e6615

And

 # perf probe /lib/x86_64-linux-gnu/libc-2.19.so 0xeb860

In the above example, we don't need a anchor symbol, so it is possible
to compute absolute addresses using other methods and then use
'perf probe' to create the probing points.

This patch also fix a bug that, when offset is provided but function is
skipped, parse_perf_probe_point() will give function a "" string, so
the checking code at the end of this function is not used. For example:

 # perf probe +0x1234
 Failed to find symbol  in kernel
   Error: Failed to add events.

After this patch:

 # perf probe +0x1234
 Semantic error :Offset requires an entry function.
   Error: Command Parse Error.

v1 -> v2:
  Drop the leading '+' in cmdline;
  Allow uprobing at offset 0x0;
  Improve 'perf probe -l' result when uprobe at area without debuginfo.

Test result:

 # perf probe 0xffffffff8119d175 %ax
 # perf probe sys_write %ax
 # perf probe /lib64/libc-2.18.so 0x0 %ax
 # perf probe /lib64/libc-2.18.so 0x5 %ax
 # perf probe /lib64/libc-2.18.so 0xd8e40 %ax
 # perf probe /lib64/libc-2.18.so __write %ax
 # perf probe /lib64/libc-2.18.so 0xd8e49 %ax
 # cat /sys/kernel/debug/tracing/uprobe_events

 p:probe_libc/abs_0 /lib64/libc-2.18.so:0x          (null) arg1=%ax
 p:probe_libc/abs_5 /lib64/libc-2.18.so:0x0000000000000005 arg1=%ax
 p:probe_libc/abs_d8e40 /lib64/libc-2.18.so:0x00000000000d8e40 arg1=%ax
 p:probe_libc/__write /lib64/libc-2.18.so:0x00000000000d8e40 arg1=%ax
 p:probe_libc/abs_d8e49 /lib64/libc-2.18.so:0x00000000000d8e49 arg1=%ax

 # cat /sys/kernel/debug/tracing/kprobe_events

 p:probe/abs_ffffffff8119d175 0xffffffff8119d175 arg1=%ax
 p:probe/sys_write _text+1692016 arg1=%ax

 # perf probe -l

 Failed to find debug information for address 5
   probe:abs_ffffffff8119d175 (on sys_write+5 with arg1)
   probe:sys_write      (on sys_write with arg1)
   probe_libc:__write   (on @unix/syscall-template.S:81 in /lib64/libc-2.18.so with arg1)
   probe_libc:abs_0     (on 0x0 in /lib64/libc-2.18.so with arg1)
   probe_libc:abs_5     (on 0x5 in /lib64/libc-2.18.so with arg1)
   probe_libc:abs_d8e40 (on @unix/syscall-template.S:81 in /lib64/libc-2.18.so with arg1)
   probe_libc:abs_d8e49 (on __GI___libc_write+9 in /lib64/libc-2.18.so with arg1)

Signed-off-by: Wang Nan <wangnan0@huawei.com>
Cc: Arnaldo Carvalho de Melo <acme@kernel.org>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Steven Rostedt <rostedt@goodmis.org>
---
 tools/perf/util/probe-event.c  | 172 ++++++++++++++++++++++++++++++++++++++---
 tools/perf/util/probe-event.h  |   4 +
 tools/perf/util/probe-finder.c |  21 +----
 3 files changed, 170 insertions(+), 27 deletions(-)

diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c
index 3ce223d..b94a8d7 100644
--- a/tools/perf/util/probe-event.c
+++ b/tools/perf/util/probe-event.c
@@ -1196,15 +1196,37 @@ static int parse_perf_probe_point(char *arg, struct perf_probe_event *pev)
 		*ptr++ = '\0';
 	}
 
-	tmp = strdup(arg);
-	if (tmp == NULL)
-		return -ENOMEM;
+	if (arg[0] == '\0')
+		tmp = NULL;
+	else {
+		tmp = strdup(arg);
+		if (tmp == NULL)
+			return -ENOMEM;
+	}
 
 	if (file_spec)
 		pp->file = tmp;
-	else
+	else {
 		pp->function = tmp;
 
+		/*
+		 * Keep pp->function even if this is absolute address,
+		 * so it can mark whether abs_address is valid.
+		 * Which make 'perf probe lib.bin 0x0' possible.
+		 *
+		 * Note that checking length of tmp is not needed
+		 * because when we access tmp[1] we know tmp[0] is '0',
+		 * so tmp[1] should always valid (but could be '\0').
+		 */
+		if (tmp && !strncmp(tmp, "0x", 2)) {
+			pp->abs_address = strtoul(pp->function, &tmp, 0);
+			if (*tmp != '\0') {
+				semantic_error("Invalid absolute address.\n");
+				return -EINVAL;
+			}
+		}
+	}
+
 	/* Parse other options */
 	while (ptr) {
 		arg = ptr;
@@ -1802,14 +1824,29 @@ char *synthesize_probe_trace_command(struct probe_trace_event *tev)
 	if (len <= 0)
 		goto error;
 
-	/* Uprobes must have tp->address and tp->module */
-	if (tev->uprobes && (!tp->address || !tp->module))
+	/* Uprobes must have tp->module */
+	if (tev->uprobes && !tp->module)
 		goto error;
+	/*
+	 * If tp->address == 0, then this point must be a
+	 * absolute address uprobe.
+	 * try_to_find_absolute_address() should have made
+	 * tp->symbol to "0x0".
+	 */
+	if (tev->uprobes && !tp->address) {
+		if (!tp->symbol || strcmp(tp->symbol, "0x0"))
+			goto error;
+	}
 
 	/* Use the tp->address for uprobes */
 	if (tev->uprobes)
 		ret = e_snprintf(buf + len, MAX_CMDLEN - len, "%s:0x%lx",
 				 tp->module, tp->address);
+	else if (!strncmp(tp->symbol, "0x", 2))
+		/* Absolute address. See try_to_find_absolute_address() */
+		ret = e_snprintf(buf + len, MAX_CMDLEN - len, "%s%s0x%lx",
+				 tp->module ?: "", tp->module ? ":" : "",
+				 tp->address);
 	else
 		ret = e_snprintf(buf + len, MAX_CMDLEN - len, "%s%s%s+%lu",
 				 tp->module ?: "", tp->module ? ":" : "",
@@ -1872,8 +1909,8 @@ out:
 }
 
 static int convert_to_perf_probe_point(struct probe_trace_point *tp,
-					struct perf_probe_point *pp,
-					bool is_kprobe)
+				       struct perf_probe_point *pp,
+				       bool is_kprobe)
 {
 	char buf[128];
 	int ret;
@@ -2334,7 +2371,9 @@ static int probe_trace_event__set_name(struct probe_trace_event *tev,
 	if (pev->event)
 		event = pev->event;
 	else
-		if (pev->point.function && !strisglob(pev->point.function))
+		if (pev->point.function &&
+			(strncmp(pev->point.function, "0x", 2) != 0) &&
+			!strisglob(pev->point.function))
 			event = pev->point.function;
 		else
 			event = tev->point.realname;
@@ -2604,6 +2643,98 @@ err_out:
 	goto out;
 }
 
+static int try_to_find_absolute_address(struct perf_probe_event *pev,
+					struct probe_trace_event **tevs)
+{
+	struct perf_probe_point *pp = &pev->point;
+	struct probe_trace_event *tev;
+	struct probe_trace_point *tp;
+	int i, err;
+
+	if (!(pev->point.function && !strncmp(pev->point.function, "0x", 2)))
+		return -EINVAL;
+	if (perf_probe_event_need_dwarf(pev))
+		return -EINVAL;
+
+	/*
+	 * This is 'perf probe /lib/libc.so 0xabcd'. Try to probe at
+	 * absolute address.
+	 *
+	 * Only one tev can be generated by this.
+	 */
+	*tevs = zalloc(sizeof(*tev));
+	if (!*tevs)
+		return -ENOMEM;
+
+	tev = *tevs;
+	tp = &tev->point;
+
+	/*
+	 * Don't use tp->offset, use address directly, because
+	 * in synthesize_probe_trace_command() address cannot be
+	 * zero.
+	 */
+	tp->address = pev->point.abs_address;
+	tp->retprobe = pp->retprobe;
+	tev->uprobes = pev->uprobes;
+
+	err = -ENOMEM;
+	/*
+	 * Give it a '0x' leading symbol name.
+	 * In __add_probe_trace_events, a NULL symbol is interpreted as
+	 * invalud.
+	 */
+	if (asprintf(&tp->symbol, "0x%lx", tp->address) < 0)
+		goto errout;
+
+	/* For kprobe, check range */
+	if ((!tev->uprobes) &&
+	    (kprobe_warn_out_range(tev->point.symbol,
+				   tev->point.address))) {
+		err = -EACCES;
+		goto errout;
+	}
+
+	if (asprintf(&tp->realname, "abs_%lx", tp->address) < 0)
+		goto errout;
+
+	if (pev->target) {
+		tp->module = strdup(pev->target);
+		if (!tp->module)
+			goto errout;
+	}
+
+	if (tev->group) {
+		tev->group = strdup(pev->group);
+		if (!tev->group)
+			goto errout;
+	}
+
+	if (pev->event) {
+		tev->event = strdup(pev->event);
+		if (!tev->event)
+			goto errout;
+	}
+
+	tev->nargs = pev->nargs;
+	tev->args = zalloc(sizeof(struct probe_trace_arg) * tev->nargs);
+	if (!tev->args) {
+		err = -ENOMEM;
+		goto errout;
+	}
+	for (i = 0; i < tev->nargs; i++)
+		copy_to_probe_trace_arg(&tev->args[i], &pev->args[i]);
+
+	return 1;
+
+errout:
+	if (*tevs) {
+		clear_probe_trace_events(*tevs, 1);
+		*tevs = NULL;
+	}
+	return err;
+}
+
 bool __weak arch__prefers_symtab(void) { return false; }
 
 static int convert_to_probe_trace_events(struct perf_probe_event *pev,
@@ -2620,6 +2751,10 @@ static int convert_to_probe_trace_events(struct perf_probe_event *pev,
 		}
 	}
 
+	ret = try_to_find_absolute_address(pev, tevs);
+	if (ret > 0)
+		return ret;
+
 	if (arch__prefers_symtab() && !perf_probe_event_need_dwarf(pev)) {
 		ret = find_probe_trace_events_from_map(pev, tevs);
 		if (ret > 0)
@@ -2787,3 +2922,22 @@ end:
 	return ret;
 }
 
+int copy_to_probe_trace_arg(struct probe_trace_arg *tvar,
+			    struct perf_probe_arg *pvar)
+{
+	tvar->value = strdup(pvar->var);
+	if (tvar->value == NULL)
+		return -ENOMEM;
+	if (pvar->type) {
+		tvar->type = strdup(pvar->type);
+		if (tvar->type == NULL)
+			return -ENOMEM;
+	}
+	if (pvar->name) {
+		tvar->name = strdup(pvar->name);
+		if (tvar->name == NULL)
+			return -ENOMEM;
+	} else
+		tvar->name = NULL;
+	return 0;
+}
diff --git a/tools/perf/util/probe-event.h b/tools/perf/util/probe-event.h
index 9c7b99e..de0dd13 100644
--- a/tools/perf/util/probe-event.h
+++ b/tools/perf/util/probe-event.h
@@ -61,6 +61,7 @@ struct perf_probe_point {
 	bool		retprobe;	/* Return probe flag */
 	char		*lazy_line;	/* Lazy matching pattern */
 	unsigned long	offset;		/* Offset from function entry */
+	unsigned long	abs_address;	/* Absolute address of the point */
 };
 
 /* Perf probe probing argument field chain */
@@ -162,4 +163,7 @@ int e_snprintf(char *str, size_t size, const char *format, ...)
 /* Maximum index number of event-name postfix */
 #define MAX_EVENT_INDEX	1024
 
+int copy_to_probe_trace_arg(struct probe_trace_arg *tvar,
+			    struct perf_probe_arg *pvar);
+
 #endif /*_PROBE_EVENT_H */
diff --git a/tools/perf/util/probe-finder.c b/tools/perf/util/probe-finder.c
index 4b1e074..5ab9cd6 100644
--- a/tools/perf/util/probe-finder.c
+++ b/tools/perf/util/probe-finder.c
@@ -553,24 +553,9 @@ static int find_variable(Dwarf_Die *sc_die, struct probe_finder *pf)
 	char buf[32], *ptr;
 	int ret = 0;
 
-	if (!is_c_varname(pf->pvar->var)) {
-		/* Copy raw parameters */
-		pf->tvar->value = strdup(pf->pvar->var);
-		if (pf->tvar->value == NULL)
-			return -ENOMEM;
-		if (pf->pvar->type) {
-			pf->tvar->type = strdup(pf->pvar->type);
-			if (pf->tvar->type == NULL)
-				return -ENOMEM;
-		}
-		if (pf->pvar->name) {
-			pf->tvar->name = strdup(pf->pvar->name);
-			if (pf->tvar->name == NULL)
-				return -ENOMEM;
-		} else
-			pf->tvar->name = NULL;
-		return 0;
-	}
+	/* Copy raw parameters */
+	if (!is_c_varname(pf->pvar->var))
+		return copy_to_probe_trace_arg(pf->tvar, pf->pvar);
 
 	if (pf->pvar->name)
 		pf->tvar->name = strdup(pf->pvar->name);
-- 
1.8.3.4

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1213707 — RE: [PATCH v2 3/4] perf probe: Support probing at absolute address

From平松雅巳 / HIRAMATU,MASAMI <masami.hiramatsu.pt@hitachi.com>
Date2015-08-26 11:50 +0200
SubjectRE: [PATCH v2 3/4] perf probe: Support probing at absolute address
Message-ID<q1Fvb-1Yz-13@gated-at.bofh.it>
In reply to#1213631
PiBGcm9tOiBXYW5nIE5hbiBbbWFpbHRvOndhbmduYW4wQGh1YXdlaS5jb21dDQo+IA0KPiBJdCBz
aG91bGQgYmUgdXNlZnVsIHRvIGFsbG93ICdwZXJmIHByb2JlJyBwcm9iZSBhdCBhYnNvbHV0ZSBv
ZmZzZXQgb2YNCj4gYSB0YXJnZXQuIEZvciBleGFtcGxlLCB3aGVuICh1KXByb2JpbmcgYXQgYSBp
bnN0cnVjdGlvbiBvZiBhIHNoYXJlZA0KPiBvYmplY3QgaW4gYSBlbWJlZGRlZCBzeXN0ZW0gd2hl
cmUgZGVidWdpbmZvIGlzIG5vdCBhdmFsaWFibGUgYnV0IHdlDQo+IGtub3cgdGhlIG9mZnNldCBv
ZiB0aGF0IGluc3RydWN0aW9uIGJ5IG1hbnVhbGx5IGRpZ2dpbmcuDQo+IA0KPiBUaGlzIHBhdGNo
IGVuYWJsZXMgZm9sbG93aW5nIHBlcmYgcHJvYmUgY29tbWFuZCBzeW50YXg6DQo+IA0KPiAgIyBw
ZXJmIHByb2JlIDB4ZmZmZmZmZmY4MTFlNjYxNQ0KPiANCj4gQW5kDQo+IA0KPiAgIyBwZXJmIHBy
b2JlIC9saWIveDg2XzY0LWxpbnV4LWdudS9saWJjLTIuMTkuc28gMHhlYjg2MA0KPiANCj4gSW4g
dGhlIGFib3ZlIGV4YW1wbGUsIHdlIGRvbid0IG5lZWQgYSBhbmNob3Igc3ltYm9sLCBzbyBpdCBp
cyBwb3NzaWJsZQ0KPiB0byBjb21wdXRlIGFic29sdXRlIGFkZHJlc3NlcyB1c2luZyBvdGhlciBt
ZXRob2RzIGFuZCB0aGVuIHVzZQ0KPiAncGVyZiBwcm9iZScgdG8gY3JlYXRlIHRoZSBwcm9iaW5n
IHBvaW50cy4NCg0KT0ssIHRoaXMgbG9va3MgZ29vZCA6KQ0KDQo+IA0KPiBUaGlzIHBhdGNoIGFs
c28gZml4IGEgYnVnIHRoYXQsIHdoZW4gb2Zmc2V0IGlzIHByb3ZpZGVkIGJ1dCBmdW5jdGlvbiBp
cw0KPiBza2lwcGVkLCBwYXJzZV9wZXJmX3Byb2JlX3BvaW50KCkgd2lsbCBnaXZlIGZ1bmN0aW9u
IGEgIiIgc3RyaW5nLCBzbw0KPiB0aGUgY2hlY2tpbmcgY29kZSBhdCB0aGUgZW5kIG9mIHRoaXMg
ZnVuY3Rpb24gaXMgbm90IHVzZWQuIEZvciBleGFtcGxlOg0KPiANCj4gICMgcGVyZiBwcm9iZSAr
MHgxMjM0DQo+ICBGYWlsZWQgdG8gZmluZCBzeW1ib2wgIGluIGtlcm5lbA0KPiAgICBFcnJvcjog
RmFpbGVkIHRvIGFkZCBldmVudHMuDQo+IA0KPiBBZnRlciB0aGlzIHBhdGNoOg0KPiANCj4gICMg
cGVyZiBwcm9iZSArMHgxMjM0DQo+ICBTZW1hbnRpYyBlcnJvciA6T2Zmc2V0IHJlcXVpcmVzIGFu
IGVudHJ5IGZ1bmN0aW9uLg0KPiAgICBFcnJvcjogQ29tbWFuZCBQYXJzZSBFcnJvci4NCg0KSG1t
LCBjb3VsZCB5b3UgcGxlYXNlIHNwbGl0IHRoZSBidWdmaXggZnJvbSBmZWF0dXJlIGFkZGl0aW9u
IHBhdGNoPw0KDQpUaGFuayB5b3UsDQoNCj4gDQo+IHYxIC0+IHYyOg0KPiAgIERyb3AgdGhlIGxl
YWRpbmcgJysnIGluIGNtZGxpbmU7DQo+ICAgQWxsb3cgdXByb2JpbmcgYXQgb2Zmc2V0IDB4MDsN
Cj4gICBJbXByb3ZlICdwZXJmIHByb2JlIC1sJyByZXN1bHQgd2hlbiB1cHJvYmUgYXQgYXJlYSB3
aXRob3V0IGRlYnVnaW5mby4NCj4gDQo+IFRlc3QgcmVzdWx0Og0KPiANCj4gICMgcGVyZiBwcm9i
ZSAweGZmZmZmZmZmODExOWQxNzUgJWF4DQo+ICAjIHBlcmYgcHJvYmUgc3lzX3dyaXRlICVheA0K
PiAgIyBwZXJmIHByb2JlIC9saWI2NC9saWJjLTIuMTguc28gMHgwICVheA0KPiAgIyBwZXJmIHBy
b2JlIC9saWI2NC9saWJjLTIuMTguc28gMHg1ICVheA0KPiAgIyBwZXJmIHByb2JlIC9saWI2NC9s
aWJjLTIuMTguc28gMHhkOGU0MCAlYXgNCj4gICMgcGVyZiBwcm9iZSAvbGliNjQvbGliYy0yLjE4
LnNvIF9fd3JpdGUgJWF4DQo+ICAjIHBlcmYgcHJvYmUgL2xpYjY0L2xpYmMtMi4xOC5zbyAweGQ4
ZTQ5ICVheA0KPiAgIyBjYXQgL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy91cHJvYmVfZXZlbnRz
DQo+IA0KPiAgcDpwcm9iZV9saWJjL2Fic18wIC9saWI2NC9saWJjLTIuMTguc286MHggICAgICAg
ICAgKG51bGwpIGFyZzE9JWF4DQo+ICBwOnByb2JlX2xpYmMvYWJzXzUgL2xpYjY0L2xpYmMtMi4x
OC5zbzoweDAwMDAwMDAwMDAwMDAwMDUgYXJnMT0lYXgNCj4gIHA6cHJvYmVfbGliYy9hYnNfZDhl
NDAgL2xpYjY0L2xpYmMtMi4xOC5zbzoweDAwMDAwMDAwMDAwZDhlNDAgYXJnMT0lYXgNCj4gIHA6
cHJvYmVfbGliYy9fX3dyaXRlIC9saWI2NC9saWJjLTIuMTguc286MHgwMDAwMDAwMDAwMGQ4ZTQw
IGFyZzE9JWF4DQo+ICBwOnByb2JlX2xpYmMvYWJzX2Q4ZTQ5IC9saWI2NC9saWJjLTIuMTguc286
MHgwMDAwMDAwMDAwMGQ4ZTQ5IGFyZzE9JWF4DQo+IA0KPiAgIyBjYXQgL3N5cy9rZXJuZWwvZGVi
dWcvdHJhY2luZy9rcHJvYmVfZXZlbnRzDQo+IA0KPiAgcDpwcm9iZS9hYnNfZmZmZmZmZmY4MTE5
ZDE3NSAweGZmZmZmZmZmODExOWQxNzUgYXJnMT0lYXgNCj4gIHA6cHJvYmUvc3lzX3dyaXRlIF90
ZXh0KzE2OTIwMTYgYXJnMT0lYXgNCj4gDQo+ICAjIHBlcmYgcHJvYmUgLWwNCj4gDQo+ICBGYWls
ZWQgdG8gZmluZCBkZWJ1ZyBpbmZvcm1hdGlvbiBmb3IgYWRkcmVzcyA1DQo+ICAgIHByb2JlOmFi
c19mZmZmZmZmZjgxMTlkMTc1IChvbiBzeXNfd3JpdGUrNSB3aXRoIGFyZzEpDQo+ICAgIHByb2Jl
OnN5c193cml0ZSAgICAgIChvbiBzeXNfd3JpdGUgd2l0aCBhcmcxKQ0KPiAgICBwcm9iZV9saWJj
Ol9fd3JpdGUgICAob24gQHVuaXgvc3lzY2FsbC10ZW1wbGF0ZS5TOjgxIGluIC9saWI2NC9saWJj
LTIuMTguc28gd2l0aCBhcmcxKQ0KPiAgICBwcm9iZV9saWJjOmFic18wICAgICAob24gMHgwIGlu
IC9saWI2NC9saWJjLTIuMTguc28gd2l0aCBhcmcxKQ0KPiAgICBwcm9iZV9saWJjOmFic181ICAg
ICAob24gMHg1IGluIC9saWI2NC9saWJjLTIuMTguc28gd2l0aCBhcmcxKQ0KPiAgICBwcm9iZV9s
aWJjOmFic19kOGU0MCAob24gQHVuaXgvc3lzY2FsbC10ZW1wbGF0ZS5TOjgxIGluIC9saWI2NC9s
aWJjLTIuMTguc28gd2l0aCBhcmcxKQ0KPiAgICBwcm9iZV9saWJjOmFic19kOGU0OSAob24gX19H
SV9fX2xpYmNfd3JpdGUrOSBpbiAvbGliNjQvbGliYy0yLjE4LnNvIHdpdGggYXJnMSkNCj4gDQo+
IFNpZ25lZC1vZmYtYnk6IFdhbmcgTmFuIDx3YW5nbmFuMEBodWF3ZWkuY29tPg0KPiBDYzogQXJu
YWxkbyBDYXJ2YWxobyBkZSBNZWxvIDxhY21lQGtlcm5lbC5vcmc+DQo+IENjOiBJbmdvIE1vbG5h
ciA8bWluZ29AcmVkaGF0LmNvbT4NCj4gQ2M6IE1hc2FtaSBIaXJhbWF0c3UgPG1hc2FtaS5oaXJh
bWF0c3UucHRAaGl0YWNoaS5jb20+DQo+IENjOiBOYW1oeXVuZyBLaW0gPG5hbWh5dW5nQGtlcm5l
bC5vcmc+DQo+IENjOiBTdGV2ZW4gUm9zdGVkdCA8cm9zdGVkdEBnb29kbWlzLm9yZz4NCj4gLS0t
DQo+ICB0b29scy9wZXJmL3V0aWwvcHJvYmUtZXZlbnQuYyAgfCAxNzIgKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKystLS0NCj4gIHRvb2xzL3BlcmYvdXRpbC9wcm9iZS1ldmVu
dC5oICB8ICAgNCArDQo+ICB0b29scy9wZXJmL3V0aWwvcHJvYmUtZmluZGVyLmMgfCAgMjEgKy0t
LS0NCj4gIDMgZmlsZXMgY2hhbmdlZCwgMTcwIGluc2VydGlvbnMoKyksIDI3IGRlbGV0aW9ucygt
KQ0KPiANCj4gZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1ldmVudC5jIGIvdG9v
bHMvcGVyZi91dGlsL3Byb2JlLWV2ZW50LmMNCj4gaW5kZXggM2NlMjIzZC4uYjk0YThkNyAxMDA2
NDQNCj4gLS0tIGEvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWV2ZW50LmMNCj4gKysrIGIvdG9vbHMv
cGVyZi91dGlsL3Byb2JlLWV2ZW50LmMNCj4gQEAgLTExOTYsMTUgKzExOTYsMzcgQEAgc3RhdGlj
IGludCBwYXJzZV9wZXJmX3Byb2JlX3BvaW50KGNoYXIgKmFyZywgc3RydWN0IHBlcmZfcHJvYmVf
ZXZlbnQgKnBldikNCj4gIAkJKnB0cisrID0gJ1wwJzsNCj4gIAl9DQo+IA0KPiAtCXRtcCA9IHN0
cmR1cChhcmcpOw0KPiAtCWlmICh0bXAgPT0gTlVMTCkNCj4gLQkJcmV0dXJuIC1FTk9NRU07DQo+
ICsJaWYgKGFyZ1swXSA9PSAnXDAnKQ0KPiArCQl0bXAgPSBOVUxMOw0KPiArCWVsc2Ugew0KPiAr
CQl0bXAgPSBzdHJkdXAoYXJnKTsNCj4gKwkJaWYgKHRtcCA9PSBOVUxMKQ0KPiArCQkJcmV0dXJu
IC1FTk9NRU07DQo+ICsJfQ0KPiANCj4gIAlpZiAoZmlsZV9zcGVjKQ0KPiAgCQlwcC0+ZmlsZSA9
IHRtcDsNCj4gLQllbHNlDQo+ICsJZWxzZSB7DQo+ICAJCXBwLT5mdW5jdGlvbiA9IHRtcDsNCj4g
DQo+ICsJCS8qDQo+ICsJCSAqIEtlZXAgcHAtPmZ1bmN0aW9uIGV2ZW4gaWYgdGhpcyBpcyBhYnNv
bHV0ZSBhZGRyZXNzLA0KPiArCQkgKiBzbyBpdCBjYW4gbWFyayB3aGV0aGVyIGFic19hZGRyZXNz
IGlzIHZhbGlkLg0KPiArCQkgKiBXaGljaCBtYWtlICdwZXJmIHByb2JlIGxpYi5iaW4gMHgwJyBw
b3NzaWJsZS4NCj4gKwkJICoNCj4gKwkJICogTm90ZSB0aGF0IGNoZWNraW5nIGxlbmd0aCBvZiB0
bXAgaXMgbm90IG5lZWRlZA0KPiArCQkgKiBiZWNhdXNlIHdoZW4gd2UgYWNjZXNzIHRtcFsxXSB3
ZSBrbm93IHRtcFswXSBpcyAnMCcsDQo+ICsJCSAqIHNvIHRtcFsxXSBzaG91bGQgYWx3YXlzIHZh
bGlkIChidXQgY291bGQgYmUgJ1wwJykuDQo+ICsJCSAqLw0KPiArCQlpZiAodG1wICYmICFzdHJu
Y21wKHRtcCwgIjB4IiwgMikpIHsNCj4gKwkJCXBwLT5hYnNfYWRkcmVzcyA9IHN0cnRvdWwocHAt
PmZ1bmN0aW9uLCAmdG1wLCAwKTsNCj4gKwkJCWlmICgqdG1wICE9ICdcMCcpIHsNCj4gKwkJCQlz
ZW1hbnRpY19lcnJvcigiSW52YWxpZCBhYnNvbHV0ZSBhZGRyZXNzLlxuIik7DQo+ICsJCQkJcmV0
dXJuIC1FSU5WQUw7DQo+ICsJCQl9DQo+ICsJCX0NCj4gKwl9DQo+ICsNCj4gIAkvKiBQYXJzZSBv
dGhlciBvcHRpb25zICovDQo+ICAJd2hpbGUgKHB0cikgew0KPiAgCQlhcmcgPSBwdHI7DQo+IEBA
IC0xODAyLDE0ICsxODI0LDI5IEBAIGNoYXIgKnN5bnRoZXNpemVfcHJvYmVfdHJhY2VfY29tbWFu
ZChzdHJ1Y3QgcHJvYmVfdHJhY2VfZXZlbnQgKnRldikNCj4gIAlpZiAobGVuIDw9IDApDQo+ICAJ
CWdvdG8gZXJyb3I7DQo+IA0KPiAtCS8qIFVwcm9iZXMgbXVzdCBoYXZlIHRwLT5hZGRyZXNzIGFu
ZCB0cC0+bW9kdWxlICovDQo+IC0JaWYgKHRldi0+dXByb2JlcyAmJiAoIXRwLT5hZGRyZXNzIHx8
ICF0cC0+bW9kdWxlKSkNCj4gKwkvKiBVcHJvYmVzIG11c3QgaGF2ZSB0cC0+bW9kdWxlICovDQo+
ICsJaWYgKHRldi0+dXByb2JlcyAmJiAhdHAtPm1vZHVsZSkNCj4gIAkJZ290byBlcnJvcjsNCj4g
KwkvKg0KPiArCSAqIElmIHRwLT5hZGRyZXNzID09IDAsIHRoZW4gdGhpcyBwb2ludCBtdXN0IGJl
IGENCj4gKwkgKiBhYnNvbHV0ZSBhZGRyZXNzIHVwcm9iZS4NCj4gKwkgKiB0cnlfdG9fZmluZF9h
YnNvbHV0ZV9hZGRyZXNzKCkgc2hvdWxkIGhhdmUgbWFkZQ0KPiArCSAqIHRwLT5zeW1ib2wgdG8g
IjB4MCIuDQo+ICsJICovDQo+ICsJaWYgKHRldi0+dXByb2JlcyAmJiAhdHAtPmFkZHJlc3MpIHsN
Cj4gKwkJaWYgKCF0cC0+c3ltYm9sIHx8IHN0cmNtcCh0cC0+c3ltYm9sLCAiMHgwIikpDQo+ICsJ
CQlnb3RvIGVycm9yOw0KPiArCX0NCj4gDQo+ICAJLyogVXNlIHRoZSB0cC0+YWRkcmVzcyBmb3Ig
dXByb2JlcyAqLw0KPiAgCWlmICh0ZXYtPnVwcm9iZXMpDQo+ICAJCXJldCA9IGVfc25wcmludGYo
YnVmICsgbGVuLCBNQVhfQ01ETEVOIC0gbGVuLCAiJXM6MHglbHgiLA0KPiAgCQkJCSB0cC0+bW9k
dWxlLCB0cC0+YWRkcmVzcyk7DQo+ICsJZWxzZSBpZiAoIXN0cm5jbXAodHAtPnN5bWJvbCwgIjB4
IiwgMikpDQo+ICsJCS8qIEFic29sdXRlIGFkZHJlc3MuIFNlZSB0cnlfdG9fZmluZF9hYnNvbHV0
ZV9hZGRyZXNzKCkgKi8NCj4gKwkJcmV0ID0gZV9zbnByaW50ZihidWYgKyBsZW4sIE1BWF9DTURM
RU4gLSBsZW4sICIlcyVzMHglbHgiLA0KPiArCQkJCSB0cC0+bW9kdWxlID86ICIiLCB0cC0+bW9k
dWxlID8gIjoiIDogIiIsDQo+ICsJCQkJIHRwLT5hZGRyZXNzKTsNCj4gIAllbHNlDQo+ICAJCXJl
dCA9IGVfc25wcmludGYoYnVmICsgbGVuLCBNQVhfQ01ETEVOIC0gbGVuLCAiJXMlcyVzKyVsdSIs
DQo+ICAJCQkJIHRwLT5tb2R1bGUgPzogIiIsIHRwLT5tb2R1bGUgPyAiOiIgOiAiIiwNCj4gQEAg
LTE4NzIsOCArMTkwOSw4IEBAIG91dDoNCj4gIH0NCj4gDQo+ICBzdGF0aWMgaW50IGNvbnZlcnRf
dG9fcGVyZl9wcm9iZV9wb2ludChzdHJ1Y3QgcHJvYmVfdHJhY2VfcG9pbnQgKnRwLA0KPiAtCQkJ
CQlzdHJ1Y3QgcGVyZl9wcm9iZV9wb2ludCAqcHAsDQo+IC0JCQkJCWJvb2wgaXNfa3Byb2JlKQ0K
PiArCQkJCSAgICAgICBzdHJ1Y3QgcGVyZl9wcm9iZV9wb2ludCAqcHAsDQo+ICsJCQkJICAgICAg
IGJvb2wgaXNfa3Byb2JlKQ0KPiAgew0KPiAgCWNoYXIgYnVmWzEyOF07DQo+ICAJaW50IHJldDsN
Cj4gQEAgLTIzMzQsNyArMjM3MSw5IEBAIHN0YXRpYyBpbnQgcHJvYmVfdHJhY2VfZXZlbnRfX3Nl
dF9uYW1lKHN0cnVjdCBwcm9iZV90cmFjZV9ldmVudCAqdGV2LA0KPiAgCWlmIChwZXYtPmV2ZW50
KQ0KPiAgCQlldmVudCA9IHBldi0+ZXZlbnQ7DQo+ICAJZWxzZQ0KPiAtCQlpZiAocGV2LT5wb2lu
dC5mdW5jdGlvbiAmJiAhc3RyaXNnbG9iKHBldi0+cG9pbnQuZnVuY3Rpb24pKQ0KPiArCQlpZiAo
cGV2LT5wb2ludC5mdW5jdGlvbiAmJg0KPiArCQkJKHN0cm5jbXAocGV2LT5wb2ludC5mdW5jdGlv
biwgIjB4IiwgMikgIT0gMCkgJiYNCj4gKwkJCSFzdHJpc2dsb2IocGV2LT5wb2ludC5mdW5jdGlv
bikpDQo+ICAJCQlldmVudCA9IHBldi0+cG9pbnQuZnVuY3Rpb247DQo+ICAJCWVsc2UNCj4gIAkJ
CWV2ZW50ID0gdGV2LT5wb2ludC5yZWFsbmFtZTsNCj4gQEAgLTI2MDQsNiArMjY0Myw5OCBAQCBl
cnJfb3V0Og0KPiAgCWdvdG8gb3V0Ow0KPiAgfQ0KPiANCj4gK3N0YXRpYyBpbnQgdHJ5X3RvX2Zp
bmRfYWJzb2x1dGVfYWRkcmVzcyhzdHJ1Y3QgcGVyZl9wcm9iZV9ldmVudCAqcGV2LA0KPiArCQkJ
CQlzdHJ1Y3QgcHJvYmVfdHJhY2VfZXZlbnQgKip0ZXZzKQ0KPiArew0KPiArCXN0cnVjdCBwZXJm
X3Byb2JlX3BvaW50ICpwcCA9ICZwZXYtPnBvaW50Ow0KPiArCXN0cnVjdCBwcm9iZV90cmFjZV9l
dmVudCAqdGV2Ow0KPiArCXN0cnVjdCBwcm9iZV90cmFjZV9wb2ludCAqdHA7DQo+ICsJaW50IGks
IGVycjsNCj4gKw0KPiArCWlmICghKHBldi0+cG9pbnQuZnVuY3Rpb24gJiYgIXN0cm5jbXAocGV2
LT5wb2ludC5mdW5jdGlvbiwgIjB4IiwgMikpKQ0KPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gKwlp
ZiAocGVyZl9wcm9iZV9ldmVudF9uZWVkX2R3YXJmKHBldikpDQo+ICsJCXJldHVybiAtRUlOVkFM
Ow0KPiArDQo+ICsJLyoNCj4gKwkgKiBUaGlzIGlzICdwZXJmIHByb2JlIC9saWIvbGliYy5zbyAw
eGFiY2QnLiBUcnkgdG8gcHJvYmUgYXQNCj4gKwkgKiBhYnNvbHV0ZSBhZGRyZXNzLg0KPiArCSAq
DQo+ICsJICogT25seSBvbmUgdGV2IGNhbiBiZSBnZW5lcmF0ZWQgYnkgdGhpcy4NCj4gKwkgKi8N
Cj4gKwkqdGV2cyA9IHphbGxvYyhzaXplb2YoKnRldikpOw0KPiArCWlmICghKnRldnMpDQo+ICsJ
CXJldHVybiAtRU5PTUVNOw0KPiArDQo+ICsJdGV2ID0gKnRldnM7DQo+ICsJdHAgPSAmdGV2LT5w
b2ludDsNCj4gKw0KPiArCS8qDQo+ICsJICogRG9uJ3QgdXNlIHRwLT5vZmZzZXQsIHVzZSBhZGRy
ZXNzIGRpcmVjdGx5LCBiZWNhdXNlDQo+ICsJICogaW4gc3ludGhlc2l6ZV9wcm9iZV90cmFjZV9j
b21tYW5kKCkgYWRkcmVzcyBjYW5ub3QgYmUNCj4gKwkgKiB6ZXJvLg0KPiArCSAqLw0KPiArCXRw
LT5hZGRyZXNzID0gcGV2LT5wb2ludC5hYnNfYWRkcmVzczsNCj4gKwl0cC0+cmV0cHJvYmUgPSBw
cC0+cmV0cHJvYmU7DQo+ICsJdGV2LT51cHJvYmVzID0gcGV2LT51cHJvYmVzOw0KPiArDQo+ICsJ
ZXJyID0gLUVOT01FTTsNCj4gKwkvKg0KPiArCSAqIEdpdmUgaXQgYSAnMHgnIGxlYWRpbmcgc3lt
Ym9sIG5hbWUuDQo+ICsJICogSW4gX19hZGRfcHJvYmVfdHJhY2VfZXZlbnRzLCBhIE5VTEwgc3lt
Ym9sIGlzIGludGVycHJldGVkIGFzDQo+ICsJICogaW52YWx1ZC4NCj4gKwkgKi8NCj4gKwlpZiAo
YXNwcmludGYoJnRwLT5zeW1ib2wsICIweCVseCIsIHRwLT5hZGRyZXNzKSA8IDApDQo+ICsJCWdv
dG8gZXJyb3V0Ow0KPiArDQo+ICsJLyogRm9yIGtwcm9iZSwgY2hlY2sgcmFuZ2UgKi8NCj4gKwlp
ZiAoKCF0ZXYtPnVwcm9iZXMpICYmDQo+ICsJICAgIChrcHJvYmVfd2Fybl9vdXRfcmFuZ2UodGV2
LT5wb2ludC5zeW1ib2wsDQo+ICsJCQkJICAgdGV2LT5wb2ludC5hZGRyZXNzKSkpIHsNCj4gKwkJ
ZXJyID0gLUVBQ0NFUzsNCj4gKwkJZ290byBlcnJvdXQ7DQo+ICsJfQ0KPiArDQo+ICsJaWYgKGFz
cHJpbnRmKCZ0cC0+cmVhbG5hbWUsICJhYnNfJWx4IiwgdHAtPmFkZHJlc3MpIDwgMCkNCj4gKwkJ
Z290byBlcnJvdXQ7DQo+ICsNCj4gKwlpZiAocGV2LT50YXJnZXQpIHsNCj4gKwkJdHAtPm1vZHVs
ZSA9IHN0cmR1cChwZXYtPnRhcmdldCk7DQo+ICsJCWlmICghdHAtPm1vZHVsZSkNCj4gKwkJCWdv
dG8gZXJyb3V0Ow0KPiArCX0NCj4gKw0KPiArCWlmICh0ZXYtPmdyb3VwKSB7DQo+ICsJCXRldi0+
Z3JvdXAgPSBzdHJkdXAocGV2LT5ncm91cCk7DQo+ICsJCWlmICghdGV2LT5ncm91cCkNCj4gKwkJ
CWdvdG8gZXJyb3V0Ow0KPiArCX0NCj4gKw0KPiArCWlmIChwZXYtPmV2ZW50KSB7DQo+ICsJCXRl
di0+ZXZlbnQgPSBzdHJkdXAocGV2LT5ldmVudCk7DQo+ICsJCWlmICghdGV2LT5ldmVudCkNCj4g
KwkJCWdvdG8gZXJyb3V0Ow0KPiArCX0NCj4gKw0KPiArCXRldi0+bmFyZ3MgPSBwZXYtPm5hcmdz
Ow0KPiArCXRldi0+YXJncyA9IHphbGxvYyhzaXplb2Yoc3RydWN0IHByb2JlX3RyYWNlX2FyZykg
KiB0ZXYtPm5hcmdzKTsNCj4gKwlpZiAoIXRldi0+YXJncykgew0KPiArCQllcnIgPSAtRU5PTUVN
Ow0KPiArCQlnb3RvIGVycm91dDsNCj4gKwl9DQo+ICsJZm9yIChpID0gMDsgaSA8IHRldi0+bmFy
Z3M7IGkrKykNCj4gKwkJY29weV90b19wcm9iZV90cmFjZV9hcmcoJnRldi0+YXJnc1tpXSwgJnBl
di0+YXJnc1tpXSk7DQo+ICsNCj4gKwlyZXR1cm4gMTsNCj4gKw0KPiArZXJyb3V0Og0KPiArCWlm
ICgqdGV2cykgew0KPiArCQljbGVhcl9wcm9iZV90cmFjZV9ldmVudHMoKnRldnMsIDEpOw0KPiAr
CQkqdGV2cyA9IE5VTEw7DQo+ICsJfQ0KPiArCXJldHVybiBlcnI7DQo+ICt9DQo+ICsNCj4gIGJv
b2wgX193ZWFrIGFyY2hfX3ByZWZlcnNfc3ltdGFiKHZvaWQpIHsgcmV0dXJuIGZhbHNlOyB9DQo+
IA0KPiAgc3RhdGljIGludCBjb252ZXJ0X3RvX3Byb2JlX3RyYWNlX2V2ZW50cyhzdHJ1Y3QgcGVy
Zl9wcm9iZV9ldmVudCAqcGV2LA0KPiBAQCAtMjYyMCw2ICsyNzUxLDEwIEBAIHN0YXRpYyBpbnQg
Y29udmVydF90b19wcm9iZV90cmFjZV9ldmVudHMoc3RydWN0IHBlcmZfcHJvYmVfZXZlbnQgKnBl
diwNCj4gIAkJfQ0KPiAgCX0NCj4gDQo+ICsJcmV0ID0gdHJ5X3RvX2ZpbmRfYWJzb2x1dGVfYWRk
cmVzcyhwZXYsIHRldnMpOw0KPiArCWlmIChyZXQgPiAwKQ0KPiArCQlyZXR1cm4gcmV0Ow0KPiAr
DQo+ICAJaWYgKGFyY2hfX3ByZWZlcnNfc3ltdGFiKCkgJiYgIXBlcmZfcHJvYmVfZXZlbnRfbmVl
ZF9kd2FyZihwZXYpKSB7DQo+ICAJCXJldCA9IGZpbmRfcHJvYmVfdHJhY2VfZXZlbnRzX2Zyb21f
bWFwKHBldiwgdGV2cyk7DQo+ICAJCWlmIChyZXQgPiAwKQ0KPiBAQCAtMjc4NywzICsyOTIyLDIy
IEBAIGVuZDoNCj4gIAlyZXR1cm4gcmV0Ow0KPiAgfQ0KPiANCj4gK2ludCBjb3B5X3RvX3Byb2Jl
X3RyYWNlX2FyZyhzdHJ1Y3QgcHJvYmVfdHJhY2VfYXJnICp0dmFyLA0KPiArCQkJICAgIHN0cnVj
dCBwZXJmX3Byb2JlX2FyZyAqcHZhcikNCj4gK3sNCj4gKwl0dmFyLT52YWx1ZSA9IHN0cmR1cChw
dmFyLT52YXIpOw0KPiArCWlmICh0dmFyLT52YWx1ZSA9PSBOVUxMKQ0KPiArCQlyZXR1cm4gLUVO
T01FTTsNCj4gKwlpZiAocHZhci0+dHlwZSkgew0KPiArCQl0dmFyLT50eXBlID0gc3RyZHVwKHB2
YXItPnR5cGUpOw0KPiArCQlpZiAodHZhci0+dHlwZSA9PSBOVUxMKQ0KPiArCQkJcmV0dXJuIC1F
Tk9NRU07DQo+ICsJfQ0KPiArCWlmIChwdmFyLT5uYW1lKSB7DQo+ICsJCXR2YXItPm5hbWUgPSBz
dHJkdXAocHZhci0+bmFtZSk7DQo+ICsJCWlmICh0dmFyLT5uYW1lID09IE5VTEwpDQo+ICsJCQly
ZXR1cm4gLUVOT01FTTsNCj4gKwl9IGVsc2UNCj4gKwkJdHZhci0+bmFtZSA9IE5VTEw7DQo+ICsJ
cmV0dXJuIDA7DQo+ICt9DQo+IGRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvcHJvYmUtZXZl
bnQuaCBiL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1ldmVudC5oDQo+IGluZGV4IDljN2I5OWUuLmRl
MGRkMTMgMTAwNjQ0DQo+IC0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1ldmVudC5oDQo+ICsr
KyBiL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1ldmVudC5oDQo+IEBAIC02MSw2ICs2MSw3IEBAIHN0
cnVjdCBwZXJmX3Byb2JlX3BvaW50IHsNCj4gIAlib29sCQlyZXRwcm9iZTsJLyogUmV0dXJuIHBy
b2JlIGZsYWcgKi8NCj4gIAljaGFyCQkqbGF6eV9saW5lOwkvKiBMYXp5IG1hdGNoaW5nIHBhdHRl
cm4gKi8NCj4gIAl1bnNpZ25lZCBsb25nCW9mZnNldDsJCS8qIE9mZnNldCBmcm9tIGZ1bmN0aW9u
IGVudHJ5ICovDQo+ICsJdW5zaWduZWQgbG9uZwlhYnNfYWRkcmVzczsJLyogQWJzb2x1dGUgYWRk
cmVzcyBvZiB0aGUgcG9pbnQgKi8NCj4gIH07DQo+IA0KPiAgLyogUGVyZiBwcm9iZSBwcm9iaW5n
IGFyZ3VtZW50IGZpZWxkIGNoYWluICovDQo+IEBAIC0xNjIsNCArMTYzLDcgQEAgaW50IGVfc25w
cmludGYoY2hhciAqc3RyLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pDQo+
ICAvKiBNYXhpbXVtIGluZGV4IG51bWJlciBvZiBldmVudC1uYW1lIHBvc3RmaXggKi8NCj4gICNk
ZWZpbmUgTUFYX0VWRU5UX0lOREVYCTEwMjQNCj4gDQo+ICtpbnQgY29weV90b19wcm9iZV90cmFj
ZV9hcmcoc3RydWN0IHByb2JlX3RyYWNlX2FyZyAqdHZhciwNCj4gKwkJCSAgICBzdHJ1Y3QgcGVy
Zl9wcm9iZV9hcmcgKnB2YXIpOw0KPiArDQo+ICAjZW5kaWYgLypfUFJPQkVfRVZFTlRfSCAqLw0K
PiBkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWZpbmRlci5jIGIvdG9vbHMvcGVy
Zi91dGlsL3Byb2JlLWZpbmRlci5jDQo+IGluZGV4IDRiMWUwNzQuLjVhYjljZDYgMTAwNjQ0DQo+
IC0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1maW5kZXIuYw0KPiArKysgYi90b29scy9wZXJm
L3V0aWwvcHJvYmUtZmluZGVyLmMNCj4gQEAgLTU1MywyNCArNTUzLDkgQEAgc3RhdGljIGludCBm
aW5kX3ZhcmlhYmxlKER3YXJmX0RpZSAqc2NfZGllLCBzdHJ1Y3QgcHJvYmVfZmluZGVyICpwZikN
Cj4gIAljaGFyIGJ1ZlszMl0sICpwdHI7DQo+ICAJaW50IHJldCA9IDA7DQo+IA0KPiAtCWlmICgh
aXNfY192YXJuYW1lKHBmLT5wdmFyLT52YXIpKSB7DQo+IC0JCS8qIENvcHkgcmF3IHBhcmFtZXRl
cnMgKi8NCj4gLQkJcGYtPnR2YXItPnZhbHVlID0gc3RyZHVwKHBmLT5wdmFyLT52YXIpOw0KPiAt
CQlpZiAocGYtPnR2YXItPnZhbHVlID09IE5VTEwpDQo+IC0JCQlyZXR1cm4gLUVOT01FTTsNCj4g
LQkJaWYgKHBmLT5wdmFyLT50eXBlKSB7DQo+IC0JCQlwZi0+dHZhci0+dHlwZSA9IHN0cmR1cChw
Zi0+cHZhci0+dHlwZSk7DQo+IC0JCQlpZiAocGYtPnR2YXItPnR5cGUgPT0gTlVMTCkNCj4gLQkJ
CQlyZXR1cm4gLUVOT01FTTsNCj4gLQkJfQ0KPiAtCQlpZiAocGYtPnB2YXItPm5hbWUpIHsNCj4g
LQkJCXBmLT50dmFyLT5uYW1lID0gc3RyZHVwKHBmLT5wdmFyLT5uYW1lKTsNCj4gLQkJCWlmIChw
Zi0+dHZhci0+bmFtZSA9PSBOVUxMKQ0KPiAtCQkJCXJldHVybiAtRU5PTUVNOw0KPiAtCQl9IGVs
c2UNCj4gLQkJCXBmLT50dmFyLT5uYW1lID0gTlVMTDsNCj4gLQkJcmV0dXJuIDA7DQo+IC0JfQ0K
PiArCS8qIENvcHkgcmF3IHBhcmFtZXRlcnMgKi8NCj4gKwlpZiAoIWlzX2NfdmFybmFtZShwZi0+
cHZhci0+dmFyKSkNCj4gKwkJcmV0dXJuIGNvcHlfdG9fcHJvYmVfdHJhY2VfYXJnKHBmLT50dmFy
LCBwZi0+cHZhcik7DQo+IA0KPiAgCWlmIChwZi0+cHZhci0+bmFtZSkNCj4gIAkJcGYtPnR2YXIt
Pm5hbWUgPSBzdHJkdXAocGYtPnB2YXItPm5hbWUpOw0KPiAtLQ0KPiAxLjguMy40DQoNCg==
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1213689 — RE: [PATCH v2 0/4] perf probe, tracing/uprobes: Support probing at absolute address

From平松雅巳 / HIRAMATU,MASAMI <masami.hiramatsu.pt@hitachi.com>
Date2015-08-26 11:20 +0200
SubjectRE: [PATCH v2 0/4] perf probe, tracing/uprobes: Support probing at absolute address
Message-ID<q1F2a-1qN-23@gated-at.bofh.it>
In reply to#1213621
PiBGcm9tOiBXYW5nIE5hbiBbbWFpbHRvOndhbmduYW4wQGh1YXdlaS5jb21dDQo+IA0KPiBUaGUg
Z29hbCBvZiB0aGVzZSA0IHBhdGNoZXMgaXMgdG8gYWxsb3cgcGVyZiBwcm9iaW5nIGF0IGFic29s
dXRlIGFkZHJlc3MNCj4gZm9yIHVwcm9iZXMgYW5kIGtwcm9iZXMuIER1cmluZyB0aGUgZGV2ZWxv
cG1lbnQgc2V2ZXJhbCBzbWFsbCBwcm9ibGVtIGluDQo+ICdwZXJmIHByb2JlIC1sJyBpcyBmb3Vu
ZCBhbmQgZml4ZWQuDQo+IA0KPiBQYXRjaCAxIGhhcyBhbHJlYWR5IGFja2VkIGJ5IE1hc2FtaSBI
aXJhbWF0c3UuDQo+IA0KPiBQYXRjaCAyIGZpeGVzIGEgcHJvYmxlbSBhYm91dCB6ZXJvIGFkZHJl
c3MgaW4gcGVyZiBzaWRlLg0KPiANCj4gUGF0Y2ggMyBpcyB0aGUgbWFpbiBwYXRjaCBvZiB0aGVz
ZSA0LiBJdCBhbGxvd3MgZm9sbG93aW5nIGNvbW1hbmQ6DQo+IA0KPiAgIyBwZXJmIHByb2JlIC9s
aWIveDg2XzY0LWxpbnV4LWdudS9saWJjLTIuMTkuc28gMHhlYjg2MA0KPiANCj4gIERpZmZlcmVu
dCBmcm9tIHYxLCBubyBleHRyYSAnKycgaXMgcmVxdWlyZWQuDQoNClllYWgsIHRoaXMgc2VlbXMg
YmV0dGVyIGZvciBtZS4gU2luY2UgJysnIGhhcyBkb3VibGUgbWVhbmluZ3MgInBvc2l0aXZlIHZh
bHVlIiBhbmQNCiJhZGQgc29tZXRoaW5nIiwgSSB0aGluayBpdCdzIG5vdCBnb29kIGZvciB0aGlz
IGNvbnRleHQuDQoNCj4gDQo+IFBhdGNoIDQgaXMgYSBrZXJuZWwgc2lkZSBwYXRjaCB3aGljaCBm
aXhlcyBhIHNtYWxsIHByb2JsZW0gaW4gdXByb2JlX2V2ZW50DQo+IHRoYXQsIGlmIGFkZHJlc3Mg
aXMgMCwgdXByb2JlX2V2ZW50cyByZXBvcnRzICcweCAgKG51bGwpJy4gSXQgaXMgaW5kZXBlbmRl
bnQNCj4gZnJvbSB0aGUgb3RoZXIgcGF0Y2hlcy4NCg0KT29wcywgcmlnaHQuDQoNClRoYW5rcyEN
Cg0KPiANCj4gV2FuZyBOYW4gKDQpOg0KPiAgIHBlcmYgcHJvYmU6IFByZXZlbnQgc2VnZmF1bHQg
d2hlbiByZWFkaW5nIHByb2JlIHBvaW50IHdpdGggYWJzb2x1dGUNCj4gICAgIGFkZHJlc3MNCj4g
ICBwZXJmIHByb2JlOiBGaXggbGlzdCByZXN1bHQgd2hlbiBhZGRyZXNzIGlzIHplcm8NCj4gICBw
ZXJmIHByb2JlOiBTdXBwb3J0IHByb2JpbmcgYXQgYWJzb2x1dGUgYWRkcmVzcw0KPiAgIHRyYWNp
bmcvdXByb2JlczogRG8gbm90IHByaW50ICcweCAgKG51bGwpJyB3aGVuIG9mZnNldCBpcyAwDQo+
IA0KPiAga2VybmVsL3RyYWNlL3RyYWNlX3Vwcm9iZS5jICAgIHwgIDE3ICsrKy0NCj4gIHRvb2xz
L3BlcmYvdXRpbC9wcm9iZS1ldmVudC5jICB8IDIxMCArKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrLS0tLQ0KPiAgdG9vbHMvcGVyZi91dGlsL3Byb2JlLWV2ZW50LmggIHwgICA0
ICsNCj4gIHRvb2xzL3BlcmYvdXRpbC9wcm9iZS1maW5kZXIuYyB8ICAyMSArLS0tLQ0KPiAgNCBm
aWxlcyBjaGFuZ2VkLCAyMTYgaW5zZXJ0aW9ucygrKSwgMzYgZGVsZXRpb25zKC0pDQo+IA0KPiAt
LQ0KPiAxLjguMy40DQoNCg==
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web