http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50237
--- Comment #6 from Eric Botcazou <ebotcazou at gcc dot gnu.org> 2011-08-30 15:00:54 UTC --- > How does stage 2 binutils fail the test? It doesn't. Let me explain: - during stage1, the check is made with the host compiler, i.e. the base compiler, so the old binutils are used and the check fails, that's why we have /* #undef HAVE_INITFINI_ARRAY */ in stage1-gcc/auto-host.h. This means that the stage1 compiler doesn't have the support. Since this compiler is used to compile stage2 libcpp/lex.o, the file gets the .ctors section. - during stage2, the check is made with the host cmpiler, i.e. the stage 1 compiler, so the new binutils (--with-as=, --with-ld) are used and the check succeeds, that's why we have #define HAVE_INITFINI_ARRAY 1 in stage2-gcc/auto-host.h. This means that the stage2 compiler has the support. Since this compiler is used to compile stage3 libcpp/lex.o, the file gets the .init_array section. The fix is to turn the check into a target check, i.e. test the target binutils. See configure.ac:1884 and below.