Is --as-needed the default these days?

2024-03-24 Thread Yuri Kanivetsky via Gcc
Hi,

It looks like somewhere between gcc-5.3.0 and gcc-6.2.1 --as-needed
became the default:

https://gist.github.com/x-yuri/1b4c19891be50b2b8801689de1487009

In other words it looks like on Alpine Linux 3.4 -lintl always adds
libintl, on >= 3.5 only if some of its symbols are really needed.

Can you possibly give a link to the commit or a changelog entry?

Regards,
Yuri


Re: Is --as-needed the default these days?

2024-03-24 Thread Yuri Kanivetsky via Gcc
> That's a linker option, and the linker is not part of GCC. Any change in 
> linker behaviour is not because of a change in GCC.

Have you noticed what gcc does?

3.4: /usr/libexec/gcc/x86_64-alpine-linux-musl/5.3.0/collect2 ... -lintl
3.5: /usr/libexec/gcc/x86_64-alpine-linux-musl/6.2.1/collect2 ...
--as-needed ... -lintl

collect2 is supposedly part of GCC. And what passes --as-needed is
supposedly gcc.

I was told on IRC that generally --as-needed is not the default. For
the linker I guess. Although I wasn't able to confirm it. The option
is supposedly defined here:

https://sourceware.org/git/?p=binutils-gdb.git;a=blob;f=ld/lexsup.c;h=dad3b6059edfe1fe31f46c454fdc90d55b0aed5b;hb=ec6f962151998434f9cc743386f2a49a1ce1a0f6#l295

But I don't see the default value, and where it's used.

And also it looks like gcc started to pass --as-needed to the linker
since 5.x/6.x.

Am I missing something?

> The GNU linker can be configured to default to --as-needed or not, and 
> different distros use different defaults.

Can you tell me briefly how it's configured? Is there a config?

Regards,
Yuri


Re: Is --as-needed the default these days?

2024-03-24 Thread Yuri Kanivetsky via Gcc
> Upstream GCC does (still) not default to adding `--as-needed` to the
> command line (except around libgcc). Some distros add patches which
> add `--as-needed` by default though. It looks like alpine is one of
> those distros. Maybe you should ask them instead of asking us. It
> looks like they made the change between their 3.4 and 3.5 release.

I believe I've found the change:

https://git.alpinelinux.org/aports/commit/?id=5b7befa1b989315a57f4fb49b8381ce06ded96c9

As we saw above on 3.4 (gcc-5.3.0) it adds libintl, on 3.5 (gcc-6.2.1)
it doesn't.

This commit changes pkgver from 5.3.0 to 6.1.0 and seems to make gcc
add --as-needed, can you confirm?

> Thanks,
> Andrew Pinski
>
> >
> > 3.4: /usr/libexec/gcc/x86_64-alpine-linux-musl/5.3.0/collect2 ... -lintl
> > 3.5: /usr/libexec/gcc/x86_64-alpine-linux-musl/6.2.1/collect2 ...
> > --as-needed ... -lintl
> >
> > collect2 is supposedly part of GCC. And what passes --as-needed is
> > supposedly gcc.
> >
> > I was told on IRC that generally --as-needed is not the default. For
> > the linker I guess. Although I wasn't able to confirm it. The option
> > is supposedly defined here:
> >
> > https://sourceware.org/git/?p=binutils-gdb.git;a=blob;f=ld/lexsup.c;h=dad3b6059edfe1fe31f46c454fdc90d55b0aed5b;hb=ec6f962151998434f9cc743386f2a49a1ce1a0f6#l295
> >
> > But I don't see the default value, and where it's used.
> >
> > And also it looks like gcc started to pass --as-needed to the linker
> > since 5.x/6.x.
> >
> > Am I missing something?
> >
> > > The GNU linker can be configured to default to --as-needed or not, and 
> > > different distros use different defaults.
> >
> > Can you tell me briefly how it's configured? Is there a config?
> >
> > Regards,
> > Yuri