On Mon, Jun 07, 2021 at 10:37:42PM +0100, Sergei Trofimovich wrote: > Link failure is reproducible on gcc-11.1.0 target: > > ``` > $ autoreconf -i -f > $ ./configure --enable-maintainer-mode --disable-debuginfod \ > --host=x86_64-pc-linux-gnu \ > CFLAGS=-march=znver3 \ > CXXFLAGS=-march=znver3 \ > LDFLAGS=" " > $ make > > CCLD elflint > ld: elflint.o: in function `check_attributes': > elflint.c:(.text+0xdcff): undefined reference to `buffer_left' > ld: elflint.c:(.text+0xe557): undefined reference to `buffer_left' > ``` > > It happens due to possible external linkage of `buffer_left()`. > > The change forces local linkkage to always use local definition > (either inline or out-of-line). > > Reported-by: Toralf Förster > Bug: https://bugs.gentoo.org/794601 > Signed-off-by: Sergei Trofimovich <sly...@gentoo.org> > Fixes: e95d1fbb ("elflint: Pull left() in file scope") > --- > Change since v1 suggested by Dmitry: > - fixed changelog to spell 'static' correctly :) > - added 'Fixes' annotation > > Did not drop 'inline' to be consistent with other tiny helpers > in the same file. > > src/ChangeLog | 5 +++++ > src/elflint.c | 2 +- > 2 files changed, 6 insertions(+), 1 deletion(-) > > diff --git a/src/ChangeLog b/src/ChangeLog > index 2c7be185..698b3c77 100644 > --- a/src/ChangeLog > +++ b/src/ChangeLog > @@ -1,3 +1,8 @@ > +2021-06-06 Sergei Trofimovich <sly...@gentoo.org> > + > + * elflint.c (buffer_left): Mark as 'static' to avoid external linkage > + failure. > + > 2021-05-12 Dmitry V. Levin <l...@altlinux.org> > > * elfcompress.c (process_file): Return 1 instead of -1 in case of an > diff --git a/src/elflint.c b/src/elflint.c > index 85cc7833..35b40500 100644 > --- a/src/elflint.c > +++ b/src/elflint.c > @@ -3434,7 +3434,7 @@ buffer_pos (Elf_Data *data, const unsigned char *p) > return p - (const unsigned char *) data->d_buf; > } > > -inline size_t > +static inline size_t > buffer_left (Elf_Data *data, const unsigned char *p) > { > return (const unsigned char *) data->d_buf + data->d_size - p;
Applied, thanks. -- ldv