2022-06-29 22:00:47

by Blake Jones

[permalink] [raw]
Subject: [PATCH v3] Add a "-m" option to "perf buildid-list".

This new option displays all of the information needed to do external
BuildID-based symbolization of kernel stack traces, such as those collected
by bpf_get_stackid(). For each kernel module plus the main kernel, it
displays the BuildID, the start and end virtual addresses of that module's
text range (rounded out to page boundaries), and the pathname of the
module.

When run as a non-privileged user, the actual addresses of the modules'
text ranges are not available, so the tools displays "0, <text length>" for
kernel modules and "0, 0xffffffffffffffff" for the kernel itself.

Sample output:

root# perf buildid-list -m
cf6df852fd4da122d616153353cc8f560fd12fe0 ffffffffa5400000 ffffffffa6001e27 [kernel.kallsyms]
1aa7209aa2acb067d66ed6cf7676d65066384d61 ffffffffc0087000 ffffffffc008b000 /lib/modules/5.15.15-1rodete2-amd64/kernel/crypto/sha512_generic.ko
3857815b5bf0183697b68f8fe0ea06121644041e ffffffffc008c000 ffffffffc0098000 /lib/modules/5.15.15-1rodete2-amd64/kernel/arch/x86/crypto/sha512-ssse3.ko
4081fde0bca2bc097cb3e9d1efcb836047d485f1 ffffffffc0099000 ffffffffc009f000 /lib/modules/5.15.15-1rodete2-amd64/kernel/drivers/acpi/button.ko
1ef81ba4890552ea6b0314f9635fc43fc8cef568 ffffffffc00a4000 ffffffffc00aa000 /lib/modules/5.15.15-1rodete2-amd64/kernel/crypto/cryptd.ko
cc5c985506cb240d7d082b55ed260cbb851f983e ffffffffc00af000 ffffffffc00b6000 /lib/modules/5.15.15-1rodete2-amd64/kernel/drivers/i2c/busses/i2c-piix4.ko
[...]

Signed-off-by: Blake Jones <[email protected]>
---
.../perf/Documentation/perf-buildid-list.txt | 4 ++
tools/perf/builtin-buildid-list.c | 38 ++++++++++++++++++-
tools/perf/util/machine.c | 15 ++++++++
tools/perf/util/machine.h | 5 +++
4 files changed, 61 insertions(+), 1 deletion(-)

diff --git a/tools/perf/Documentation/perf-buildid-list.txt b/tools/perf/Documentation/perf-buildid-list.txt
index 25c52efcc7f0..e1e8fdbe06b9 100644
--- a/tools/perf/Documentation/perf-buildid-list.txt
+++ b/tools/perf/Documentation/perf-buildid-list.txt
@@ -33,6 +33,10 @@ OPTIONS
-k::
--kernel::
Show running kernel build id.
+-m::
+--kernel-maps::
+ Show buildid, start/end text address, and path of running kernel and
+ its modules.
-v::
--verbose::
Be more verbose.
diff --git a/tools/perf/builtin-buildid-list.c b/tools/perf/builtin-buildid-list.c
index cebadd632234..cffca6a536e9 100644
--- a/tools/perf/builtin-buildid-list.c
+++ b/tools/perf/builtin-buildid-list.c
@@ -12,6 +12,7 @@
#include "util/build-id.h"
#include "util/debug.h"
#include "util/dso.h"
+#include "util/map.h"
#include <subcmd/pager.h>
#include <subcmd/parse-options.h>
#include "util/session.h"
@@ -20,6 +21,34 @@
#include <errno.h>
#include <linux/err.h>

