public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
To: He Kuang <hekuang@huawei.com>,
	a.p.zijlstra@chello.nl, acme@kernel.org, jolsa@kernel.org,
	mingo@redhat.com
Cc: wangnan0@huawei.com, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2 1/3] perf probe: Remove length limitation for showing available variables
Date: Sun, 10 May 2015 12:23:18 +0900	[thread overview]
Message-ID: <554ECF26.3030302@hitachi.com> (raw)
In-Reply-To: <1431165306-106463-1-git-send-email-hekuang@huawei.com>

On 2015/05/09 18:55, He Kuang wrote:
> Use struct strbuf instead of bare char[] to remove the length limitation
> of variables in variable_list, so they will not disappear due to
> overlength, and make preparation for adding more description for
> variables.
> 

Looks good to me!

Acked-by: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>

Thank you,

> Signed-off-by: He Kuang <hekuang@huawei.com>
> ---
>  tools/perf/util/dwarf-aux.c    | 50 +++++++++++++++++++-----------------------
>  tools/perf/util/dwarf-aux.h    |  4 ++--
>  tools/perf/util/probe-finder.c | 17 ++++++++------
>  3 files changed, 34 insertions(+), 37 deletions(-)
> 
> diff --git a/tools/perf/util/dwarf-aux.c b/tools/perf/util/dwarf-aux.c
> index 16d46e2..737c9db 100644
> --- a/tools/perf/util/dwarf-aux.c
> +++ b/tools/perf/util/dwarf-aux.c
> @@ -848,19 +848,17 @@ Dwarf_Die *die_find_member(Dwarf_Die *st_die, const char *name,
>  /**
>   * die_get_typename - Get the name of given variable DIE
>   * @vr_die: a variable DIE
> - * @buf: a buffer for result type name
> - * @len: a max-length of @buf
> + * @buf: a strbuf for result type name
>   *
> - * Get the name of @vr_die and stores it to @buf. Return the actual length
> - * of type name if succeeded. Return -E2BIG if @len is not enough long, and
> - * Return -ENOENT if failed to find type name.
> + * Get the name of @vr_die and stores it to @buf. Return 0 if succeeded.
> + * and Return -ENOENT if failed to find type name.
>   * Note that the result will stores typedef name if possible, and stores
>   * "*(function_type)" if the type is a function pointer.
>   */
> -int die_get_typename(Dwarf_Die *vr_die, char *buf, int len)
> +int die_get_typename(Dwarf_Die *vr_die, struct strbuf *buf)
>  {
>  	Dwarf_Die type;
> -	int tag, ret, ret2;
> +	int tag, ret;
>  	const char *tmp = "";
>  
>  	if (__die_get_real_type(vr_die, &type) == NULL)
> @@ -871,8 +869,8 @@ int die_get_typename(Dwarf_Die *vr_die, char *buf, int len)
>  		tmp = "*";
>  	else if (tag == DW_TAG_subroutine_type) {
>  		/* Function pointer */
> -		ret = snprintf(buf, len, "(function_type)");
> -		return (ret >= len) ? -E2BIG : ret;
> +		strbuf_addf(buf, "(function_type)");
> +		return 0;
>  	} else {
>  		if (!dwarf_diename(&type))
>  			return -ENOENT;
> @@ -883,39 +881,35 @@ int die_get_typename(Dwarf_Die *vr_die, char *buf, int len)
>  		else if (tag == DW_TAG_enumeration_type)
>  			tmp = "enum ";
>  		/* Write a base name */
> -		ret = snprintf(buf, len, "%s%s", tmp, dwarf_diename(&type));
> -		return (ret >= len) ? -E2BIG : ret;
> -	}
> -	ret = die_get_typename(&type, buf, len);
> -	if (ret > 0) {
> -		ret2 = snprintf(buf + ret, len - ret, "%s", tmp);
> -		ret = (ret2 >= len - ret) ? -E2BIG : ret2 + ret;
> +		strbuf_addf(buf, "%s%s", tmp, dwarf_diename(&type));
> +		return 0;
>  	}
> +	ret = die_get_typename(&type, buf);
> +	if (ret == 0)
> +		strbuf_addf(buf, "%s", tmp);
> +
>  	return ret;
>  }
>  
>  /**
>   * die_get_varname - Get the name and type of given variable DIE
>   * @vr_die: a variable DIE
> - * @buf: a buffer for type and variable name
> - * @len: the max-length of @buf
> + * @buf: a strbuf for type and variable name
>   *
>   * Get the name and type of @vr_die and stores it in @buf as "type\tname".
>   */
> -int die_get_varname(Dwarf_Die *vr_die, char *buf, int len)
> +int die_get_varname(Dwarf_Die *vr_die, struct strbuf *buf)
>  {
> -	int ret, ret2;
> +	int ret;
>  
> -	ret = die_get_typename(vr_die, buf, len);
> +	ret = die_get_typename(vr_die, buf);
>  	if (ret < 0) {
>  		pr_debug("Failed to get type, make it unknown.\n");
> -		ret = snprintf(buf, len, "(unknown_type)");
> -	}
> -	if (ret > 0) {
> -		ret2 = snprintf(buf + ret, len - ret, "\t%s",
> -				dwarf_diename(vr_die));
> -		ret = (ret2 >= len - ret) ? -E2BIG : ret2 + ret;
> +		strbuf_addf(buf, "(unknown_type)");
>  	}
> -	return ret;
> +
> +	strbuf_addf(buf, "\t%s", dwarf_diename(vr_die));
> +
> +	return 0;
>  }
>  
> diff --git a/tools/perf/util/dwarf-aux.h b/tools/perf/util/dwarf-aux.h
> index 50a3cdc..60676fd 100644
> --- a/tools/perf/util/dwarf-aux.h
> +++ b/tools/perf/util/dwarf-aux.h
> @@ -117,8 +117,8 @@ extern Dwarf_Die *die_find_member(Dwarf_Die *st_die, const char *name,
>  				  Dwarf_Die *die_mem);
>  
>  /* Get the name of given variable DIE */
> -extern int die_get_typename(Dwarf_Die *vr_die, char *buf, int len);
> +extern int die_get_typename(Dwarf_Die *vr_die, struct strbuf *buf);
>  
>  /* Get the name and type of given variable DIE, stored as "type\tname" */
> -extern int die_get_varname(Dwarf_Die *vr_die, char *buf, int len);
> +extern int die_get_varname(Dwarf_Die *vr_die, struct strbuf *buf);
>  #endif
> diff --git a/tools/perf/util/probe-finder.c b/tools/perf/util/probe-finder.c
> index d5f60c0..dcca551 100644
> --- a/tools/perf/util/probe-finder.c
> +++ b/tools/perf/util/probe-finder.c
> @@ -1253,14 +1253,11 @@ int debuginfo__find_trace_events(struct debuginfo *dbg,
>  	return (ret < 0) ? ret : tf.ntevs;
>  }
>  
> -#define MAX_VAR_LEN 64
> -
>  /* Collect available variables in this scope */
>  static int collect_variables_cb(Dwarf_Die *die_mem, void *data)
>  {
>  	struct available_var_finder *af = data;
>  	struct variable_list *vl;
> -	char buf[MAX_VAR_LEN];
>  	int tag, ret;
>  
>  	vl = &af->vls[af->nvls - 1];
> @@ -1272,10 +1269,16 @@ static int collect_variables_cb(Dwarf_Die *die_mem, void *data)
>  						af->pf.fb_ops, &af->pf.sp_die,
>  						NULL);
>  		if (ret == 0) {
> -			ret = die_get_varname(die_mem, buf, MAX_VAR_LEN);
> -			pr_debug2("Add new var: %s\n", buf);
> -			if (ret > 0)
> -				strlist__add(vl->vars, buf);
> +			struct strbuf buf;
> +
> +			strbuf_init(&buf, 64);
> +			ret = die_get_varname(die_mem, &buf);
> +			pr_debug2("Add new var: %s\n", buf.buf);
> +			if (ret == 0) {
> +				strlist__add(vl->vars,
> +					strbuf_detach(&buf, NULL));
> +			}
> +			strbuf_release(&buf);
>  		}
>  	}
>  
> 


-- 
Masami HIRAMATSU
Linux Technology Research Center, System Productivity Research Dept.
Center for Technology Innovation - Systems Engineering
Hitachi, Ltd., Research & Development Group
E-mail: masami.hiramatsu.pt@hitachi.com

      parent reply	other threads:[~2015-05-10  3:23 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-05-09  9:55 [PATCH v2 1/3] perf probe: Remove length limitation for showing available variables He Kuang
2015-05-09  9:55 ` [PATCH v2 2/3] perf probe: Add --range option to show variable location range He Kuang
2015-05-10  3:21   ` Masami Hiramatsu
2015-05-11  2:22     ` He Kuang
2015-05-11  6:03       ` Masami Hiramatsu
2015-05-09  9:55 ` [PATCH v2 3/3] perf probe: Show better error message when failed to find variable He Kuang
2015-05-10  3:23   ` Masami Hiramatsu
2015-05-10  3:23 ` Masami Hiramatsu [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=554ECF26.3030302@hitachi.com \
    --to=masami.hiramatsu.pt@hitachi.com \
    --cc=a.p.zijlstra@chello.nl \
    --cc=acme@kernel.org \
    --cc=hekuang@huawei.com \
    --cc=jolsa@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=wangnan0@huawei.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox