You can't build glibc with -flto. glibc master is currently unbuildable with -flto because of: http://sourceware.org/bugzilla/show_bug.cgi?id=15648 You should always see: checking for .preinit_array/.init_array/.fini_array support... no configure: error: Need linker with .init_array/.fini_array support. This is because -flto throws out the .init_array support. A potential fix is: diff --git a/configure.in b/configure.in index 8b11081..415e777 100644 --- a/configure.in +++ b/configure.in @@ -1383,7 +1383,7 @@ AC_CACHE_CHECK(for .preinit_array/.init_array/.fini_array support, libc_cv_initfini_array, [dnl LIBC_TRY_LINK_STATIC([ int foo (void) { return 1; } -int (*fp) (void) __attribute__ ((section (".init_array"))) = foo; +int (*fp) (void) __attribute__ ((section (".init_array"), used)) = foo; ], [if $READELF -S conftest | fgrep INIT_ARRAY > /dev/null; then libc_cv_initfini_array=yes ~~~ However, given that nobody has built with -flto it's going to require considerable work to make it happen. This is an enhancement.