* [PATCH] perf unwind: Set userdata for all __report_module paths
@ 2021-02-18 16:56 d.rigby
2021-02-18 16:58 ` Dave Rigby
2021-02-18 17:22 ` Jan Kratochvil
0 siblings, 2 replies; 6+ messages in thread
From: d.rigby @ 2021-02-18 16:56 UTC (permalink / raw)
To: d.rigby
Cc: linux-perf-users, Arnaldo Carvalho de Melo, Jan Kratochvil, Jiri Olsa
From: Dave Rigby <d.rigby@me.com>
When locating the dwarf module for a given address, __find_debuginfo()
requires a 'struct dso' passed via the userdata argument.
However, this field is only set in __report_module() if the module is
found in via dwfl_addrmodule(), not if it is found later via dwfl_report_elf().
Set userdata irrespective of how the dwarf module was found, as long
as we found a module.
Fixes: bf53fc6b5f41 ("perf unwind: Fix separate debug info files when using elfutils' libdw's unwinder")
Cc: linux-perf-users@vger.kernel.org
Cc: Arnaldo Carvalho de Melo <acme@kernel.org>
Cc: Jan Kratochvil <jan.kratochvil@redhat.com>
Cc: Jiri Olsa <jolsa@redhat.com>
---
tools/perf/util/unwind-libdw.c | 11 ++++++++---
1 file changed, 8 insertions(+), 3 deletions(-)
diff --git a/tools/perf/util/unwind-libdw.c b/tools/perf/util/unwind-libdw.c
index 0ada907..a74b517 100644
--- a/tools/perf/util/unwind-libdw.c
+++ b/tools/perf/util/unwind-libdw.c
@@ -60,10 +60,8 @@ static int __report_module(struct addr_location *al, u64 ip,
mod = dwfl_addrmodule(ui->dwfl, ip);
if (mod) {
Dwarf_Addr s;
- void **userdatap;
- dwfl_module_info(mod, &userdatap, &s, NULL, NULL, NULL, NULL, NULL);
- *userdatap = dso;
+ dwfl_module_info(mod, NULL, &s, NULL, NULL, NULL, NULL, NULL);
if (s != al->map->start - al->map->pgoff)
mod = 0;
}
@@ -79,6 +77,13 @@ static int __report_module(struct addr_location *al, u64 ip,
al->map->start - al->map->pgoff, false);
}
+ if (mod) {
+ void **userdatap;
+
+ dwfl_module_info(mod, &userdatap, NULL, NULL, NULL, NULL, NULL, NULL);
+ *userdatap = dso;
+ }
+
return mod && dwfl_addrmodule(ui->dwfl, ip) == mod ? 0 : -1;
}
--
1.8.3.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH] perf unwind: Set userdata for all __report_module paths
2021-02-18 16:56 [PATCH] perf unwind: Set userdata for all __report_module paths d.rigby
@ 2021-02-18 16:58 ` Dave Rigby
2021-02-18 17:13 ` Arnaldo Carvalho de Melo
2021-02-18 17:19 ` Arnaldo Carvalho de Melo
2021-02-18 17:22 ` Jan Kratochvil
1 sibling, 2 replies; 6+ messages in thread
From: Dave Rigby @ 2021-02-18 16:58 UTC (permalink / raw)
To: Dave Rigby
Cc: linux-perf-users, Arnaldo Carvalho de Melo, Jan Kratochvil, Jiri Olsa
I missed adding a link to the bugzilla issue: https://bugzilla.kernel.org/show_bug.cgi?id=211801
Note sure what the recommended way of tagging that in the patch is…
DaveR
> On 18 Feb 2021, at 16:56, d.rigby@me.com wrote:
>
> From: Dave Rigby <d.rigby@me.com>
>
> When locating the dwarf module for a given address, __find_debuginfo()
> requires a 'struct dso' passed via the userdata argument.
>
> However, this field is only set in __report_module() if the module is
> found in via dwfl_addrmodule(), not if it is found later via dwfl_report_elf().
>
> Set userdata irrespective of how the dwarf module was found, as long
> as we found a module.
>
> Fixes: bf53fc6b5f41 ("perf unwind: Fix separate debug info files when using elfutils' libdw's unwinder")
> Cc: linux-perf-users@vger.kernel.org
> Cc: Arnaldo Carvalho de Melo <acme@kernel.org>
> Cc: Jan Kratochvil <jan.kratochvil@redhat.com>
> Cc: Jiri Olsa <jolsa@redhat.com>
> ---
> tools/perf/util/unwind-libdw.c | 11 ++++++++---
> 1 file changed, 8 insertions(+), 3 deletions(-)
>
> diff --git a/tools/perf/util/unwind-libdw.c b/tools/perf/util/unwind-libdw.c
> index 0ada907..a74b517 100644
> --- a/tools/perf/util/unwind-libdw.c
> +++ b/tools/perf/util/unwind-libdw.c
> @@ -60,10 +60,8 @@ static int __report_module(struct addr_location *al, u64 ip,
> mod = dwfl_addrmodule(ui->dwfl, ip);
> if (mod) {
> Dwarf_Addr s;
> - void **userdatap;
>
> - dwfl_module_info(mod, &userdatap, &s, NULL, NULL, NULL, NULL, NULL);
> - *userdatap = dso;
> + dwfl_module_info(mod, NULL, &s, NULL, NULL, NULL, NULL, NULL);
> if (s != al->map->start - al->map->pgoff)
> mod = 0;
> }
> @@ -79,6 +77,13 @@ static int __report_module(struct addr_location *al, u64 ip,
> al->map->start - al->map->pgoff, false);
> }
>
> + if (mod) {
> + void **userdatap;
> +
> + dwfl_module_info(mod, &userdatap, NULL, NULL, NULL, NULL, NULL, NULL);
> + *userdatap = dso;
> + }
> +
> return mod && dwfl_addrmodule(ui->dwfl, ip) == mod ? 0 : -1;
> }
>
> --
> 1.8.3.1
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] perf unwind: Set userdata for all __report_module paths
2021-02-18 16:58 ` Dave Rigby
@ 2021-02-18 17:13 ` Arnaldo Carvalho de Melo
2021-02-18 17:19 ` Arnaldo Carvalho de Melo
1 sibling, 0 replies; 6+ messages in thread
From: Arnaldo Carvalho de Melo @ 2021-02-18 17:13 UTC (permalink / raw)
To: Dave Rigby; +Cc: linux-perf-users, Jan Kratochvil, Jiri Olsa
Em Thu, Feb 18, 2021 at 04:58:44PM +0000, Dave Rigby escreveu:
> I missed adding a link to the bugzilla issue: https://bugzilla.kernel.org/show_bug.cgi?id=211801
>
> Note sure what the recommended way of tagging that in the patch is…
I'll add a:
Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=211801
tag,
Thanks,
- Arnaldo
>
> DaveR
>
> > On 18 Feb 2021, at 16:56, d.rigby@me.com wrote:
> >
> > From: Dave Rigby <d.rigby@me.com>
> >
> > When locating the dwarf module for a given address, __find_debuginfo()
> > requires a 'struct dso' passed via the userdata argument.
> >
> > However, this field is only set in __report_module() if the module is
> > found in via dwfl_addrmodule(), not if it is found later via dwfl_report_elf().
> >
> > Set userdata irrespective of how the dwarf module was found, as long
> > as we found a module.
> >
> > Fixes: bf53fc6b5f41 ("perf unwind: Fix separate debug info files when using elfutils' libdw's unwinder")
> > Cc: linux-perf-users@vger.kernel.org
> > Cc: Arnaldo Carvalho de Melo <acme@kernel.org>
> > Cc: Jan Kratochvil <jan.kratochvil@redhat.com>
> > Cc: Jiri Olsa <jolsa@redhat.com>
> > ---
> > tools/perf/util/unwind-libdw.c | 11 ++++++++---
> > 1 file changed, 8 insertions(+), 3 deletions(-)
> >
> > diff --git a/tools/perf/util/unwind-libdw.c b/tools/perf/util/unwind-libdw.c
> > index 0ada907..a74b517 100644
> > --- a/tools/perf/util/unwind-libdw.c
> > +++ b/tools/perf/util/unwind-libdw.c
> > @@ -60,10 +60,8 @@ static int __report_module(struct addr_location *al, u64 ip,
> > mod = dwfl_addrmodule(ui->dwfl, ip);
> > if (mod) {
> > Dwarf_Addr s;
> > - void **userdatap;
> >
> > - dwfl_module_info(mod, &userdatap, &s, NULL, NULL, NULL, NULL, NULL);
> > - *userdatap = dso;
> > + dwfl_module_info(mod, NULL, &s, NULL, NULL, NULL, NULL, NULL);
> > if (s != al->map->start - al->map->pgoff)
> > mod = 0;
> > }
> > @@ -79,6 +77,13 @@ static int __report_module(struct addr_location *al, u64 ip,
> > al->map->start - al->map->pgoff, false);
> > }
> >
> > + if (mod) {
> > + void **userdatap;
> > +
> > + dwfl_module_info(mod, &userdatap, NULL, NULL, NULL, NULL, NULL, NULL);
> > + *userdatap = dso;
> > + }
> > +
> > return mod && dwfl_addrmodule(ui->dwfl, ip) == mod ? 0 : -1;
> > }
> >
> > --
> > 1.8.3.1
>
--
- Arnaldo
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] perf unwind: Set userdata for all __report_module paths
2021-02-18 16:58 ` Dave Rigby
2021-02-18 17:13 ` Arnaldo Carvalho de Melo
@ 2021-02-18 17:19 ` Arnaldo Carvalho de Melo
2021-02-18 17:21 ` Dave Rigby
1 sibling, 1 reply; 6+ messages in thread
From: Arnaldo Carvalho de Melo @ 2021-02-18 17:19 UTC (permalink / raw)
To: Dave Rigby; +Cc: linux-perf-users, Jan Kratochvil, Jiri Olsa
Em Thu, Feb 18, 2021 at 04:58:44PM +0000, Dave Rigby escreveu:
> I missed adding a link to the bugzilla issue: https://bugzilla.kernel.org/show_bug.cgi?id=211801
>
> Note sure what the recommended way of tagging that in the patch is…
You also forgot to add your:
Signed-off-by: Dave Rigby <d.rigby@me.com>
I'm adding it, ok?
Please take a look at Documentation/process/submitting-patches.rst, this
part:
----------------------------------------------------------------------------
Developer's Certificate of Origin 1.1
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
By making a contribution to this project, I certify that:
(a) The contribution was created in whole or in part by me and I
have the right to submit it under the open source license
indicated in the file; or
(b) The contribution is based upon previous work that, to the best
of my knowledge, is covered under an appropriate open source
license and I have the right under that license to submit that
work with modifications, whether created in whole or in part
by me, under the same open source license (unless I am
permitted to submit under a different license), as indicated
in the file; or
(c) The contribution was provided directly to me by some other
person who certified (a), (b) or (c) and I have not modified
it.
(d) I understand and agree that this project and the contribution
are public and that a record of the contribution (including all
personal information I submit with it, including my sign-off) is
maintained indefinitely and may be redistributed consistent with
this project or the open source license(s) involved.
then you just add a line saying::
Signed-off-by: Random J Developer <random@developer.example.org>
using your real name (sorry, no pseudonyms or anonymous contributions.)
This will be done for you automatically if you use ``git commit -s``.
Reverts should also include "Signed-off-by". ``git revert -s`` does that
for you.
Some people also put extra tags at the end. They'll just be ignored for
now, but you can do this to mark internal company procedures or just
point out some special detail about the sign-off.
Any further SoBs (Signed-off-by:'s) following the author's SoB are from
people handling and transporting the patch, but were not involved in its
development. SoB chains should reflect the **real** route a patch took
as it was propagated to the maintainers and ultimately to Linus, with
the first SoB entry signalling primary authorship of a single author.
----------------------------------------------------------------------------
>
> DaveR
>
> > On 18 Feb 2021, at 16:56, d.rigby@me.com wrote:
> >
> > From: Dave Rigby <d.rigby@me.com>
> >
> > When locating the dwarf module for a given address, __find_debuginfo()
> > requires a 'struct dso' passed via the userdata argument.
> >
> > However, this field is only set in __report_module() if the module is
> > found in via dwfl_addrmodule(), not if it is found later via dwfl_report_elf().
> >
> > Set userdata irrespective of how the dwarf module was found, as long
> > as we found a module.
> >
> > Fixes: bf53fc6b5f41 ("perf unwind: Fix separate debug info files when using elfutils' libdw's unwinder")
> > Cc: linux-perf-users@vger.kernel.org
> > Cc: Arnaldo Carvalho de Melo <acme@kernel.org>
> > Cc: Jan Kratochvil <jan.kratochvil@redhat.com>
> > Cc: Jiri Olsa <jolsa@redhat.com>
> > ---
> > tools/perf/util/unwind-libdw.c | 11 ++++++++---
> > 1 file changed, 8 insertions(+), 3 deletions(-)
> >
> > diff --git a/tools/perf/util/unwind-libdw.c b/tools/perf/util/unwind-libdw.c
> > index 0ada907..a74b517 100644
> > --- a/tools/perf/util/unwind-libdw.c
> > +++ b/tools/perf/util/unwind-libdw.c
> > @@ -60,10 +60,8 @@ static int __report_module(struct addr_location *al, u64 ip,
> > mod = dwfl_addrmodule(ui->dwfl, ip);
> > if (mod) {
> > Dwarf_Addr s;
> > - void **userdatap;
> >
> > - dwfl_module_info(mod, &userdatap, &s, NULL, NULL, NULL, NULL, NULL);
> > - *userdatap = dso;
> > + dwfl_module_info(mod, NULL, &s, NULL, NULL, NULL, NULL, NULL);
> > if (s != al->map->start - al->map->pgoff)
> > mod = 0;
> > }
> > @@ -79,6 +77,13 @@ static int __report_module(struct addr_location *al, u64 ip,
> > al->map->start - al->map->pgoff, false);
> > }
> >
> > + if (mod) {
> > + void **userdatap;
> > +
> > + dwfl_module_info(mod, &userdatap, NULL, NULL, NULL, NULL, NULL, NULL);
> > + *userdatap = dso;
> > + }
> > +
> > return mod && dwfl_addrmodule(ui->dwfl, ip) == mod ? 0 : -1;
> > }
> >
> > --
> > 1.8.3.1
>
--
- Arnaldo
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] perf unwind: Set userdata for all __report_module paths
2021-02-18 17:19 ` Arnaldo Carvalho de Melo
@ 2021-02-18 17:21 ` Dave Rigby
0 siblings, 0 replies; 6+ messages in thread
From: Dave Rigby @ 2021-02-18 17:21 UTC (permalink / raw)
To: Arnaldo Carvalho de Melo; +Cc: linux-perf-users, Jan Kratochvil, Jiri Olsa
> On 18 Feb 2021, at 17:19, Arnaldo Carvalho de Melo <acme@kernel.org> wrote:
>
> Em Thu, Feb 18, 2021 at 04:58:44PM +0000, Dave Rigby escreveu:
>> I missed adding a link to the bugzilla issue: https://bugzilla.kernel.org/show_bug.cgi?id=211801
>>
>> Note sure what the recommended way of tagging that in the patch is…
>
> You also forgot to add your:
>
> Signed-off-by: Dave Rigby <d.rigby@me.com>
>
> I'm adding it, ok?
Thanks - I missed that in the documentation.
Signed-off-by: Dave Rigby <d.rigby@me.com>
>
> Please take a look at Documentation/process/submitting-patches.rst, this
> part:
>
> ----------------------------------------------------------------------------
> Developer's Certificate of Origin 1.1
> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>
> By making a contribution to this project, I certify that:
>
> (a) The contribution was created in whole or in part by me and I
> have the right to submit it under the open source license
> indicated in the file; or
>
> (b) The contribution is based upon previous work that, to the best
> of my knowledge, is covered under an appropriate open source
> license and I have the right under that license to submit that
> work with modifications, whether created in whole or in part
> by me, under the same open source license (unless I am
> permitted to submit under a different license), as indicated
> in the file; or
>
> (c) The contribution was provided directly to me by some other
> person who certified (a), (b) or (c) and I have not modified
> it.
>
> (d) I understand and agree that this project and the contribution
> are public and that a record of the contribution (including all
> personal information I submit with it, including my sign-off) is
> maintained indefinitely and may be redistributed consistent with
> this project or the open source license(s) involved.
>
> then you just add a line saying::
>
> Signed-off-by: Random J Developer <random@developer.example.org>
>
> using your real name (sorry, no pseudonyms or anonymous contributions.)
> This will be done for you automatically if you use ``git commit -s``.
> Reverts should also include "Signed-off-by". ``git revert -s`` does that
> for you.
>
> Some people also put extra tags at the end. They'll just be ignored for
> now, but you can do this to mark internal company procedures or just
> point out some special detail about the sign-off.
>
> Any further SoBs (Signed-off-by:'s) following the author's SoB are from
> people handling and transporting the patch, but were not involved in its
> development. SoB chains should reflect the **real** route a patch took
> as it was propagated to the maintainers and ultimately to Linus, with
> the first SoB entry signalling primary authorship of a single author.
> ----------------------------------------------------------------------------
>
>>
>> DaveR
>>
>>> On 18 Feb 2021, at 16:56, d.rigby@me.com wrote:
>>>
>>> From: Dave Rigby <d.rigby@me.com>
>>>
>>> When locating the dwarf module for a given address, __find_debuginfo()
>>> requires a 'struct dso' passed via the userdata argument.
>>>
>>> However, this field is only set in __report_module() if the module is
>>> found in via dwfl_addrmodule(), not if it is found later via dwfl_report_elf().
>>>
>>> Set userdata irrespective of how the dwarf module was found, as long
>>> as we found a module.
>>>
>>> Fixes: bf53fc6b5f41 ("perf unwind: Fix separate debug info files when using elfutils' libdw's unwinder")
>>> Cc: linux-perf-users@vger.kernel.org
>>> Cc: Arnaldo Carvalho de Melo <acme@kernel.org>
>>> Cc: Jan Kratochvil <jan.kratochvil@redhat.com>
>>> Cc: Jiri Olsa <jolsa@redhat.com>
>>> ---
>>> tools/perf/util/unwind-libdw.c | 11 ++++++++---
>>> 1 file changed, 8 insertions(+), 3 deletions(-)
>>>
>>> diff --git a/tools/perf/util/unwind-libdw.c b/tools/perf/util/unwind-libdw.c
>>> index 0ada907..a74b517 100644
>>> --- a/tools/perf/util/unwind-libdw.c
>>> +++ b/tools/perf/util/unwind-libdw.c
>>> @@ -60,10 +60,8 @@ static int __report_module(struct addr_location *al, u64 ip,
>>> mod = dwfl_addrmodule(ui->dwfl, ip);
>>> if (mod) {
>>> Dwarf_Addr s;
>>> - void **userdatap;
>>>
>>> - dwfl_module_info(mod, &userdatap, &s, NULL, NULL, NULL, NULL, NULL);
>>> - *userdatap = dso;
>>> + dwfl_module_info(mod, NULL, &s, NULL, NULL, NULL, NULL, NULL);
>>> if (s != al->map->start - al->map->pgoff)
>>> mod = 0;
>>> }
>>> @@ -79,6 +77,13 @@ static int __report_module(struct addr_location *al, u64 ip,
>>> al->map->start - al->map->pgoff, false);
>>> }
>>>
>>> + if (mod) {
>>> + void **userdatap;
>>> +
>>> + dwfl_module_info(mod, &userdatap, NULL, NULL, NULL, NULL, NULL, NULL);
>>> + *userdatap = dso;
>>> + }
>>> +
>>> return mod && dwfl_addrmodule(ui->dwfl, ip) == mod ? 0 : -1;
>>> }
>>>
>>> --
>>> 1.8.3.1
>>
>
> --
>
> - Arnaldo
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] perf unwind: Set userdata for all __report_module paths
2021-02-18 16:56 [PATCH] perf unwind: Set userdata for all __report_module paths d.rigby
2021-02-18 16:58 ` Dave Rigby
@ 2021-02-18 17:22 ` Jan Kratochvil
1 sibling, 0 replies; 6+ messages in thread
From: Jan Kratochvil @ 2021-02-18 17:22 UTC (permalink / raw)
To: d.rigby; +Cc: linux-perf-users, Arnaldo Carvalho de Melo, Jiri Olsa
On Thu, 18 Feb 2021 17:56:54 +0100, d.rigby@me.com wrote:
> From: Dave Rigby <d.rigby@me.com>
>
> When locating the dwarf module for a given address, __find_debuginfo()
> requires a 'struct dso' passed via the userdata argument.
>
> However, this field is only set in __report_module() if the module is
> found in via dwfl_addrmodule(), not if it is found later via dwfl_report_elf().
>
> Set userdata irrespective of how the dwarf module was found, as long
> as we found a module.
>
> Fixes: bf53fc6b5f41 ("perf unwind: Fix separate debug info files when using elfutils' libdw's unwinder")
> Cc: linux-perf-users@vger.kernel.org
> Cc: Arnaldo Carvalho de Melo <acme@kernel.org>
> Cc: Jan Kratochvil <jan.kratochvil@redhat.com>
> Cc: Jiri Olsa <jolsa@redhat.com>
Acked-by: Jan Kratochvil <jan.kratochvil@redhat.com>
Sorry for the regression,
Jan
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2021-02-18 19:01 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-02-18 16:56 [PATCH] perf unwind: Set userdata for all __report_module paths d.rigby
2021-02-18 16:58 ` Dave Rigby
2021-02-18 17:13 ` Arnaldo Carvalho de Melo
2021-02-18 17:19 ` Arnaldo Carvalho de Melo
2021-02-18 17:21 ` Dave Rigby
2021-02-18 17:22 ` Jan Kratochvil
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).