All of lore.kernel.org
 help / color / mirror / Atom feed
From: Arnaldo Carvalho de Melo <acme@infradead.org>
To: Srikar Dronamraju <srikar@linux.vnet.ibm.com>
Cc: Peter Zijlstra <peterz@infradead.org>,
	Ingo Molnar <mingo@elte.hu>, Steven Rostedt <rostedt@goodmis.org>,
	Randy Dunlap <rdunlap@xenotime.net>,
	Linus Torvalds <torvalds@linux-foundation.org>,
	Christoph Hellwig <hch@infradead.org>,
	Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>,
	Oleg Nesterov <oleg@redhat.com>, Mark Wielaard <mjw@redhat.com>,
	Mathieu Desnoyers <mathieu.desnoyers@efficios.com>,
	LKML <linux-kernel@vger.kernel.org>,
	Naren A Devaiah <naren.devaiah@in.ibm.com>,
	Jim Keniston <jkenisto@linux.vnet.ibm.com>,
	Frederic Weisbecker <fweisbec@gmail.com>,
	"Frank Ch. Eigler" <fche@redhat.com>,
	Ananth N Mavinakayanahalli <ananth@in.ibm.com>,
	Andrew Morton <akpm@linux-foundation.org>,
	"Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
Subject: Re: [PATCHv9 2.6.35-rc4-tip 10/13]  perf: Re-Add make_absolute_path
Date: Mon, 12 Jul 2010 11:00:23 -0300	[thread overview]
Message-ID: <20100712140023.GC25238@ghostprotocols.net> (raw)
In-Reply-To: <20100712103412.27491.18737.sendpatchset@localhost6.localdomain6>

Em Mon, Jul 12, 2010 at 04:04:12PM +0530, Srikar Dronamraju escreveu:
> perf: Re-Add make_absolute_path
> 
> perf probe for uprobes would use make_absolute_path.
> make_absolute_path can be used to convert a file name to a dso name.
> 
> so if user specifies the function to be traced as malloc@/lib/libc.so.6
> it needs to be converted to malloc@libc-2.5.so

Isn't this the other way around? I.e. "if the user specifies
malloc@libc-2.5.so it needs to be converted to malloc@/lib/libc.so.6"?

Also please remove the xstrdup and die calls from this function, we're
trying to get rid of all such 'panic' like functions so that we can
librarize as much code as possible.
 
> This patch reverts a part of a41794cdd7ee94a5199e14f642c26d649d383fa5

