> From: Wangnan (F) [mailto:[email protected]] > >> > >> 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)
Hmm, OK, then this should be in the 1/4 or splitted as an independent patch, because this part it is not "when address is zero", just support showing absolute address probes on user applications. Thank you,

