# DP: On linux targets pass --as-needed by default to the linker. Index: b/src/gcc/config/aarch64/aarch64-linux.h =================================================================== --- a/src/gcc/config/aarch64/aarch64-linux.h +++ b/src/gcc/config/aarch64/aarch64-linux.h @@ -33,6 +33,7 @@ #define LINUX_TARGET_LINK_SPEC "%{h*} \ --hash-style=gnu \ + --as-needed \ %{static:-Bstatic} \ %{shared:-shared} \ %{symbolic:-Bsymbolic} \ Index: b/src/gcc/config/ia64/linux.h =================================================================== --- a/src/gcc/config/ia64/linux.h +++ b/src/gcc/config/ia64/linux.h @@ -59,7 +59,7 @@ #define GLIBC_DYNAMIC_LINKER "/lib/ld-linux-ia64.so.2" #undef LINK_SPEC -#define LINK_SPEC " --hash-style=gnu \ +#define LINK_SPEC " --hash-style=gnu --as-needed \ %{shared:-shared} \ %{!shared: \ %{!static: \ Index: b/src/gcc/config/sparc/linux.h =================================================================== --- a/src/gcc/config/sparc/linux.h +++ b/src/gcc/config/sparc/linux.h @@ -87,7 +87,7 @@ #define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2" #undef LINK_SPEC -#define LINK_SPEC "-m elf32_sparc --hash-style=gnu -Y P,/usr/lib %{shared:-shared} \ +#define LINK_SPEC "-m elf32_sparc --hash-style=gnu --as-needed -Y P,/usr/lib %{shared:-shared} \ %{!mno-relax:%{!r:-relax}} \ %{!shared: \ %{!static: \ Index: b/src/gcc/config/s390/linux.h =================================================================== --- a/src/gcc/config/s390/linux.h +++ b/src/gcc/config/s390/linux.h @@ -66,7 +66,7 @@ #undef LINK_SPEC #define LINK_SPEC \ - "%{m31:-m elf_s390}%{m64:-m elf64_s390} --hash-style=gnu \ + "%{m31:-m elf_s390}%{m64:-m elf64_s390} --hash-style=gnu --as-needed \ %{shared:-shared} \ %{!shared: \ %{static:-static} \ Index: b/src/gcc/config/rs6000/linux64.h =================================================================== --- a/src/gcc/config/rs6000/linux64.h +++ b/src/gcc/config/rs6000/linux64.h @@ -375,11 +375,11 @@ CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER64, UCLIBC_DYNAMIC_LINKER64) -#define LINK_OS_LINUX_SPEC32 "-m elf32ppclinux --hash-style=gnu %{!shared: %{!static: \ +#define LINK_OS_LINUX_SPEC32 "-m elf32ppclinux --hash-style=gnu --as-needed %{!shared: %{!static: \ %{rdynamic:-export-dynamic} \ -dynamic-linker " GNU_USER_DYNAMIC_LINKER32 "}}" -#define LINK_OS_LINUX_SPEC64 "-m elf64ppc --hash-style=gnu %{!shared: %{!static: \ +#define LINK_OS_LINUX_SPEC64 "-m elf64ppc --hash-style=gnu --as-needed %{!shared: %{!static: \ %{rdynamic:-export-dynamic} \ -dynamic-linker " GNU_USER_DYNAMIC_LINKER64 "}}" Index: b/src/gcc/config/rs6000/sysv4.h =================================================================== --- a/src/gcc/config/rs6000/sysv4.h +++ b/src/gcc/config/rs6000/sysv4.h @@ -814,7 +814,7 @@ #define GNU_USER_DYNAMIC_LINKER \ CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER, UCLIBC_DYNAMIC_LINKER) -#define LINK_OS_LINUX_SPEC "-m elf32ppclinux --hash-style=gnu %{!shared: %{!static: \ +#define LINK_OS_LINUX_SPEC "-m elf32ppclinux --hash-style=gnu --as-needed %{!shared: %{!static: \ %{rdynamic:-export-dynamic} \ -dynamic-linker " GNU_USER_DYNAMIC_LINKER "}}" Index: b/src/gcc/config/i386/gnu-user64.h =================================================================== --- a/src/gcc/config/i386/gnu-user64.h +++ b/src/gcc/config/i386/gnu-user64.h @@ -82,6 +82,7 @@ %{" SPEC_32 ":-m " GNU_USER_LINK_EMULATION32 "} \ %{" SPEC_X32 ":-m " GNU_USER_LINK_EMULATIONX32 "} \ --hash-style=gnu \ + --as-needed \ %{shared:-shared} \ %{!shared: \ %{!static: \ Index: b/src/gcc/config/i386/gnu-user.h =================================================================== --- a/src/gcc/config/i386/gnu-user.h +++ b/src/gcc/config/i386/gnu-user.h @@ -98,7 +98,7 @@ { "dynamic_linker", GNU_USER_DYNAMIC_LINKER } #undef LINK_SPEC -#define LINK_SPEC "-m %(link_emulation) --hash-style=gnu %{shared:-shared} \ +#define LINK_SPEC "-m %(link_emulation) --hash-style=gnu --as-needed %{shared:-shared} \ %{!shared: \ %{!static: \ %{rdynamic:-export-dynamic} \ Index: b/src/gcc/config/alpha/linux-elf.h =================================================================== --- a/src/gcc/config/alpha/linux-elf.h +++ b/src/gcc/config/alpha/linux-elf.h @@ -38,7 +38,7 @@ #define ELF_DYNAMIC_LINKER GNU_USER_DYNAMIC_LINKER -#define LINK_SPEC "-m elf64alpha --hash-style=gnu %{G*} %{relax:-relax} \ +#define LINK_SPEC "-m elf64alpha --hash-style=gnu --as-needed %{G*} %{relax:-relax} \ %{O*:-O3} %{!O*:-O1} \ %{shared:-shared} \ %{!shared: \ Index: b/src/gcc/config/arm/linux-elf.h =================================================================== --- a/src/gcc/config/arm/linux-elf.h +++ b/src/gcc/config/arm/linux-elf.h @@ -69,6 +69,7 @@ -dynamic-linker " GNU_USER_DYNAMIC_LINKER " \ -X \ --hash-style=gnu \ + --as-needed \ %{mbig-endian:-EB} %{mlittle-endian:-EL}" \ SUBTARGET_EXTRA_LINK_SPEC