Re: Linux 4.19 and GCC 9

Arnaldo Carvalho de Melo
2019-06-10T15:14:15Z

Em Mon, Jun 10, 2019 at 12:21:51AM -0700, Ivan Babrou escreveu:
> Looks like 4.19.49 received some patches for GCC 9+, but unfortunately
> perf still doesn't want to compile:
>
> [07:15:32]In file included from /usr/include/string.h:635,
> [07:15:32] from util/debug.h:7,
> [07:15:32] from builtin-help.c:15:
> [07:15:32]In function 'strncpy',
> [07:15:32] inlined from 'add_man_viewer' at builtin-help.c:192:2,
> [07:15:32] inlined from 'perf_help_config' at builtin-help.c:284:3:
> [07:15:32]/usr/include/x86_64-linux-gnu/bits/string3.h:126:10: error:
> '__builtin_strncpy' output truncated before terminating nul copying as
> many bytes from a string as its length [-Werror=stringop-truncation]
> [07:15:32] 126 | return __builtin___strncpy_chk (__dest, __src, __len,
> __bos (__dest));
> [07:15:32] | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> [07:15:32]builtin-help.c: In function 'perf_help_config':
> [07:15:32]builtin-help.c:187:15: note: length computed here
> [07:15:32] 187 | size_t len = strlen(name);
> [07:15:32] | ^~~~~~~~~~~~
> [07:15:32]cc1: all warnings being treated as errors

The patch below should've taken care of that, and it has a Fixes: tag,
i.e. the stable scripts should've noticed that, and it was noticed with
gcc 8.2.

- Arnaldo

commit b6313899f4ed2e76b8375cf8069556f5b94fbff0
Author: Arnaldo Carvalho de Melo <acme@redhat.com>
Date: Thu Dec 6 11:20:21 2018 -0300

perf help: Remove needless use of strncpy()

Since we make sure the destination buffer has at least strlen(orig) + 1,
no need to do a strncpy(dest, orig, strlen(orig)), just use strcpy(dest,
orig).

This silences this gcc 8.2 warning on Alpine Linux:

In function 'add_man_viewer',
inlined from 'perf_help_config' at builtin-help.c:284:3:
builtin-help.c:192:2: error: 'strncpy' output truncated before terminating nul copying as many bytes from a string as its length [-Werror=stringop-truncation]
strncpy((*p)->name, name, len);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
builtin-help.c: In function 'perf_help_config':
builtin-help.c:187:15: note: length computed here
size_t len = strlen(name);
^~~~~~~~~~~~

Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Fixes: 078006012401 ("perf_counter tools: add in basic glue from Git")
Link: https://lkml.kernel.org/n/tip-2f69l7drca427ob4km8i7kvo@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

