* [PATCH -tip 1/2] [BUGFIX] perf probe: Fix to make offset to signed value @ 2010-03-15 16:54 Masami Hiramatsu 2010-03-15 16:54 ` [PATCH -tip 2/2] [BUGFIX] perf probe: Use origial address instead of CU-based address Masami Hiramatsu 2010-03-16 14:47 ` [tip:perf/urgent] perf probe: Fix offset to allow signed value tip-bot for Masami Hiramatsu 0 siblings, 2 replies; 4+ messages in thread From: Masami Hiramatsu @ 2010-03-15 16:54 UTC (permalink / raw) To: Ingo Molnar, lkml; +Cc: systemtap, DLE, Masami Hiramatsu, Ingo Molnar Fix to make dereference offset intmax_t from uintmax_t, because it can be minus value (e.g. local variable's offset from frame pointer). Signed-off-by: Masami Hiramatsu <mhiramat@redhat.com> Cc: Ingo Molnar <mingo@elte.hu> --- tools/perf/util/probe-finder.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/perf/util/probe-finder.c b/tools/perf/util/probe-finder.c index f9cbbf1..0e8c8f1 100644 --- a/tools/perf/util/probe-finder.c +++ b/tools/perf/util/probe-finder.c @@ -333,8 +333,8 @@ static void show_location(Dwarf_Op *op, struct probe_finder *pf) die("%u exceeds max register number.", regn); if (deref) - ret = snprintf(pf->buf, pf->len, " %s=+%ju(%s)", - pf->var, (uintmax_t)offs, regs); + ret = snprintf(pf->buf, pf->len, " %s=%+jd(%s)", + pf->var, (intmax_t)offs, regs); else ret = snprintf(pf->buf, pf->len, " %s=%s", pf->var, regs); DIE_IF(ret < 0); -- Masami Hiramatsu e-mail: mhiramat@redhat.com ^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH -tip 2/2] [BUGFIX] perf probe: Use origial address instead of CU-based address 2010-03-15 16:54 [PATCH -tip 1/2] [BUGFIX] perf probe: Fix to make offset to signed value Masami Hiramatsu @ 2010-03-15 16:54 ` Masami Hiramatsu 2010-03-16 14:48 ` [tip:perf/urgent] perf probe: Use original " tip-bot for Masami Hiramatsu 2010-03-16 14:47 ` [tip:perf/urgent] perf probe: Fix offset to allow signed value tip-bot for Masami Hiramatsu 1 sibling, 1 reply; 4+ messages in thread From: Masami Hiramatsu @ 2010-03-15 16:54 UTC (permalink / raw) To: Ingo Molnar, lkml; +Cc: systemtap, DLE, Masami Hiramatsu, Ingo Molnar Use original address for looking up the location of variables for dwarf_getlocation_addr() instead of CU-based address. Signed-off-by: Masami Hiramatsu <mhiramat@redhat.com> Cc: Ingo Molnar <mingo@elte.hu> --- tools/perf/util/probe-finder.c | 11 ++--------- tools/perf/util/probe-finder.h | 1 - 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/tools/perf/util/probe-finder.c b/tools/perf/util/probe-finder.c index 0e8c8f1..c171a24 100644 --- a/tools/perf/util/probe-finder.c +++ b/tools/perf/util/probe-finder.c @@ -352,8 +352,7 @@ static void show_variable(Dwarf_Die *vr_die, struct probe_finder *pf) if (dwarf_attr(vr_die, DW_AT_location, &attr) == NULL) goto error; /* TODO: handle more than 1 exprs */ - ret = dwarf_getlocation_addr(&attr, (pf->addr - pf->cu_base), - &expr, &nexpr, 1); + ret = dwarf_getlocation_addr(&attr, pf->addr, &expr, &nexpr, 1); if (ret <= 0 || nexpr == 0) goto error; @@ -437,8 +436,7 @@ static void show_probe_point(Dwarf_Die *sp_die, struct probe_finder *pf) /* Get the frame base attribute/ops */ dwarf_attr(sp_die, DW_AT_frame_base, &fb_attr); - ret = dwarf_getlocation_addr(&fb_attr, (pf->addr - pf->cu_base), - &pf->fb_ops, &nops, 1); + ret = dwarf_getlocation_addr(&fb_attr, pf->addr, &pf->fb_ops, &nops, 1); if (ret <= 0 || nops == 0) pf->fb_ops = NULL; @@ -644,7 +642,6 @@ static void find_probe_point_by_func(struct probe_finder *pf) int find_probe_point(int fd, struct probe_point *pp) { struct probe_finder pf = {.pp = pp}; - int ret; Dwarf_Off off, noff; size_t cuhl; Dwarf_Die *diep; @@ -671,10 +668,6 @@ int find_probe_point(int fd, struct probe_point *pp) pf.fname = NULL; if (!pp->file || pf.fname) { - /* Save CU base address (for frame_base) */ - ret = dwarf_lowpc(&pf.cu_die, &pf.cu_base); - if (ret != 0) - pf.cu_base = 0; if (pp->function) find_probe_point_by_func(&pf); else if (pp->lazy_line) diff --git a/tools/perf/util/probe-finder.h b/tools/perf/util/probe-finder.h index d1a6517..21f7354 100644 --- a/tools/perf/util/probe-finder.h +++ b/tools/perf/util/probe-finder.h @@ -71,7 +71,6 @@ struct probe_finder { /* For variable searching */ Dwarf_Op *fb_ops; /* Frame base attribute */ - Dwarf_Addr cu_base; /* Current CU base address */ const char *var; /* Current variable name */ char *buf; /* Current output buffer */ int len; /* Length of output buffer */ -- Masami Hiramatsu e-mail: mhiramat@redhat.com ^ permalink raw reply [flat|nested] 4+ messages in thread
* [tip:perf/urgent] perf probe: Use original address instead of CU-based address 2010-03-15 16:54 ` [PATCH -tip 2/2] [BUGFIX] perf probe: Use origial address instead of CU-based address Masami Hiramatsu @ 2010-03-16 14:48 ` tip-bot for Masami Hiramatsu 0 siblings, 0 replies; 4+ messages in thread From: tip-bot for Masami Hiramatsu @ 2010-03-16 14:48 UTC (permalink / raw) To: linux-tip-commits Cc: linux-kernel, hpa, mingo, dle-develop, tglx, mhiramat, systemtap, mingo Commit-ID: d0cb4260f899d07462d49fc67e29f2438dbaca2f Gitweb: http://git.kernel.org/tip/d0cb4260f899d07462d49fc67e29f2438dbaca2f Author: Masami Hiramatsu <mhiramat@redhat.com> AuthorDate: Mon, 15 Mar 2010 13:02:35 -0400 Committer: Ingo Molnar <mingo@elte.hu> CommitDate: Tue, 16 Mar 2010 10:02:19 +0100 perf probe: Use original address instead of CU-based address Use original address for looking up the location of variables for dwarf_getlocation_addr() instead of CU-based address. Signed-off-by: Masami Hiramatsu <mhiramat@redhat.com> Cc: systemtap <systemtap@sources.redhat.com> Cc: DLE <dle-develop@lists.sourceforge.net> LKML-Reference: <20100315170235.31852.91195.stgit@localhost6.localdomain6> Signed-off-by: Ingo Molnar <mingo@elte.hu> --- tools/perf/util/probe-finder.c | 11 ++--------- tools/perf/util/probe-finder.h | 1 - 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/tools/perf/util/probe-finder.c b/tools/perf/util/probe-finder.c index 0e8c8f1..c171a24 100644 --- a/tools/perf/util/probe-finder.c +++ b/tools/perf/util/probe-finder.c @@ -352,8 +352,7 @@ static void show_variable(Dwarf_Die *vr_die, struct probe_finder *pf) if (dwarf_attr(vr_die, DW_AT_location, &attr) == NULL) goto error; /* TODO: handle more than 1 exprs */ - ret = dwarf_getlocation_addr(&attr, (pf->addr - pf->cu_base), - &expr, &nexpr, 1); + ret = dwarf_getlocation_addr(&attr, pf->addr, &expr, &nexpr, 1); if (ret <= 0 || nexpr == 0) goto error; @@ -437,8 +436,7 @@ static void show_probe_point(Dwarf_Die *sp_die, struct probe_finder *pf) /* Get the frame base attribute/ops */ dwarf_attr(sp_die, DW_AT_frame_base, &fb_attr); - ret = dwarf_getlocation_addr(&fb_attr, (pf->addr - pf->cu_base), - &pf->fb_ops, &nops, 1); + ret = dwarf_getlocation_addr(&fb_attr, pf->addr, &pf->fb_ops, &nops, 1); if (ret <= 0 || nops == 0) pf->fb_ops = NULL; @@ -644,7 +642,6 @@ static void find_probe_point_by_func(struct probe_finder *pf) int find_probe_point(int fd, struct probe_point *pp) { struct probe_finder pf = {.pp = pp}; - int ret; Dwarf_Off off, noff; size_t cuhl; Dwarf_Die *diep; @@ -671,10 +668,6 @@ int find_probe_point(int fd, struct probe_point *pp) pf.fname = NULL; if (!pp->file || pf.fname) { - /* Save CU base address (for frame_base) */ - ret = dwarf_lowpc(&pf.cu_die, &pf.cu_base); - if (ret != 0) - pf.cu_base = 0; if (pp->function) find_probe_point_by_func(&pf); else if (pp->lazy_line) diff --git a/tools/perf/util/probe-finder.h b/tools/perf/util/probe-finder.h index d1a6517..21f7354 100644 --- a/tools/perf/util/probe-finder.h +++ b/tools/perf/util/probe-finder.h @@ -71,7 +71,6 @@ struct probe_finder { /* For variable searching */ Dwarf_Op *fb_ops; /* Frame base attribute */ - Dwarf_Addr cu_base; /* Current CU base address */ const char *var; /* Current variable name */ char *buf; /* Current output buffer */ int len; /* Length of output buffer */ ^ permalink raw reply [flat|nested] 4+ messages in thread
* [tip:perf/urgent] perf probe: Fix offset to allow signed value 2010-03-15 16:54 [PATCH -tip 1/2] [BUGFIX] perf probe: Fix to make offset to signed value Masami Hiramatsu 2010-03-15 16:54 ` [PATCH -tip 2/2] [BUGFIX] perf probe: Use origial address instead of CU-based address Masami Hiramatsu @ 2010-03-16 14:47 ` tip-bot for Masami Hiramatsu 1 sibling, 0 replies; 4+ messages in thread From: tip-bot for Masami Hiramatsu @ 2010-03-16 14:47 UTC (permalink / raw) To: linux-tip-commits Cc: linux-kernel, hpa, mingo, dle-develop, tglx, mhiramat, systemtap, mingo Commit-ID: 67c7ff7c56f38a8ab338fbbfe366621ce6303ba1 Gitweb: http://git.kernel.org/tip/67c7ff7c56f38a8ab338fbbfe366621ce6303ba1 Author: Masami Hiramatsu <mhiramat@redhat.com> AuthorDate: Mon, 15 Mar 2010 13:02:28 -0400 Committer: Ingo Molnar <mingo@elte.hu> CommitDate: Tue, 16 Mar 2010 10:02:18 +0100 perf probe: Fix offset to allow signed value Fix dereference offset to intmax_t from uintmax_t, because it can have negative values (for example local variable's offset from frame pointer). Signed-off-by: Masami Hiramatsu <mhiramat@redhat.com> Cc: systemtap <systemtap@sources.redhat.com> Cc: DLE <dle-develop@lists.sourceforge.net> LKML-Reference: <20100315170228.31852.71946.stgit@localhost6.localdomain6> Signed-off-by: Ingo Molnar <mingo@elte.hu> --- tools/perf/util/probe-finder.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/perf/util/probe-finder.c b/tools/perf/util/probe-finder.c index f9cbbf1..0e8c8f1 100644 --- a/tools/perf/util/probe-finder.c +++ b/tools/perf/util/probe-finder.c @@ -333,8 +333,8 @@ static void show_location(Dwarf_Op *op, struct probe_finder *pf) die("%u exceeds max register number.", regn); if (deref) - ret = snprintf(pf->buf, pf->len, " %s=+%ju(%s)", - pf->var, (uintmax_t)offs, regs); + ret = snprintf(pf->buf, pf->len, " %s=%+jd(%s)", + pf->var, (intmax_t)offs, regs); else ret = snprintf(pf->buf, pf->len, " %s=%s", pf->var, regs); DIE_IF(ret < 0); ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2010-03-16 14:48 UTC | newest] Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2010-03-15 16:54 [PATCH -tip 1/2] [BUGFIX] perf probe: Fix to make offset to signed value Masami Hiramatsu 2010-03-15 16:54 ` [PATCH -tip 2/2] [BUGFIX] perf probe: Use origial address instead of CU-based address Masami Hiramatsu 2010-03-16 14:48 ` [tip:perf/urgent] perf probe: Use original " tip-bot for Masami Hiramatsu 2010-03-16 14:47 ` [tip:perf/urgent] perf probe: Fix offset to allow signed value tip-bot for Masami Hiramatsu
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).