# 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 @@ -58,7 +58,7 @@ do { \ #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 @@ -86,7 +86,7 @@ extern const char *host_detect_local_cpu #define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2" #undef LINK_SPEC -#define LINK_SPEC "-m elf32_sparc --hash-style=gnu %{shared:-shared} \ +#define LINK_SPEC "-m elf32_sparc --hash-style=gnu --as-needed %{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 @@ -65,7 +65,7 @@ along with GCC; see the file COPYING3. #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 @@ -396,11 +396,11 @@ extern int dot_symbols; " -m elf64ppc") #endif -#define LINK_OS_LINUX_SPEC32 LINK_OS_LINUX_EMUL32 " --hash-style=gnu %{!shared: %{!static: \ +#define LINK_OS_LINUX_SPEC32 LINK_OS_LINUX_EMUL32 " --hash-style=gnu --as-needed %{!shared: %{!static: \ %{rdynamic:-export-dynamic} \ -dynamic-linker " GNU_USER_DYNAMIC_LINKER32 "}}" -#define LINK_OS_LINUX_SPEC64 LINK_OS_LINUX_EMUL64 " --hash-style=gnu %{!shared: %{!static: \ +#define LINK_OS_LINUX_SPEC64 LINK_OS_LINUX_EMUL64 " --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 @@ -774,7 +774,7 @@ ENDIAN_SELECT(" -mbig", " -mlittle", DEF #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 @@ -57,6 +57,7 @@ see the files COPYING3 and COPYING.RUNTI %{" 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 @@ -74,7 +74,7 @@ along with GCC; see the file COPYING3. { "link_emulation", GNU_USER_LINK_EMULATION },\ { "dynamic_linker", GNU_USER_DYNAMIC_LINKER } -#define GNU_USER_TARGET_LINK_SPEC "-m %(link_emulation) --hash-style=gnu %{shared:-shared} \ +#define GNU_USER_TARGET_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 @@ -37,7 +37,7 @@ along with GCC; see the file COPYING3. #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 @@ -73,6 +73,7 @@ -dynamic-linker " GNU_USER_DYNAMIC_LINKER "} \ -X \ --hash-style=gnu \ + --as-needed \ %{mbig-endian:-EB} %{mlittle-endian:-EL}" \ SUBTARGET_EXTRA_LINK_SPEC Index: b/src/gcc/config/mips/gnu-user.h =================================================================== --- a/src/gcc/config/mips/gnu-user.h +++ b/src/gcc/config/mips/gnu-user.h @@ -55,6 +55,7 @@ along with GCC; see the file COPYING3. #undef GNU_USER_TARGET_LINK_SPEC #define GNU_USER_TARGET_LINK_SPEC "\ %{G*} %{EB} %{EL} %{mips*} %{shared} \ + -as-needed \ %{!shared: \ %{!static: \ %{rdynamic:-export-dynamic} \ Index: b/src/libjava/Makefile.am =================================================================== --- a/src/libjava/Makefile.am +++ b/src/libjava/Makefile.am @@ -628,7 +628,7 @@ libgcj_bc.la: $(libgcj_bc_la_OBJECTS) $( rm .libs/libgcj_bc.so; \ mv .libs/libgcj_bc.so.1.0.0 .libs/libgcj_bc.so; \ $(libgcj_bc_dummy_LINK) -xc /dev/null -Wl,-soname,libgcj_bc.so.1 \ - -o .libs/libgcj_bc.so.1.0.0 -lgcj || exit; \ + -o .libs/libgcj_bc.so.1.0.0 -Wl,--no-as-needed -lgcj || exit; \ rm .libs/libgcj_bc.so.1; \ $(LN_S) libgcj_bc.so.1.0.0 .libs/libgcj_bc.so.1 Index: b/src/libjava/Makefile.in =================================================================== --- a/src/libjava/Makefile.in +++ b/src/libjava/Makefile.in @@ -10600,7 +10600,7 @@ libgcj_bc.la: $(libgcj_bc_la_OBJECTS) $( rm .libs/libgcj_bc.so; \ mv .libs/libgcj_bc.so.1.0.0 .libs/libgcj_bc.so; \ $(libgcj_bc_dummy_LINK) -xc /dev/null -Wl,-soname,libgcj_bc.so.1 \ - -o .libs/libgcj_bc.so.1.0.0 -lgcj || exit; \ + -o .libs/libgcj_bc.so.1.0.0 -Wl,--no-as-needed -lgcj || exit; \ rm .libs/libgcj_bc.so.1; \ $(LN_S) libgcj_bc.so.1.0.0 .libs/libgcj_bc.so.1