2021-02-09 14:54:57

by Dmitry Safonov

[permalink] [raw]
Subject: [PATCH] perf: Use (long) for iterator for bfd symbols

GCC (GCC) 8.4.0 20200304 fails to build perf with:
: util/symbol.c: In function 'dso__load_bfd_symbols':
: util/symbol.c:1626:16: error: comparison of integer expressions of different signednes
: for (i = 0; i < symbols_count; ++i) {
: ^
: util/symbol.c:1632:16: error: comparison of integer expressions of different signednes
: while (i + 1 < symbols_count &&
: ^
: util/symbol.c:1637:13: error: comparison of integer expressions of different signednes
: if (i + 1 < symbols_count &&
: ^
: cc1: all warnings being treated as errors

It's unlikely that the symtable will be that big, but the fix is
oneliner and as perf has CORE_CFLAGS += -Wextra, which makes build to
fail together with CORE_CFLAGS += -Werror

Fixes: eac9a4342e54 ("perf symbols: Try reading the symbol table with libbfd")
Cc: Alexander Shishkin <[email protected]>
Cc: Arnaldo Carvalho de Melo <[email protected]>
Cc: Ingo Molnar <[email protected]>
Cc: Jacek Caban <[email protected]>
Cc: Jiri Olsa <[email protected]>
Cc: Mark Rutland <[email protected]>
Cc: Namhyung Kim <[email protected]>
Cc: Peter Zijlstra <[email protected]>
Cc: Remi Bernon <[email protected]>
Signed-off-by: Dmitry Safonov <[email protected]>
---
tools/perf/util/symbol.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/tools/perf/util/symbol.c b/tools/perf/util/symbol.c
index 64a039cbba1b..1645fb4ec9ed 100644
--- a/tools/perf/util/symbol.c
+++ b/tools/perf/util/symbol.c
@@ -1561,12 +1561,11 @@ static int bfd2elf_binding(asymbol *symbol)
int dso__load_bfd_symbols(struct dso *dso, const char *debugfile)
{
int err = -1;
- long symbols_size, symbols_count;
+ long symbols_size, symbols_count, i;
asection *section;
asymbol **symbols, *sym;
struct symbol *symbol;
bfd *abfd;
- u_int i;
u64 start, len;

abfd = bfd_openr(dso->long_name, NULL);
--
2.30.0


2021-02-11 09:39:10

by Namhyung Kim

[permalink] [raw]
Subject: Re: [PATCH] perf: Use (long) for iterator for bfd symbols

Hello,

On Tue, Feb 9, 2021 at 11:51 PM Dmitry Safonov <[email protected]> wrote:
>
> GCC (GCC) 8.4.0 20200304 fails to build perf with:
> : util/symbol.c: In function 'dso__load_bfd_symbols':
> : util/symbol.c:1626:16: error: comparison of integer expressions of different signednes
> : for (i = 0; i < symbols_count; ++i) {
> : ^
> : util/symbol.c:1632:16: error: comparison of integer expressions of different signednes
> : while (i + 1 < symbols_count &&
> : ^
> : util/symbol.c:1637:13: error: comparison of integer expressions of different signednes
> : if (i + 1 < symbols_count &&
> : ^
> : cc1: all warnings being treated as errors
>
> It's unlikely that the symtable will be that big, but the fix is
> oneliner and as perf has CORE_CFLAGS += -Wextra, which makes build to
> fail together with CORE_CFLAGS += -Werror
>
> Fixes: eac9a4342e54 ("perf symbols: Try reading the symbol table with libbfd")
> Cc: Alexander Shishkin <[email protected]>
> Cc: Arnaldo Carvalho de Melo <[email protected]>
> Cc: Ingo Molnar <[email protected]>
> Cc: Jacek Caban <[email protected]>
> Cc: Jiri Olsa <[email protected]>
> Cc: Mark Rutland <[email protected]>
> Cc: Namhyung Kim <[email protected]>
> Cc: Peter Zijlstra <[email protected]>
> Cc: Remi Bernon <[email protected]>
> Signed-off-by: Dmitry Safonov <[email protected]>

Acked-by: Namhyung Kim <[email protected]>

Thanks,
Namhyung


> ---
> tools/perf/util/symbol.c | 3 +--
> 1 file changed, 1 insertion(+), 2 deletions(-)
>
> diff --git a/tools/perf/util/symbol.c b/tools/perf/util/symbol.c
> index 64a039cbba1b..1645fb4ec9ed 100644
> --- a/tools/perf/util/symbol.c
> +++ b/tools/perf/util/symbol.c
> @@ -1561,12 +1561,11 @@ static int bfd2elf_binding(asymbol *symbol)
> int dso__load_bfd_symbols(struct dso *dso, const char *debugfile)
> {
> int err = -1;
> - long symbols_size, symbols_count;
> + long symbols_size, symbols_count, i;
> asection *section;
> asymbol **symbols, *sym;
> struct symbol *symbol;
> bfd *abfd;
> - u_int i;
> u64 start, len;
>
> abfd = bfd_openr(dso->long_name, NULL);
> --
> 2.30.0
>

2021-02-11 23:55:36

by Arnaldo Carvalho de Melo

[permalink] [raw]
Subject: Re: [PATCH] perf: Use (long) for iterator for bfd symbols

Em Thu, Feb 11, 2021 at 06:14:03PM +0900, Namhyung Kim escreveu:
> Hello,
>
> On Tue, Feb 9, 2021 at 11:51 PM Dmitry Safonov <[email protected]> wrote:
> >
> > GCC (GCC) 8.4.0 20200304 fails to build perf with:
> > : util/symbol.c: In function 'dso__load_bfd_symbols':
> > : util/symbol.c:1626:16: error: comparison of integer expressions of different signednes
> > : for (i = 0; i < symbols_count; ++i) {
> > : ^
> > : util/symbol.c:1632:16: error: comparison of integer expressions of different signednes
> > : while (i + 1 < symbols_count &&
> > : ^
> > : util/symbol.c:1637:13: error: comparison of integer expressions of different signednes
> > : if (i + 1 < symbols_count &&
> > : ^
> > : cc1: all warnings being treated as errors
> >
> > It's unlikely that the symtable will be that big, but the fix is
> > oneliner and as perf has CORE_CFLAGS += -Wextra, which makes build to
> > fail together with CORE_CFLAGS += -Werror
> >
> > Fixes: eac9a4342e54 ("perf symbols: Try reading the symbol table with libbfd")
> > Cc: Alexander Shishkin <[email protected]>
> > Cc: Arnaldo Carvalho de Melo <[email protected]>
> > Cc: Ingo Molnar <[email protected]>
> > Cc: Jacek Caban <[email protected]>
> > Cc: Jiri Olsa <[email protected]>
> > Cc: Mark Rutland <[email protected]>
> > Cc: Namhyung Kim <[email protected]>
> > Cc: Peter Zijlstra <[email protected]>
> > Cc: Remi Bernon <[email protected]>
> > Signed-off-by: Dmitry Safonov <[email protected]>
>
> Acked-by: Namhyung Kim <[email protected]>

Thanks, applied.

- Arnaldo


> Thanks,
> Namhyung
>
>
> > ---
> > tools/perf/util/symbol.c | 3 +--
> > 1 file changed, 1 insertion(+), 2 deletions(-)
> >
> > diff --git a/tools/perf/util/symbol.c b/tools/perf/util/symbol.c
> > index 64a039cbba1b..1645fb4ec9ed 100644
> > --- a/tools/perf/util/symbol.c
> > +++ b/tools/perf/util/symbol.c
> > @@ -1561,12 +1561,11 @@ static int bfd2elf_binding(asymbol *symbol)
> > int dso__load_bfd_symbols(struct dso *dso, const char *debugfile)
> > {
> > int err = -1;
> > - long symbols_size, symbols_count;
> > + long symbols_size, symbols_count, i;
> > asection *section;
> > asymbol **symbols, *sym;
> > struct symbol *symbol;
> > bfd *abfd;
> > - u_int i;
> > u64 start, len;
> >
> > abfd = bfd_openr(dso->long_name, NULL);
> > --
> > 2.30.0
> >

--

- Arnaldo