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.

Reply via email to