> On Fri, May 17, 2019 at 11:27 AM Arnaldo Carvalho de Melo
> <arnaldo.melo@gmail.com> wrote:
> >
> > On May 17, 2019 2:23:10 PM GMT-03:00, Ivan Babrou <ivan@cloudflare.com> wrote:
> > >On Fri, May 17, 2019 at 8:22 AM Arnaldo Carvalho de Melo
> > ><arnaldo.melo@gmail.com> wrote:
> > >>
> > >> Em Fri, May 17, 2019 at 11:01:45AM +0200, Miguel Ojeda escreveu:
> > >> > On Fri, May 17, 2019 at 10:51 AM Greg KH
> > ><gregkh@linuxfoundation.org> wrote:
> > >> > >
> > >> > > On Fri, May 17, 2019 at 10:35:29AM +0200, Miguel Ojeda wrote:
> > >> > > > On Fri, May 17, 2019 at 9:38 AM Peter Zijlstra
> > ><peterz@infradead.org> wrote:
> > >> > > > >
> > >> > > > > Right; if there is anything you can reproduce on linus.git
> > >I'll happily
> > >> > > > > have a look. If it doesn't reproduce all you have to do is
> > >find the
> > >> > > > > patches that make it work and ask Greg.
> > >> > > >
> > >> > > > Just to clarify: Linus' master is clean of these issues with
> > >GCC 9.1.1.
> > >> > >
> > >> > > Great! Care to find the patches that did that work and send me
> > >the git
> > >> > > commit ids so that I can queue them up? I don't have gcc9 here
> > >yet on
> > >> > > my systems, so I can not test for this.
> > >> >
> > >> > I am unsure about the perf and the objtools parts (Peter/Josh?),
> > >but
> > >>
> > >> I'm not noticing these while building upstream perf with gcc 9.1.1 on
> > ^^^^^^^^^^^^^^^
> >
> > >at
> > >> least fedora:30.
> > >>
> > >> 33 fedora:30 : Ok gcc (GCC) 9.1.1 20190503
> > >(Red Hat 9.1.1-1)
> > >
> > >I've tried to replicate this in fedora:30 docker container and it's
> > >there:
> > >
> > >[root@linuxkit-025000000001 perf]# gcc --version
> > >gcc (GCC) 9.1.1 20190503 (Red Hat 9.1.1-1)
> > >
> > >[root@linuxkit-025000000001 perf]# pwd
> > >/tmp/linux-4.19.44/tools/perf
> > ^^^^^^^^^^^^^^
> >
> > That is not upstream perf, please look for patches from 4.19 to Linus' master Branch for fixes.
> >
> > I'll triple check here in a f30 container just in case meanwhile.
> >
> > Thanks,
> >
> > - Arnaldo
> > >
> > >[root@linuxkit-025000000001 perf]# make -j1
> > >...
> > >trace/beauty/ioctl.c: In function ‘ioctl__scnprintf_kvm_cmd’:
> > >trace/beauty/ioctl.c:85:82: error: array subscript [-2147483648, -1]
> > >is outside array bounds of ‘const char *[0]’ [-Werror=array-bounds]
> > > 85 | if (nr < strarray__kvm_ioctl_cmds.nr_entries &&
> > >strarray__kvm_ioctl_cmds.entries[nr] != NULL)
> > > |
> > >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~
> > >In file included from trace/beauty/ioctl.c:82:
> > >/tmp/linux-4.19.44/tools/perf/trace/beauty/generated/ioctl/kvm_ioctl_array.c:1:20:
> > >note: while referencing ‘kvm_ioctl_cmds’
> > > 1 | static const char *kvm_ioctl_cmds[] = {
> > > | ^~~~~~~~~~~~~~
> > >In file included from /usr/include/string.h:494,
> > > from util/debug.h:7,
> > > from builtin-help.c:15:
> > >In function ‘strncpy’,
> > > inlined from ‘add_man_viewer’ at builtin-help.c:192:2,
> > > inlined from ‘perf_help_config’ at builtin-help.c:284:3:
> > >/usr/include/bits/string_fortified.h:106:10: error:
> > >‘__builtin_strncpy’ output truncated before terminating nul copying as
> > >many bytes from a string as its length [-Werror=stringop-truncation]
> > >106 | return __builtin___strncpy_chk (__dest, __src, __len, __bos
> > >(__dest));
> > >|
> > >^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> > >builtin-help.c: In function ‘perf_help_config’:
> > >builtin-help.c:187:15: note: length computed here
> > > 187 | size_t len = strlen(name);
> > > | ^~~~~~~~~~~~
> > >trace/beauty/ioctl.c: In function ‘ioctl__scnprintf_perf_cmd’:
> > >trace/beauty/ioctl.c:109:84: error: array subscript [-2147483648, -1]
> > >is outside array bounds of ‘const char *[0]’ [-Werror=array-bounds]
> > > 109 | if (nr < strarray__perf_ioctl_cmds.nr_entries &&
> > >strarray__perf_ioctl_cmds.entries[nr] != NULL)
> > > |
> > >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~
> > >In file included from trace/beauty/ioctl.c:106:
> > >/tmp/linux-4.19.44/tools/perf/trace/beauty/generated/ioctl/perf_ioctl_array.c:1:20:
> > >note: while referencing ‘perf_ioctl_cmds’
> > > 1 | static const char *perf_ioctl_cmds[] = {
> > > | ^~~~~~~~~~~~~~~
> > >cc1: all warnings being treated as errors
> > >
> > >> > about the -Wmissing-attributes I cleaned, they were these:
> > >>
> > >> > a6e60d84989f ("include/linux/module.h: copy __init/__exit attrs to
> > >> > init/cleanup_module")
> > >> > c0d9782f5b6d ("Compiler Attributes: add support for __copy (gcc >=
> > >9)")
> > >> > ff98e20ef208 ("lib/crc32.c: mark crc32_le_base/__crc32c_le_base
> > >> > aliases as __pure")
> > >> >
> > >> > Cheers,
> > >> > Miguel
> > >>
> > >> --
> > >>
> > >> - Arnaldo
> >

--

- Arnaldo