Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 205235
b: refs/heads/master
c: 45de34b
h: refs/heads/master
i:
  205233: 940136d
  205231: e7f952a
v: v3
  • Loading branch information
Stephane Eranian authored and Arnaldo Carvalho de Melo committed Jun 5, 2010
1 parent f900e8b commit 7ecd342
Show file tree
Hide file tree
Showing 10 changed files with 90 additions and 19 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 8e5564e6c7554902301543e731354ad2ad58ae53
refs/heads/master: 45de34bbe3e1b8f4c8bc8ecaf6c915b4b4c545f8
3 changes: 1 addition & 2 deletions trunk/tools/perf/builtin-buildid-cache.c
Original file line number Diff line number Diff line change
Expand Up @@ -78,8 +78,7 @@ static int __cmd_buildid_cache(void)
struct str_node *pos;
char debugdir[PATH_MAX];

snprintf(debugdir, sizeof(debugdir), "%s/%s", getenv("HOME"),
DEBUG_CACHE_DIR);
snprintf(debugdir, sizeof(debugdir), "%s", buildid_dir);

if (add_name_list_str) {
list = strlist__new(true, add_name_list_str);
Expand Down
20 changes: 15 additions & 5 deletions trunk/tools/perf/perf-archive.sh
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,17 @@ if [ $# -ne 0 ] ; then
PERF_DATA=$1
fi

DEBUGDIR=~/.debug/
#
# PERF_BUILDID_DIR environment variable set by perf
# path to buildid directory, default to $HOME/.debug
#
if [ -z $PERF_BUILDID_DIR ]; then
PERF_BUILDID_DIR=~/.debug/
else
# append / to make substitutions work
PERF_BUILDID_DIR=$PERF_BUILDID_DIR/
fi

BUILDIDS=$(mktemp /tmp/perf-archive-buildids.XXXXXX)
NOBUILDID=0000000000000000000000000000000000000000

Expand All @@ -22,13 +32,13 @@ MANIFEST=$(mktemp /tmp/perf-archive-manifest.XXXXXX)

cut -d ' ' -f 1 $BUILDIDS | \
while read build_id ; do
linkname=$DEBUGDIR.build-id/${build_id:0:2}/${build_id:2}
linkname=$PERF_BUILDID_DIR.build-id/${build_id:0:2}/${build_id:2}
filename=$(readlink -f $linkname)
echo ${linkname#$DEBUGDIR} >> $MANIFEST
echo ${filename#$DEBUGDIR} >> $MANIFEST
echo ${linkname#$PERF_BUILDID_DIR} >> $MANIFEST
echo ${filename#$PERF_BUILDID_DIR} >> $MANIFEST
done

tar cfj $PERF_DATA.tar.bz2 -C $DEBUGDIR -T $MANIFEST
tar cfj $PERF_DATA.tar.bz2 -C $PERF_BUILDID_DIR -T $MANIFEST
rm -f $MANIFEST $BUILDIDS
echo -e "Now please run:\n"
echo -e "$ tar xvf $PERF_DATA.tar.bz2 -C ~/.debug\n"
Expand Down
2 changes: 2 additions & 0 deletions trunk/tools/perf/perf.c
Original file line number Diff line number Diff line change
Expand Up @@ -458,6 +458,8 @@ int main(int argc, const char **argv)
handle_options(&argv, &argc, NULL);
commit_pager_choice();
set_debugfs_path();
set_buildid_dir();

if (argc > 0) {
if (!prefixcmp(argv[0], "--"))
argv[0] += 2;
Expand Down
10 changes: 4 additions & 6 deletions trunk/tools/perf/util/build-id.c
Original file line number Diff line number Diff line change
Expand Up @@ -43,19 +43,17 @@ struct perf_event_ops build_id__mark_dso_hit_ops = {
char *dso__build_id_filename(struct dso *self, char *bf, size_t size)
{
char build_id_hex[BUILD_ID_SIZE * 2 + 1];
const char *home;

if (!self->has_build_id)
return NULL;

build_id__sprintf(self->build_id, sizeof(self->build_id), build_id_hex);
home = getenv("HOME");
if (bf == NULL) {
if (asprintf(&bf, "%s/%s/.build-id/%.2s/%s", home,
DEBUG_CACHE_DIR, build_id_hex, build_id_hex + 2) < 0)
if (asprintf(&bf, "%s/.build-id/%.2s/%s", buildid_dir,
build_id_hex, build_id_hex + 2) < 0)
return NULL;
} else
snprintf(bf, size, "%s/%s/.build-id/%.2s/%s", home,
DEBUG_CACHE_DIR, build_id_hex, build_id_hex + 2);
snprintf(bf, size, "%s/.build-id/%.2s/%s", buildid_dir,
build_id_hex, build_id_hex + 2);
return bf;
}
1 change: 1 addition & 0 deletions trunk/tools/perf/util/cache.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ extern int perf_config(config_fn_t fn, void *);
extern int perf_config_int(const char *, const char *);
extern int perf_config_bool(const char *, const char *);
extern int config_error_nonbool(const char *);
extern const char *perf_config_dirname(const char *, const char *);

/* pager.c */
extern void setup_pager(void);
Expand Down
64 changes: 63 additions & 1 deletion trunk/tools/perf/util/config.c
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,11 @@

#define MAXNAME (256)

#define DEBUG_CACHE_DIR ".debug"


char buildid_dir[MAXPATHLEN]; /* root dir for buildid, binary cache */

static FILE *config_file;
static const char *config_file_name;
static int config_linenr;
Expand Down Expand Up @@ -127,7 +132,7 @@ static int get_value(config_fn_t fn, void *data, char *name, unsigned int len)
break;
if (!iskeychar(c))
break;
name[len++] = tolower(c);
name[len++] = c;
if (len >= MAXNAME)
return -1;
}
Expand Down Expand Up @@ -327,6 +332,13 @@ int perf_config_bool(const char *name, const char *value)
return !!perf_config_bool_or_int(name, value, &discard);
}

const char *perf_config_dirname(const char *name, const char *value)
{
if (!name)
return NULL;
return value;
}

static int perf_default_core_config(const char *var __used, const char *value __used)
{
/* Add other config variables here and to Documentation/config.txt. */
Expand Down Expand Up @@ -428,3 +440,53 @@ int config_error_nonbool(const char *var)
{
return error("Missing value for '%s'", var);
}

struct buildid_dir_config {
char *dir;
};

static int buildid_dir_command_config(const char *var, const char *value,
void *data)
{
struct buildid_dir_config *c = data;
const char *v;

/* same dir for all commands */
if (!prefixcmp(var, "buildid.") && !strcmp(var + 8, "dir")) {
v = perf_config_dirname(var, value);
if (!v)
return -1;
strncpy(c->dir, v, MAXPATHLEN-1);
c->dir[MAXPATHLEN-1] = '\0';
}
return 0;
}

static void check_buildid_dir_config(void)
{
struct buildid_dir_config c;
c.dir = buildid_dir;
perf_config(buildid_dir_command_config, &c);
}

void set_buildid_dir(void)
{
buildid_dir[0] = '\0';

/* try config file */
check_buildid_dir_config();

/* default to $HOME/.debug */
if (buildid_dir[0] == '\0') {
char *v = getenv("HOME");
if (v) {
snprintf(buildid_dir, MAXPATHLEN-1, "%s/%s",
v, DEBUG_CACHE_DIR);
} else {
strncpy(buildid_dir, DEBUG_CACHE_DIR, MAXPATHLEN-1);
}
buildid_dir[MAXPATHLEN-1] = '\0';
}
/* for communicating with external commands */
setenv("PERF_BUILDID_DIR", buildid_dir, 1);
}
3 changes: 1 addition & 2 deletions trunk/tools/perf/util/header.c
Original file line number Diff line number Diff line change
Expand Up @@ -385,8 +385,7 @@ static int perf_session__cache_build_ids(struct perf_session *self)
int ret;
char debugdir[PATH_MAX];

snprintf(debugdir, sizeof(debugdir), "%s/%s", getenv("HOME"),
DEBUG_CACHE_DIR);
snprintf(debugdir, sizeof(debugdir), "%s", buildid_dir);

if (mkdir(debugdir, 0755) != 0 && errno != EEXIST)
return -1;
Expand Down
2 changes: 0 additions & 2 deletions trunk/tools/perf/util/symbol.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,6 @@
#include <linux/rbtree.h>
#include <stdio.h>

#define DEBUG_CACHE_DIR ".debug"

#ifdef HAVE_CPLUS_DEMANGLE
extern char *cplus_demangle(const char *, int);

Expand Down
2 changes: 2 additions & 0 deletions trunk/tools/perf/util/util.h
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,7 @@

extern const char *graph_line;
extern const char *graph_dotted_line;
extern char buildid_dir[];

/* On most systems <limits.h> would have given us this, but
* not on some systems (e.g. GNU/Hurd).
Expand Down Expand Up @@ -152,6 +153,7 @@ extern void warning(const char *err, ...) __attribute__((format (printf, 1, 2)))
extern void set_die_routine(void (*routine)(const char *err, va_list params) NORETURN);

extern int prefixcmp(const char *str, const char *prefix);
extern void set_buildid_dir(void);

static inline const char *skip_prefix(const char *str, const char *prefix)
{
Expand Down

0 comments on commit 7ecd342

Please sign in to comment.