+static int buildid__map_cb(struct map *map, void *arg __maybe_unused)
+{
+ const struct dso *dso = map->dso;
+ char bid_buf[SBUILD_ID_SIZE];
+
+ memset(bid_buf, 0, sizeof(bid_buf));
+ if (dso->has_build_id)
+ build_id__sprintf(&dso->bid, bid_buf);
+ printf("%s %16lx %16lx", bid_buf, map->start, map->end);
+ if (dso->long_name != NULL) {
+ printf(" %s", dso->long_name);
+ } else if (dso->short_name != NULL) {
+ printf(" %s", dso->short_name);
+ }
+ printf("\n");
+
+ return 0;
+}
+
+static void buildid__show_kernel_maps(void)
+{
+ struct machine *machine;
+
+ machine = machine__new_host();
+ machine__for_each_kernel_map(machine, buildid__map_cb, NULL);
+ machine__delete(machine);
+}
+
static int sysfs__fprintf_build_id(FILE *fp)
{
char sbuild_id[SBUILD_ID_SIZE];
@@ -99,6 +128,7 @@ static int perf_session__list_build_ids(bool force, bool with_hits)
int cmd_buildid_list(int argc, const char **argv)
{
bool show_kernel = false;
+ bool show_kernel_maps = false;
bool with_hits = false;
bool force = false;
const struct option options[] = {
@@ -106,6 +136,8 @@ int cmd_buildid_list(int argc, const char **argv)
OPT_STRING('i', "input", &input_name, "file", "input file name"),
OPT_BOOLEAN('f', "force", &force, "don't complain, do it"),
OPT_BOOLEAN('k', "kernel", &show_kernel, "Show current kernel build id"),
+ OPT_BOOLEAN('m', "kernel-maps", &show_kernel_maps,
+ "Show build id of current kernel + modules"),
OPT_INCR('v', "verbose", &verbose, "be more verbose"),
OPT_END()
};
@@ -117,8 +149,12 @@ int cmd_buildid_list(int argc, const char **argv)
argc = parse_options(argc, argv, options, buildid_list_usage, 0);
setup_pager();

- if (show_kernel)
+ if (show_kernel) {
return !(sysfs__fprintf_build_id(stdout) > 0);
+ } else if (show_kernel_maps) {
+ buildid__show_kernel_maps();
+ return 0;
+ }

return perf_session__list_build_ids(force, with_hits);
}
diff --git a/tools/perf/util/machine.c b/tools/perf/util/machine.c
index 009061852808..16d225149b93 100644
--- a/tools/perf/util/machine.c
+++ b/tools/perf/util/machine.c
@@ -3327,3 +3327,18 @@ int machine__for_each_dso(struct machine *machine, machine__dso_t fn, void *priv
}
return err;
}
+
+int machine__for_each_kernel_map(struct machine *machine, machine__map_t fn, void *priv)
+{
+ struct maps *maps = machine__kernel_maps(machine);
+ struct map *map;
+ int err = 0;
+
+ for (map = maps__first(maps); map != NULL; map = map__next(map)) {
+ err = fn(map, priv);
+ if (err != 0) {
+ break;
+ }
+ }
+ return err;
+}
diff --git a/tools/perf/util/machine.h b/tools/perf/util/machine.h
index 5d7daf7cb7bc..e1476343cbb2 100644
--- a/tools/perf/util/machine.h
+++ b/tools/perf/util/machine.h
@@ -262,6 +262,11 @@ typedef int (*machine__dso_t)(struct dso *dso, struct machine *machine, void *pr

int machine__for_each_dso(struct machine *machine, machine__dso_t fn,
void *priv);
+
+typedef int (*machine__map_t)(struct map *map, void *priv);
+int machine__for_each_kernel_map(struct machine *machine, machine__map_t fn,
+ void *priv);
+
int machine__for_each_thread(struct machine *machine,
int (*fn)(struct thread *thread, void *p),
void *priv);

base-commit: 1bcca2b1bd67f3c0e5c3a88ed16c6389f01a5b31
--
2.37.0.rc0.161.g10f37bed90-goog


2022-07-01 09:03:53

by Jiri Olsa

[permalink] [raw]
Subject: Re: [PATCH v3] Add a "-m" option to "perf buildid-list".

On Wed, Jun 29, 2022 at 02:36:32PM -0700, Blake Jones wrote:
> This new option displays all of the information needed to do external
> BuildID-based symbolization of kernel stack traces, such as those collected
> by bpf_get_stackid(). For each kernel module plus the main kernel, it
> displays the BuildID, the start and end virtual addresses of that module's
> text range (rounded out to page boundaries), and the pathname of the
> module.
>
> When run as a non-privileged user, the actual addresses of the modules'
> text ranges are not available, so the tools displays "0, <text length>" for
> kernel modules and "0, 0xffffffffffffffff" for the kernel itself.
>
> Sample output:
>
> root# perf buildid-list -m
> cf6df852fd4da122d616153353cc8f560fd12fe0 ffffffffa5400000 ffffffffa6001e27 [kernel.kallsyms]
> 1aa7209aa2acb067d66ed6cf7676d65066384d61 ffffffffc0087000 ffffffffc008b000 /lib/modules/5.15.15-1rodete2-amd64/kernel/crypto/sha512_generic.ko
> 3857815b5bf0183697b68f8fe0ea06121644041e ffffffffc008c000 ffffffffc0098000 /lib/modules/5.15.15-1rodete2-amd64/kernel/arch/x86/crypto/sha512-ssse3.ko
> 4081fde0bca2bc097cb3e9d1efcb836047d485f1 ffffffffc0099000 ffffffffc009f000 /lib/modules/5.15.15-1rodete2-amd64/kernel/drivers/acpi/button.ko
> 1ef81ba4890552ea6b0314f9635fc43fc8cef568 ffffffffc00a4000 ffffffffc00aa000 /lib/modules/5.15.15-1rodete2-amd64/kernel/crypto/cryptd.ko
> cc5c985506cb240d7d082b55ed260cbb851f983e ffffffffc00af000 ffffffffc00b6000 /lib/modules/5.15.15-1rodete2-amd64/kernel/drivers/i2c/busses/i2c-piix4.ko
> [...]
>
> Signed-off-by: Blake Jones <[email protected]>

Acked-by: Jiri Olsa <[email protected]>

thanks,
jirka

> ---
> .../perf/Documentation/perf-buildid-list.txt | 4 ++
> tools/perf/builtin-buildid-list.c | 38 ++++++++++++++++++-
> tools/perf/util/machine.c | 15 ++++++++
> tools/perf/util/machine.h | 5 +++
> 4 files changed, 61 insertions(+), 1 deletion(-)
>
> diff --git a/tools/perf/Documentation/perf-buildid-list.txt b/tools/perf/Documentation/perf-buildid-list.txt
> index 25c52efcc7f0..e1e8fdbe06b9 100644
> --- a/tools/perf/Documentation/perf-buildid-list.txt
> +++ b/tools/perf/Documentation/perf-buildid-list.txt
> @@ -33,6 +33,10 @@ OPTIONS
> -k::
> --kernel::
> Show running kernel build id.
> +-m::
> +--kernel-maps::
> + Show buildid, start/end text address, and path of running kernel and
> + its modules.
> -v::
> --verbose::
> Be more verbose.
> diff --git a/tools/perf/builtin-buildid-list.c b/tools/perf/builtin-buildid-list.c
> index cebadd632234..cffca6a536e9 100644
> --- a/tools/perf/builtin-buildid-list.c
> +++ b/tools/perf/builtin-buildid-list.c
> @@ -12,6 +12,7 @@
> #include "util/build-id.h"
> #include "util/debug.h"
> #include "util/dso.h"
> +#include "util/map.h"
> #include <subcmd/pager.h>
> #include <subcmd/parse-options.h>
> #include "util/session.h"
> @@ -20,6 +21,34 @@
> #include <errno.h>
> #include <linux/err.h>
>
> +static int buildid__map_cb(struct map *map, void *arg __maybe_unused)
> +{
> + const struct dso *dso = map->dso;
> + char bid_buf[SBUILD_ID_SIZE];
> +
> + memset(bid_buf, 0, sizeof(bid_buf));
> + if (dso->has_build_id)
> + build_id__sprintf(&dso->bid, bid_buf);
> + printf("%s %16lx %16lx", bid_buf, map->start, map->end);
> + if (dso->long_name != NULL) {
> + printf(" %s", dso->long_name);
> + } else if (dso->short_name != NULL) {
> + printf(" %s", dso->short_name);
> + }
> + printf("\n");
> +
> + return 0;
> +}
> +
> +static void buildid__show_kernel_maps(void)
> +{
> + struct machine *machine;
> +
> + machine = machine__new_host();
> + machine__for_each_kernel_map(machine, buildid__map_cb, NULL);
> + machine__delete(machine);
> +}
> +
> static int sysfs__fprintf_build_id(FILE *fp)
> {
> char sbuild_id[SBUILD_ID_SIZE];
> @@ -99,6 +128,7 @@ static int perf_session__list_build_ids(bool force, bool with_hits)
> int cmd_buildid_list(int argc, const char **argv)
> {
> bool show_kernel = false;
> + bool show_kernel_maps = false;
> bool with_hits = false;
> bool force = false;
> const struct option options[] = {
> @@ -106,6 +136,8 @@ int cmd_buildid_list(int argc, const char **argv)
> OPT_STRING('i', "input", &input_name, "file", "input file name"),
> OPT_BOOLEAN('f', "force", &force, "don't complain, do it"),
> OPT_BOOLEAN('k', "kernel", &show_kernel, "Show current kernel build id"),
> + OPT_BOOLEAN('m', "kernel-maps", &show_kernel_maps,
> + "Show build id of current kernel + modules"),
> OPT_INCR('v', "verbose", &verbose, "be more verbose"),
> OPT_END()
> };
> @@ -117,8 +149,12 @@ int cmd_buildid_list(int argc, const char **argv)
> argc = parse_options(argc, argv, options, buildid_list_usage, 0);
> setup_pager();
>
> - if (show_kernel)
> + if (show_kernel) {
> return !(sysfs__fprintf_build_id(stdout) > 0);
> + } else if (show_kernel_maps) {
> + buildid__show_kernel_maps();
> + return 0;
> + }
>
> return perf_session__list_build_ids(force, with_hits);
> }
> diff --git a/tools/perf/util/machine.c b/tools/perf/util/machine.c
> index 009061852808..16d225149b93 100644
> --- a/tools/perf/util/machine.c
> +++ b/tools/perf/util/machine.c
> @@ -3327,3 +3327,18 @@ int machine__for_each_dso(struct machine *machine, machine__dso_t fn, void *priv
> }
> return err;
> }
> +
> +int machine__for_each_kernel_map(struct machine *machine, machine__map_t fn, void *priv)
> +{
> + struct maps *maps = machine__kernel_maps(machine);
> + struct map *map;
> + int err = 0;
> +
> + for (map = maps__first(maps); map != NULL; map = map__next(map)) {
> + err = fn(map, priv);
> + if (err != 0) {
> + break;
> + }
> + }
> + return err;
> +}
> diff --git a/tools/perf/util/machine.h b/tools/perf/util/machine.h
> index 5d7daf7cb7bc..e1476343cbb2 100644
> --- a/tools/perf/util/machine.h
> +++ b/tools/perf/util/machine.h
> @@ -262,6 +262,11 @@ typedef int (*machine__dso_t)(struct dso *dso, struct machine *machine, void *pr
>
> int machine__for_each_dso(struct machine *machine, machine__dso_t fn,
> void *priv);
> +
> +typedef int (*machine__map_t)(struct map *map, void *priv);
> +int machine__for_each_kernel_map(struct machine *machine, machine__map_t fn,
> + void *priv);
> +
> int machine__for_each_thread(struct machine *machine,
> int (*fn)(struct thread *thread, void *p),
> void *priv);
>
> base-commit: 1bcca2b1bd67f3c0e5c3a88ed16c6389f01a5b31
> --
> 2.37.0.rc0.161.g10f37bed90-goog
>

2022-07-18 14:54:01

by Arnaldo Carvalho de Melo

[permalink] [raw]
Subject: Re: [PATCH v3] Add a "-m" option to "perf buildid-list".

Em Fri, Jul 01, 2022 at 10:23:26AM +0200, Jiri Olsa escreveu:
> On Wed, Jun 29, 2022 at 02:36:32PM -0700, Blake Jones wrote:
> > This new option displays all of the information needed to do external
> > BuildID-based symbolization of kernel stack traces, such as those collected
> > by bpf_get_stackid(). For each kernel module plus the main kernel, it
> > displays the BuildID, the start and end virtual addresses of that module's
> > text range (rounded out to page boundaries), and the pathname of the
> > module.
> >
> > When run as a non-privileged user, the actual addresses of the modules'
> > text ranges are not available, so the tools displays "0, <text length>" for
> > kernel modules and "0, 0xffffffffffffffff" for the kernel itself.
> >
> > Sample output:
> >
> > root# perf buildid-list -m
> > cf6df852fd4da122d616153353cc8f560fd12fe0 ffffffffa5400000 ffffffffa6001e27 [kernel.kallsyms]
> > 1aa7209aa2acb067d66ed6cf7676d65066384d61 ffffffffc0087000 ffffffffc008b000 /lib/modules/5.15.15-1rodete2-amd64/kernel/crypto/sha512_generic.ko
> > 3857815b5bf0183697b68f8fe0ea06121644041e ffffffffc008c000 ffffffffc0098000 /lib/modules/5.15.15-1rodete2-amd64/kernel/arch/x86/crypto/sha512-ssse3.ko
> > 4081fde0bca2bc097cb3e9d1efcb836047d485f1 ffffffffc0099000 ffffffffc009f000 /lib/modules/5.15.15-1rodete2-amd64/kernel/drivers/acpi/button.ko
> > 1ef81ba4890552ea6b0314f9635fc43fc8cef568 ffffffffc00a4000 ffffffffc00aa000 /lib/modules/5.15.15-1rodete2-amd64/kernel/crypto/cryptd.ko
> > cc5c985506cb240d7d082b55ed260cbb851f983e ffffffffc00af000 ffffffffc00b6000 /lib/modules/5.15.15-1rodete2-amd64/kernel/drivers/i2c/busses/i2c-piix4.ko
> > [...]
> >
> > Signed-off-by: Blake Jones <[email protected]>
>
> Acked-by: Jiri Olsa <[email protected]>

To clarify, b4 found v3 and that was the one applied.

Thanks,

- Arnaldo

> thanks,
> jirka
>
> > ---
> > .../perf/Documentation/perf-buildid-list.txt | 4 ++
> > tools/perf/builtin-buildid-list.c | 38 ++++++++++++++++++-
> > tools/perf/util/machine.c | 15 ++++++++
> > tools/perf/util/machine.h | 5 +++
> > 4 files changed, 61 insertions(+), 1 deletion(-)
> >
> > diff --git a/tools/perf/Documentation/perf-buildid-list.txt b/tools/perf/Documentation/perf-buildid-list.txt
> > index 25c52efcc7f0..e1e8fdbe06b9 100644
> > --- a/tools/perf/Documentation/perf-buildid-list.txt
> > +++ b/tools/perf/Documentation/perf-buildid-list.txt
> > @@ -33,6 +33,10 @@ OPTIONS
> > -k::
> > --kernel::
> > Show running kernel build id.
> > +-m::
> > +--kernel-maps::
> > + Show buildid, start/end text address, and path of running kernel and
> > + its modules.
> > -v::
> > --verbose::
> > Be more verbose.
> > diff --git a/tools/perf/builtin-buildid-list.c b/tools/perf/builtin-buildid-list.c
> > index cebadd632234..cffca6a536e9 100644
> > --- a/tools/perf/builtin-buildid-list.c
> > +++ b/tools/perf/builtin-buildid-list.c
> > @@ -12,6 +12,7 @@
> > #include "util/build-id.h"
> > #include "util/debug.h"
> > #include "util/dso.h"
> > +#include "util/map.h"
> > #include <subcmd/pager.h>
> > #include <subcmd/parse-options.h>
> > #include "util/session.h"
> > @@ -20,6 +21,34 @@
> > #include <errno.h>
> > #include <linux/err.h>
> >
> > +static int buildid__map_cb(struct map *map, void *arg __maybe_unused)
> > +{
> > + const struct dso *dso = map->dso;
> > + char bid_buf[SBUILD_ID_SIZE];
> > +
> > + memset(bid_buf, 0, sizeof(bid_buf));
> > + if (dso->has_build_id)
> > + build_id__sprintf(&dso->bid, bid_buf);
> > + printf("%s %16lx %16lx", bid_buf, map->start, map->end);
> > + if (dso->long_name != NULL) {
> > + printf(" %s", dso->long_name);
> > + } else if (dso->short_name != NULL) {
> > + printf(" %s", dso->short_name);
> > + }
> > + printf("\n");
> > +
> > + return 0;
> > +}
> > +
> > +static void buildid__show_kernel_maps(void)
> > +{
> > + struct machine *machine;
> > +
> > + machine = machine__new_host();
> > + machine__for_each_kernel_map(machine, buildid__map_cb, NULL);
> > + machine__delete(machine);
> > +}
> > +
> > static int sysfs__fprintf_build_id(FILE *fp)
> > {
> > char sbuild_id[SBUILD_ID_SIZE];
> > @@ -99,6 +128,7 @@ static int perf_session__list_build_ids(bool force, bool with_hits)
> > int cmd_buildid_list(int argc, const char **argv)
> > {
> > bool show_kernel = false;
> > + bool show_kernel_maps = false;
> > bool with_hits = false;
> > bool force = false;
> > const struct option options[] = {
> > @@ -106,6 +136,8 @@ int cmd_buildid_list(int argc, const char **argv)
> > OPT_STRING('i', "input", &input_name, "file", "input file name"),
> > OPT_BOOLEAN('f', "force", &force, "don't complain, do it"),
> > OPT_BOOLEAN('k', "kernel", &show_kernel, "Show current kernel build id"),
> > + OPT_BOOLEAN('m', "kernel-maps", &show_kernel_maps,
> > + "Show build id of current kernel + modules"),
> > OPT_INCR('v', "verbose", &verbose, "be more verbose"),
> > OPT_END()
> > };
> > @@ -117,8 +149,12 @@ int cmd_buildid_list(int argc, const char **argv)
> > argc = parse_options(argc, argv, options, buildid_list_usage, 0);
> > setup_pager();
> >
> > - if (show_kernel)
> > + if (show_kernel) {
> > return !(sysfs__fprintf_build_id(stdout) > 0);
> > + } else if (show_kernel_maps) {
> > + buildid__show_kernel_maps();
> > + return 0;
> > + }
> >
> > return perf_session__list_build_ids(force, with_hits);
> > }
> > diff --git a/tools/perf/util/machine.c b/tools/perf/util/machine.c
> > index 009061852808..16d225149b93 100644
> > --- a/tools/perf/util/machine.c
> > +++ b/tools/perf/util/machine.c
> > @@ -3327,3 +3327,18 @@ int machine__for_each_dso(struct machine *machine, machine__dso_t fn, void *priv
> > }
> > return err;
> > }
> > +
> > +int machine__for_each_kernel_map(struct machine *machine, machine__map_t fn, void *priv)
> > +{
> > + struct maps *maps = machine__kernel_maps(machine);
> > + struct map *map;
> > + int err = 0;
> > +
> > + for (map = maps__first(maps); map != NULL; map = map__next(map)) {
> > + err = fn(map, priv);
> > + if (err != 0) {
> > + break;
> > + }
> > + }
> > + return err;
> > +}
> > diff --git a/tools/perf/util/machine.h b/tools/perf/util/machine.h
> > index 5d7daf7cb7bc..e1476343cbb2 100644
> > --- a/tools/perf/util/machine.h
> > +++ b/tools/perf/util/machine.h
> > @@ -262,6 +262,11 @@ typedef int (*machine__dso_t)(struct dso *dso, struct machine *machine, void *pr
> >
> > int machine__for_each_dso(struct machine *machine, machine__dso_t fn,
> > void *priv);
> > +
> > +typedef int (*machine__map_t)(struct map *map, void *priv);
> > +int machine__for_each_kernel_map(struct machine *machine, machine__map_t fn,
> > + void *priv);
> > +
> > int machine__for_each_thread(struct machine *machine,
> > int (*fn)(struct thread *thread, void *p),
> > void *priv);
> >
> > base-commit: 1bcca2b1bd67f3c0e5c3a88ed16c6389f01a5b31
> > --
> > 2.37.0.rc0.161.g10f37bed90-goog
> >

--

- Arnaldo

2022-07-18 19:37:06

by Arnaldo Carvalho de Melo

[permalink] [raw]
Subject: Re: [PATCH v3] Add a "-m" option to "perf buildid-list".

Em Mon, Jul 18, 2022 at 10:07:32AM -0700, Blake Jones escreveu:
> Fabulous, thanks!
>
> On Mon, Jul 18, 2022 at 7:51 AM Arnaldo Carvalho de Melo <[email protected]>
> wrote:
> > > > Signed-off-by: Blake Jones <[email protected]>
> > >
> > > Acked-by: Jiri Olsa <[email protected]>
> >
> > To clarify, b4 found v3 and that was the one applied.

Now fixing this:

28 5.28 debian:experimental-x-mips : FAIL gcc version 11.2.0 (Debian 11.2.0-18)
builtin-buildid-list.c: In function 'buildid__map_cb':
builtin-buildid-list.c:32:24: error: format '%lx' expects argument of type 'long unsigned int', but argument 3 has type 'u64' {aka 'long long unsigned int'} [-Werror=format=]
32 | printf("%s %16lx %16lx", bid_buf, map->start, map->end);
| ~~~~^ ~~~~~~~~~~
| | |
| long unsigned int u64 {aka long long unsigned int}
| %16llx
builtin-buildid-list.c:32:30: error: format '%lx' expects argument of type 'long unsigned int', but argument 4 has type 'u64' {aka 'long long unsigned int'} [-Werror=format=]
32 | printf("%s %16lx %16lx", bid_buf, map->start, map->end);
| ~~~~^ ~~~~~~~~
| | |
| long unsigned int u64 {aka long long unsigned int}
| %16llx
cc1: all warnings being treated as errors
29 23.06 debian:experimental-x-mips64 : Ok mips64-linux-gnuabi64-gcc (Debian 10.2.1-6) 10.2.1 20210110
30 6.08 debian:experimental-x-mipsel : FAIL gcc version 11.2.0 (Debian 11.2.0-18)
builtin-buildid-list.c: In function 'buildid__map_cb':
builtin-buildid-list.c:32:24: error: format '%lx' expects argument of type 'long unsigned int', but argument 3 has type 'u64' {aka 'long long unsigned int'} [-Werror=format=]
32 | printf("%s %16lx %16lx", bid_buf, map->start, map->end);
| ~~~~^ ~~~~~~~~~~
| | |
| long unsigned int u64 {aka long long unsigned int}
| %16llx
builtin-buildid-list.c:32:30: error: format '%lx' expects argument of type 'long unsigned int', but argument 4 has type 'u64' {aka 'long long unsigned int'} [-Werror=format=]
32 | printf("%s %16lx %16lx", bid_buf, map->start, map->end);
| ~~~~^ ~~~~~~~~
| | |
| long unsigned int u64 {aka long long unsigned int}
| %16llx
cc1: all warnings being treated as errors


These should use PRIx64, etc.

- Arnaldo

2022-07-18 20:55:54

by Blake Jones

[permalink] [raw]
Subject: Re: [PATCH v3] Add a "-m" option to "perf buildid-list".

Ah yeah of course, sorry about that!


On Mon, Jul 18, 2022 at 12:33 PM Arnaldo Carvalho de Melo
<[email protected]> wrote:
>
> Em Mon, Jul 18, 2022 at 10:07:32AM -0700, Blake Jones escreveu:
> > Fabulous, thanks!
> >
> > On Mon, Jul 18, 2022 at 7:51 AM Arnaldo Carvalho de Melo <[email protected]>
> > wrote:
> > > > > Signed-off-by: Blake Jones <[email protected]>
> > > >
> > > > Acked-by: Jiri Olsa <[email protected]>
> > >
> > > To clarify, b4 found v3 and that was the one applied.
>
> Now fixing this:
>
> 28 5.28 debian:experimental-x-mips : FAIL gcc version 11.2.0 (Debian 11.2.0-18)
> builtin-buildid-list.c: In function 'buildid__map_cb':
> builtin-buildid-list.c:32:24: error: format '%lx' expects argument of type 'long unsigned int', but argument 3 has type 'u64' {aka 'long long unsigned int'} [-Werror=format=]
> 32 | printf("%s %16lx %16lx", bid_buf, map->start, map->end);
> | ~~~~^ ~~~~~~~~~~
> | | |
> | long unsigned int u64 {aka long long unsigned int}
> | %16llx
> builtin-buildid-list.c:32:30: error: format '%lx' expects argument of type 'long unsigned int', but argument 4 has type 'u64' {aka 'long long unsigned int'} [-Werror=format=]
> 32 | printf("%s %16lx %16lx", bid_buf, map->start, map->end);
> | ~~~~^ ~~~~~~~~
> | | |
> | long unsigned int u64 {aka long long unsigned int}
> | %16llx
> cc1: all warnings being treated as errors
> 29 23.06 debian:experimental-x-mips64 : Ok mips64-linux-gnuabi64-gcc (Debian 10.2.1-6) 10.2.1 20210110
> 30 6.08 debian:experimental-x-mipsel : FAIL gcc version 11.2.0 (Debian 11.2.0-18)
> builtin-buildid-list.c: In function 'buildid__map_cb':
> builtin-buildid-list.c:32:24: error: format '%lx' expects argument of type 'long unsigned int', but argument 3 has type 'u64' {aka 'long long unsigned int'} [-Werror=format=]
> 32 | printf("%s %16lx %16lx", bid_buf, map->start, map->end);
> | ~~~~^ ~~~~~~~~~~
> | | |
> | long unsigned int u64 {aka long long unsigned int}
> | %16llx
> builtin-buildid-list.c:32:30: error: format '%lx' expects argument of type 'long unsigned int', but argument 4 has type 'u64' {aka 'long long unsigned int'} [-Werror=format=]
> 32 | printf("%s %16lx %16lx", bid_buf, map->start, map->end);
> | ~~~~^ ~~~~~~~~
> | | |
> | long unsigned int u64 {aka long long unsigned int}
> | %16llx
> cc1: all warnings being treated as errors
>
>
> These should use PRIx64, etc.
>
> - Arnaldo