* [PATCH] perf: fix the probe finder location (.dwo files)
@ 2022-09-29 20:59 Henry Castro
2022-09-30 17:19 ` Namhyung Kim
0 siblings, 1 reply; 5+ messages in thread
From: Henry Castro @ 2022-09-29 20:59 UTC (permalink / raw)
To: namhyung
Cc: Henry Castro, Peter Zijlstra, Ingo Molnar,
Arnaldo Carvalho de Melo, Mark Rutland, Alexander Shishkin,
Jiri Olsa, linux-perf-users, linux-kernel
If the file object is compiled using -gsplit-dwarf,
the probe finder location will fail.
Signed-off-by: Henry Castro <hcvcastro@gmail.com>
---
tools/perf/util/probe-finder.c | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/tools/perf/util/probe-finder.c b/tools/perf/util/probe-finder.c
index 50d861a80f57..6d7c5461251d 100644
--- a/tools/perf/util/probe-finder.c
+++ b/tools/perf/util/probe-finder.c
@@ -1161,7 +1161,8 @@ static int debuginfo__find_probe_location(struct debuginfo *dbg,
struct perf_probe_point *pp = &pf->pev->point;
Dwarf_Off off, noff;
size_t cuhl;
- Dwarf_Die *diep;
+ Dwarf_Die *diep, cudie, subdie;
+ uint8_t unit_type;
int ret = 0;
off = 0;
@@ -1200,6 +1201,14 @@ static int debuginfo__find_probe_location(struct debuginfo *dbg,
continue;
}
+ /* Check separate debug information file. */
+ if (dwarf_cu_info(pf->cu_die.cu, NULL, &unit_type, &cudie,
+ &subdie, NULL, NULL, NULL))
+ continue;
+
+ if (unit_type == DW_UT_skeleton)
+ pf->cu_die = subdie;
+
/* Check if target file is included. */
if (pp->file)
pf->fname = cu_find_realpath(&pf->cu_die, pp->file);
--
2.20.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH] perf: fix the probe finder location (.dwo files)
2022-09-29 20:59 [PATCH] perf: fix the probe finder location (.dwo files) Henry Castro
@ 2022-09-30 17:19 ` Namhyung Kim
2022-10-03 18:16 ` [PATCH v2] " Henry Castro
0 siblings, 1 reply; 5+ messages in thread
From: Namhyung Kim @ 2022-09-30 17:19 UTC (permalink / raw)
To: Henry Castro
Cc: Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo,
Mark Rutland, Alexander Shishkin, Jiri Olsa, linux-perf-users,
linux-kernel
Hello,
On Thu, Sep 29, 2022 at 2:00 PM Henry Castro <hcvcastro@gmail.com> wrote:
>
> If the file object is compiled using -gsplit-dwarf,
> the probe finder location will fail.
>
> Signed-off-by: Henry Castro <hcvcastro@gmail.com>
> ---
> tools/perf/util/probe-finder.c | 11 ++++++++++-
> 1 file changed, 10 insertions(+), 1 deletion(-)
>
> diff --git a/tools/perf/util/probe-finder.c b/tools/perf/util/probe-finder.c
> index 50d861a80f57..6d7c5461251d 100644
> --- a/tools/perf/util/probe-finder.c
> +++ b/tools/perf/util/probe-finder.c
> @@ -1161,7 +1161,8 @@ static int debuginfo__find_probe_location(struct debuginfo *dbg,
> struct perf_probe_point *pp = &pf->pev->point;
> Dwarf_Off off, noff;
> size_t cuhl;
> - Dwarf_Die *diep;
> + Dwarf_Die *diep, cudie, subdie;
> + uint8_t unit_type;
> int ret = 0;
>
> off = 0;
> @@ -1200,6 +1201,14 @@ static int debuginfo__find_probe_location(struct debuginfo *dbg,
> continue;
> }
>
> + /* Check separate debug information file. */
> + if (dwarf_cu_info(pf->cu_die.cu, NULL, &unit_type, &cudie,
> + &subdie, NULL, NULL, NULL))
It seems dwarf_cu_info was introduced in elfutils 0.171 which
was released in June 2018. I hope all the test setups have
more recent versions.
> + continue;
> +
> + if (unit_type == DW_UT_skeleton)
> + pf->cu_die = subdie;
Is this DWARF5 thing? Will it handle the previous version well?
IOW wouldn't dwarf_cu_info() return fail?
Anyway I think it'd be safer to do
if (dwarf_cu_info() == 0 && unit_type == skeleton)
pf->cu_die = subdie;
Thanks,
Namhyung
> +
> /* Check if target file is included. */
> if (pp->file)
> pf->fname = cu_find_realpath(&pf->cu_die, pp->file);
> --
> 2.20.1
>
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH v2] perf: fix the probe finder location (.dwo files)
2022-09-30 17:19 ` Namhyung Kim
@ 2022-10-03 18:16 ` Henry Castro
0 siblings, 0 replies; 5+ messages in thread
From: Henry Castro @ 2022-10-03 18:16 UTC (permalink / raw)
To: namhyung
Cc: Henry Castro, Peter Zijlstra, Ingo Molnar,
Arnaldo Carvalho de Melo, Mark Rutland, Alexander Shishkin,
Jiri Olsa, linux-perf-users, linux-kernel
If the file object is compiled using -gsplit-dwarf,
the probe finder location will fail.
Signed-off-by: Henry Castro <hcvcastro@gmail.com>
---
> Anyway I think it'd be safer to do
>
> if (dwarf_cu_info() == 0 && unit_type == skeleton)
> pf->cu_die = subdie;
Thank you, I have modifed the patch :)
tools/perf/util/probe-finder.c | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/tools/perf/util/probe-finder.c b/tools/perf/util/probe-finder.c
index 50d861a80f57..b27039f5f04b 100644
--- a/tools/perf/util/probe-finder.c
+++ b/tools/perf/util/probe-finder.c
@@ -1161,7 +1161,8 @@ static int debuginfo__find_probe_location(struct debuginfo *dbg,
struct perf_probe_point *pp = &pf->pev->point;
Dwarf_Off off, noff;
size_t cuhl;
- Dwarf_Die *diep;
+ Dwarf_Die *diep, cudie, subdie;
+ uint8_t unit_type;
int ret = 0;
off = 0;
@@ -1200,6 +1201,14 @@ static int debuginfo__find_probe_location(struct debuginfo *dbg,
continue;
}
+#if _ELFUTILS_VERSION >= 171
+ /* Check separate debug information file. */
+ if (dwarf_cu_info(pf->cu_die.cu, NULL, &unit_type,
+ &cudie, &subdie, NULL, NULL, NULL) == 0
+ && unit_type == DW_UT_skeleton)
+ pf->cu_die = subdie;
+#endif
+
/* Check if target file is included. */
if (pp->file)
pf->fname = cu_find_realpath(&pf->cu_die, pp->file);
--
2.20.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH v2] perf: fix the probe finder location (.dwo files)
2022-10-03 18:10 Henry Castro
@ 2022-10-04 18:54 ` Namhyung Kim
0 siblings, 0 replies; 5+ messages in thread
From: Namhyung Kim @ 2022-10-04 18:54 UTC (permalink / raw)
To: Henry Castro
Cc: Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo,
Mark Rutland, Alexander Shishkin, Jiri Olsa, linux-perf-users,
linux-kernel, Masami Hiramatsu
Cc + Masami
On Mon, Oct 3, 2022 at 11:10 AM Henry Castro <hcvcastro@gmail.com> wrote:
>
> If the file object is compiled using -gsplit-dwarf,
> the probe finder location will fail.
>
> Signed-off-by: Henry Castro <hcvcastro@gmail.com>
> ---
>
> > Anyway I think it'd be safer to do
> >
> > if (dwarf_cu_info() == 0 && unit_type == skeleton)
> > pf->cu_die = subdie;
>
> Thank you, I have modifed the patch :)
>
>
> tools/perf/util/probe-finder.c | 11 ++++++++++-
> 1 file changed, 10 insertions(+), 1 deletion(-)
>
> diff --git a/tools/perf/util/probe-finder.c b/tools/perf/util/probe-finder.c
> index 50d861a80f57..b27039f5f04b 100644
> --- a/tools/perf/util/probe-finder.c
> +++ b/tools/perf/util/probe-finder.c
> @@ -1161,7 +1161,8 @@ static int debuginfo__find_probe_location(struct debuginfo *dbg,
> struct perf_probe_point *pp = &pf->pev->point;
> Dwarf_Off off, noff;
> size_t cuhl;
> - Dwarf_Die *diep;
> + Dwarf_Die *diep, cudie, subdie;
> + uint8_t unit_type;
They will be unused for earlier elfutils.
> int ret = 0;
>
> off = 0;
> @@ -1200,6 +1201,14 @@ static int debuginfo__find_probe_location(struct debuginfo *dbg,
> continue;
> }
>
> +#if _ELFUTILS_VERSION >= 171
Nit, I think we use _ELFUTILS_PREREQ(0, 171).
> + /* Check separate debug information file. */
> + if (dwarf_cu_info(pf->cu_die.cu, NULL, &unit_type,
> + &cudie, &subdie, NULL, NULL, NULL) == 0
> + && unit_type == DW_UT_skeleton)
> + pf->cu_die = subdie;
> +#endif
How about making it a separate function with 2 versions
depending on the elfutils? Then you can have the variables
only if they are used.
Something like get_source_from_debuginfod() in the same
file.
Thanks,
Namhyung
> +
> /* Check if target file is included. */
> if (pp->file)
> pf->fname = cu_find_realpath(&pf->cu_die, pp->file);
> --
> 2.20.1
>
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH v2] perf: fix the probe finder location (.dwo files)
@ 2022-10-03 18:10 Henry Castro
2022-10-04 18:54 ` Namhyung Kim
0 siblings, 1 reply; 5+ messages in thread
From: Henry Castro @ 2022-10-03 18:10 UTC (permalink / raw)
To: hcvcastro
Cc: Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo,
Mark Rutland, Alexander Shishkin, Jiri Olsa, Namhyung Kim,
linux-perf-users, linux-kernel
If the file object is compiled using -gsplit-dwarf,
the probe finder location will fail.
Signed-off-by: Henry Castro <hcvcastro@gmail.com>
---
> Anyway I think it'd be safer to do
>
> if (dwarf_cu_info() == 0 && unit_type == skeleton)
> pf->cu_die = subdie;
Thank you, I have modifed the patch :)
tools/perf/util/probe-finder.c | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/tools/perf/util/probe-finder.c b/tools/perf/util/probe-finder.c
index 50d861a80f57..b27039f5f04b 100644
--- a/tools/perf/util/probe-finder.c
+++ b/tools/perf/util/probe-finder.c
@@ -1161,7 +1161,8 @@ static int debuginfo__find_probe_location(struct debuginfo *dbg,
struct perf_probe_point *pp = &pf->pev->point;
Dwarf_Off off, noff;
size_t cuhl;
- Dwarf_Die *diep;
+ Dwarf_Die *diep, cudie, subdie;
+ uint8_t unit_type;
int ret = 0;
off = 0;
@@ -1200,6 +1201,14 @@ static int debuginfo__find_probe_location(struct debuginfo *dbg,
continue;
}
+#if _ELFUTILS_VERSION >= 171
+ /* Check separate debug information file. */
+ if (dwarf_cu_info(pf->cu_die.cu, NULL, &unit_type,
+ &cudie, &subdie, NULL, NULL, NULL) == 0
+ && unit_type == DW_UT_skeleton)
+ pf->cu_die = subdie;
+#endif
+
/* Check if target file is included. */
if (pp->file)
pf->fname = cu_find_realpath(&pf->cu_die, pp->file);
--
2.20.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
end of thread, other threads:[~2022-10-04 18:54 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-09-29 20:59 [PATCH] perf: fix the probe finder location (.dwo files) Henry Castro
2022-09-30 17:19 ` Namhyung Kim
2022-10-03 18:16 ` [PATCH v2] " Henry Castro
2022-10-03 18:10 Henry Castro
2022-10-04 18:54 ` Namhyung Kim
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 NNTP newsgroup(s).