From: Arnaldo Carvalho de Melo <acme@kernel.org>
To: Jianlin Lv <Jianlin.Lv@arm.com>
Cc: john.garry@huawei.com, will@kernel.org,
mathieu.poirier@linaro.org, leo.yan@linaro.org,
peterz@infradead.org, mingo@redhat.com, mark.rutland@arm.com,
alexander.shishkin@linux.intel.com, jolsa@redhat.com,
namhyung@kernel.org, irogers@google.com, agerstmayr@redhat.com,
kan.liang@linux.intel.com, adrian.hunter@intel.com,
iecedge@gmail.com, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v4] perf tools: Fix arm64 build error with gcc-11
Date: Wed, 17 Feb 2021 09:55:43 -0300 [thread overview]
Message-ID: <YC0ST0Q24LuCboKr@kernel.org> (raw)
In-Reply-To: <20210217115830.1414355-1-Jianlin.Lv@arm.com>
Em Wed, Feb 17, 2021 at 07:58:30PM +0800, Jianlin Lv escreveu:
> gcc version: 11.0.0 20210208 (experimental) (GCC)
>
> Following build error on arm64:
>
> .......
> In function ‘printf’,
> inlined from ‘regs_dump__printf’ at util/session.c:1141:3,
> inlined from ‘regs__printf’ at util/session.c:1169:2:
> /usr/include/aarch64-linux-gnu/bits/stdio2.h:107:10: \
> error: ‘%-5s’ directive argument is null [-Werror=format-overflow=]
>
> 107 | return __printf_chk (__USE_FORTIFY_LEVEL - 1, __fmt, \
> __va_arg_pack ());
>
> ......
> In function ‘fprintf’,
> inlined from ‘perf_sample__fprintf_regs.isra’ at \
> builtin-script.c:622:14:
> /usr/include/aarch64-linux-gnu/bits/stdio2.h:100:10: \
> error: ‘%5s’ directive argument is null [-Werror=format-overflow=]
> 100 | return __fprintf_chk (__stream, __USE_FORTIFY_LEVEL - 1, __fmt,
> 101 | __va_arg_pack ());
>
> cc1: all warnings being treated as errors
> .......
>
> This patch fixes Wformat-overflow warnings. Add helper function to
> convert NULL to "unknown".
I think this is the right approach, but since both return a string, it
is strange that only one of them have its _str() at the end, what we
usually do in such cases is to have:
const char *__perf_reg_name(int id)
{
return NULL if id unknown;
}
And:
static inline const char *perf_reg_name(int id)
{
const char *name = __perf_reg_name(id);
return name ?: "unknown";
}
Ok?
- Arnaldo
> Signed-off-by: Jianlin Lv <Jianlin.Lv@arm.com>
> ---
> v2: Add ternary operator to avoid similar errors in other arch.
> v3: Declared reg_name in inner block.
> v4: Add helper function: perf_reg_name_str, update changelog.
> ---
> tools/perf/builtin-script.c | 2 +-
> tools/perf/util/perf_regs.h | 11 ++++++++++-
> .../perf/util/scripting-engines/trace-event-python.c | 2 +-
> tools/perf/util/session.c | 2 +-
> 4 files changed, 13 insertions(+), 4 deletions(-)
>
> diff --git a/tools/perf/builtin-script.c b/tools/perf/builtin-script.c
> index 42dad4a0f8cf..35cddca2c7a7 100644
> --- a/tools/perf/builtin-script.c
> +++ b/tools/perf/builtin-script.c
> @@ -643,7 +643,7 @@ static int perf_sample__fprintf_regs(struct regs_dump *regs, uint64_t mask,
>
> for_each_set_bit(r, (unsigned long *) &mask, sizeof(mask) * 8) {
> u64 val = regs->regs[i++];
> - printed += fprintf(fp, "%5s:0x%"PRIx64" ", perf_reg_name(r), val);
> + printed += fprintf(fp, "%5s:0x%"PRIx64" ", perf_reg_name_str(r), val);
> }
>
> return printed;
> diff --git a/tools/perf/util/perf_regs.h b/tools/perf/util/perf_regs.h
> index a45499126184..e4a0a6f5408e 100644
> --- a/tools/perf/util/perf_regs.h
> +++ b/tools/perf/util/perf_regs.h
> @@ -33,13 +33,22 @@ extern const struct sample_reg sample_reg_masks[];
>
> int perf_reg_value(u64 *valp, struct regs_dump *regs, int id);
>
> +static inline const char *perf_reg_name_str(int id)
> +{
> + const char *str = perf_reg_name(id);
> +
> + if (!str)
> + return "unknown";
> + return str;
> +}
> +
> #else
> #define PERF_REGS_MASK 0
> #define PERF_REGS_MAX 0
>
> #define DWARF_MINIMAL_REGS PERF_REGS_MASK
>
> -static inline const char *perf_reg_name(int id __maybe_unused)
> +static inline const char *perf_reg_name_str(int id __maybe_unused)
> {
> return "unknown";
> }
> diff --git a/tools/perf/util/scripting-engines/trace-event-python.c b/tools/perf/util/scripting-engines/trace-event-python.c
> index c83c2c6564e0..361307026485 100644
> --- a/tools/perf/util/scripting-engines/trace-event-python.c
> +++ b/tools/perf/util/scripting-engines/trace-event-python.c
> @@ -702,7 +702,7 @@ static int regs_map(struct regs_dump *regs, uint64_t mask, char *bf, int size)
>
> printed += scnprintf(bf + printed, size - printed,
> "%5s:0x%" PRIx64 " ",
> - perf_reg_name(r), val);
> + perf_reg_name_str(r), val);
> }
>
> return printed;
> diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c
> index 25adbcce0281..0737d3e7e698 100644
> --- a/tools/perf/util/session.c
> +++ b/tools/perf/util/session.c
> @@ -1140,7 +1140,7 @@ static void regs_dump__printf(u64 mask, u64 *regs)
> u64 val = regs[i++];
>
> printf(".... %-5s 0x%016" PRIx64 "\n",
> - perf_reg_name(rid), val);
> + perf_reg_name_str(rid), val);
> }
> }
>
> --
> 2.25.1
>
--
- Arnaldo
prev parent reply other threads:[~2021-02-17 12:56 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-02-17 11:58 [PATCH v4] perf tools: Fix arm64 build error with gcc-11 Jianlin Lv
2021-02-17 12:55 ` Arnaldo Carvalho de Melo [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=YC0ST0Q24LuCboKr@kernel.org \
--to=acme@kernel.org \
--cc=Jianlin.Lv@arm.com \
--cc=adrian.hunter@intel.com \
--cc=agerstmayr@redhat.com \
--cc=alexander.shishkin@linux.intel.com \
--cc=iecedge@gmail.com \
--cc=irogers@google.com \
--cc=john.garry@huawei.com \
--cc=jolsa@redhat.com \
--cc=kan.liang@linux.intel.com \
--cc=leo.yan@linaro.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mark.rutland@arm.com \
--cc=mathieu.poirier@linaro.org \
--cc=mingo@redhat.com \
--cc=namhyung@kernel.org \
--cc=peterz@infradead.org \
--cc=will@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.