diff mbox

[RFC,5/8] perf probe powerpc: Allow matching against dot symbols

Message ID d23252a0bb8a34b2eac9049b34d674aa2d6a2b6a.1418146300.git.naveen.n.rao@linux.vnet.ibm.com (mailing list archive)
State Changes Requested
Delegated to: Michael Ellerman
Headers show

Commit Message

Naveen N. Rao Dec. 9, 2014, 5:34 p.m. UTC
Allow perf probe to work on powerpc ABIv1 without the need to specify the
leading dot '.' for functions. 'perf probe do_fork' works with this patch.

Signed-off-by: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
---
 tools/perf/util/probe-event.c | 9 +++++++++
 1 file changed, 9 insertions(+)

Comments

Michael Ellerman Dec. 10, 2014, 10:03 a.m. UTC | #1
On Tue, 2014-12-09 at 23:04 +0530, Naveen N. Rao wrote:
> Allow perf probe to work on powerpc ABIv1 without the need to specify the
> leading dot '.' for functions. 'perf probe do_fork' works with this patch.
> 
> Signed-off-by: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
> ---
>  tools/perf/util/probe-event.c | 9 +++++++++
>  1 file changed, 9 insertions(+)
> 
> diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c
> index d465f7c..174c22e 100644
> --- a/tools/perf/util/probe-event.c
> +++ b/tools/perf/util/probe-event.c
> @@ -2221,6 +2221,15 @@ static int probe_function_filter(struct map *map __maybe_unused,
>  		num_matched_functions++;
>  		return 0;
>  	}
> +#ifdef __powerpc64__
> +	/* Allow matching against the dot variant */
> +	if (sym->name[0] == '.' && looking_function_name[0] != '.' &&
> +	    (sym->binding == STB_GLOBAL || sym->binding == STB_LOCAL) &&
> +	    strcmp(looking_function_name, sym->name+1) == 0) {
> +		num_matched_functions++;
> +		return 0;
> +	}
> +#endif

As for the previous patch, I think this should be in an arch helper.

cheers
diff mbox

Patch

diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c
index d465f7c..174c22e 100644
--- a/tools/perf/util/probe-event.c
+++ b/tools/perf/util/probe-event.c
@@ -2221,6 +2221,15 @@  static int probe_function_filter(struct map *map __maybe_unused,
 		num_matched_functions++;
 		return 0;
 	}
+#ifdef __powerpc64__
+	/* Allow matching against the dot variant */
+	if (sym->name[0] == '.' && looking_function_name[0] != '.' &&
+	    (sym->binding == STB_GLOBAL || sym->binding == STB_LOCAL) &&
+	    strcmp(looking_function_name, sym->name+1) == 0) {
+		num_matched_functions++;
+		return 0;
+	}
+#endif
 	return 1;
 }