> Signed-off-by: Srikar Dronamraju <srikar@linux.vnet.ibm.com>
> ---
> 
>  tools/perf/util/abspath.c |   81 +++++++++++++++++++++++++++++++++++++++++++++
>  tools/perf/util/cache.h   |    1 +
>  2 files changed, 82 insertions(+), 0 deletions(-)
> 
> 
> diff --git a/tools/perf/util/abspath.c b/tools/perf/util/abspath.c
> index 0e76aff..0a985fd 100644
> --- a/tools/perf/util/abspath.c
> +++ b/tools/perf/util/abspath.c
> @@ -1,5 +1,86 @@
>  #include "cache.h"
>  
> +/*
> + * Do not use this for inspecting *tracked* content.  When path is a
> + * symlink to a directory, we do not want to say it is a directory when
> + * dealing with tracked content in the working tree.
> + */
> +static int is_directory(const char *path)
> +{
> +	struct stat st;
> +	return !stat(path, &st) && S_ISDIR(st.st_mode);
> +}
> +
> +/* We allow "recursive" symbolic links. Only within reason, though. */
> +#define MAXDEPTH 5
> +
> +const char *make_absolute_path(const char *path)
> +{
> +	static char bufs[2][PATH_MAX + 1], *buf = bufs[0], *next_buf = bufs[1];
> +	char cwd[1024] = "";
> +	int buf_index = 1, len;
> +
> +	int depth = MAXDEPTH;
> +	char *last_elem = NULL;
> +	struct stat st;
> +
> +	if (strlcpy(buf, path, PATH_MAX) >= PATH_MAX)
> +		die("Too long path: %.*s", 60, path);
> +
> +	while (depth--) {
> +		if (!is_directory(buf)) {
> +			char *last_slash = strrchr(buf, '/');
> +			if (last_slash) {
> +				*last_slash = '\0';
> +				last_elem = xstrdup(last_slash + 1);
> +			} else {
> +				last_elem = xstrdup(buf);
> +				*buf = '\0';
> +			}
> +		}
> +
> +		if (*buf) {
> +			if (!*cwd && !getcwd(cwd, sizeof(cwd)))
> +				die("Could not get current working directory");
> +
> +			if (chdir(buf))
> +				die("Could not switch to '%s'", buf);
> +		}
> +		if (!getcwd(buf, PATH_MAX))
> +			die("Could not get current working directory");
> +
> +		if (last_elem) {
> +			len = strlen(buf);
> +
> +			if (len + strlen(last_elem) + 2 > PATH_MAX)
> +				die("Too long path name: '%s/%s'",
> +						buf, last_elem);
> +			buf[len] = '/';
> +			strcpy(buf + len + 1, last_elem);
> +			free(last_elem);
> +			last_elem = NULL;
> +		}
> +
> +		if (!lstat(buf, &st) && S_ISLNK(st.st_mode)) {
> +			len = readlink(buf, next_buf, PATH_MAX);
> +			if (len < 0)
> +				die("Invalid symlink: %s", buf);
> +			if (PATH_MAX <= len)
> +				die("symbolic link too long: %s", buf);
> +			next_buf[len] = '\0';
> +			buf = next_buf;
> +			buf_index = 1 - buf_index;
> +			next_buf = bufs[buf_index];
> +		} else
> +			break;
> +	}
> +
> +	if (*cwd && chdir(cwd))
> +		die("Could not change back to '%s'", cwd);
> +
> +	return buf;
> +}
> +
>  static const char *get_pwd_cwd(void)
>  {
>  	static char cwd[PATH_MAX + 1];
> diff --git a/tools/perf/util/cache.h b/tools/perf/util/cache.h
> index 27e9ebe..0dfed40 100644
> --- a/tools/perf/util/cache.h
> +++ b/tools/perf/util/cache.h
> @@ -73,6 +73,7 @@ static inline int is_absolute_path(const char *path)
>  	return path[0] == '/';
>  }
>  
> +const char *make_absolute_path(const char *path);
>  const char *make_nonrelative_path(const char *path);
>  char *strip_path_suffix(const char *path, const char *suffix);
>  

  reply	other threads:[~2010-07-12 14:01 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-07-12 10:32 [PATCHv9 2.6.35-rc4-tip 0/13] Uprobes Patches: Srikar Dronamraju
2010-07-12 10:32 ` [PATCHv9 2.6.35-rc4-tip 1/13] mm: Move replace_page() / write_protect_page() to mm/memory.c Srikar Dronamraju
2010-07-12 10:32 ` [PATCHv9 2.6.35-rc4-tip 2/13] uprobes: Breakpoint insertion/removal in user space applications Srikar Dronamraju
2010-07-20  4:28   ` Christoph Hellwig
2010-07-20  7:22     ` Srikar Dronamraju
2010-08-04 12:05       ` Peter Zijlstra
2010-08-04 12:48         ` Srikar Dronamraju
2010-08-04 13:02           ` Peter Zijlstra
2010-07-12 10:32 ` [PATCHv9 2.6.35-rc4-tip 3/13] uprobes: Slot allocation for Execution out of line(XOL) Srikar Dronamraju
2010-07-12 10:32 ` [PATCHv9 2.6.35-rc4-tip 4/13] uprobes: x86 specific functions for user space breakpointing Srikar Dronamraju
2010-07-12 10:33 ` [PATCHv9 2.6.35-rc4-tip 5/13] uprobes: Uprobes (un)registration and exception handling Srikar Dronamraju
2010-07-12 10:33 ` [PATCHv9 2.6.35-rc4-tip 6/13] uprobes: X86 support for Uprobes Srikar Dronamraju
2010-07-12 10:33 ` [PATCHv9 2.6.35-rc4-tip 7/13] uprobes: Uprobes Documentation Srikar Dronamraju
2010-07-12 10:33 ` [PATCHv9 2.6.35-rc4-tip 8/13] trace: Extract out common code for kprobes/uprobes traceevents Srikar Dronamraju
2010-07-12 10:34 ` [PATCHv9 2.6.35-rc4-tip 9/13] trace: uprobes trace_event interface Srikar Dronamraju
2010-07-12 10:34 ` [PATCHv9 2.6.35-rc4-tip 10/13] perf: Re-Add make_absolute_path Srikar Dronamraju
2010-07-12 14:00   ` Arnaldo Carvalho de Melo [this message]
2010-07-12 14:30     ` Steven Rostedt
2010-07-12 16:12       ` Arnaldo Carvalho de Melo
2010-07-14  2:49         ` Steven Rostedt
2010-07-14 16:23           ` Arnaldo Carvalho de Melo
2010-07-14 20:45             ` Ingo Molnar
2010-07-14 20:50               ` Mathieu Desnoyers
2010-07-12 15:33     ` Srikar Dronamraju
2010-07-12 16:26       ` Arnaldo Carvalho de Melo
2010-07-12 17:26         ` Srikar Dronamraju
2010-07-12 10:34 ` [PATCHv9 2.6.35-rc4-tip 11/13] perf: perf interface for uprobes Srikar Dronamraju
2010-07-12 16:03   ` Arnaldo Carvalho de Melo
2010-07-12 17:32     ` Srikar Dronamraju
2010-07-12 10:34 ` [PATCHv9 2.6.35-rc4-tip 12/13] [RFC] perf: Show Potential probe points Srikar Dronamraju
2010-07-12 14:41   ` Arnaldo Carvalho de Melo
2010-07-12 15:55     ` Srikar Dronamraju
2010-07-12 10:34 ` [PATCHv9 2.6.35-rc4-tip 13/13] [RFC] perf: show functions in a file without using pid Srikar Dronamraju
2010-07-20  4:19 ` [PATCHv9 2.6.35-rc4-tip 0/13] Uprobes Patches: Christoph Hellwig
2010-07-20  6:38   ` Srikar Dronamraju
2010-07-20 21:03     ` Arnaldo Carvalho de Melo
2010-07-21  2:42       ` Srikar Dronamraju
2010-07-21 13:08         ` Steven Rostedt
2010-07-21 13:21           ` Srikar Dronamraju
2010-07-21 13:26             ` Christoph Hellwig
2010-07-21 14:10               ` Steven Rostedt
2010-07-21 14:22         ` Arnaldo Carvalho de Melo
2010-07-21 15:50           ` Steven Rostedt
2010-07-21 13:19       ` Srikar Dronamraju

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=20100712140023.GC25238@ghostprotocols.net \
    --to=acme@infradead.org \
    --cc=akpm@linux-foundation.org \
    --cc=ananth@in.ibm.com \
    --cc=fche@redhat.com \
    --cc=fweisbec@gmail.com \
    --cc=hch@infradead.org \
    --cc=jkenisto@linux.vnet.ibm.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=masami.hiramatsu.pt@hitachi.com \
    --cc=mathieu.desnoyers@efficios.com \
    --cc=mingo@elte.hu \
    --cc=mjw@redhat.com \
    --cc=naren.devaiah@in.ibm.com \
    --cc=oleg@redhat.com \
    --cc=paulmck@linux.vnet.ibm.com \
    --cc=peterz@infradead.org \
    --cc=rdunlap@xenotime.net \
    --cc=rostedt@goodmis.org \
    --cc=srikar@linux.vnet.ibm.com \
    --cc=torvalds@linux-foundation.org \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.