This is the mail archive of the
newlib@sourceware.org
mailing list for the newlib project.
HAVE_INITFINI_ARRAY problem
- From: Dave Murphy <wintermute2k4 at ntlworld dot com>
- To: newlib at sourceware dot org
- Date: Wed, 14 Jun 2006 04:20:57 +0100
- Subject: HAVE_INITFINI_ARRAY problem
- References: <200606140033.00200.tmohr@s.netic.de>
Hi,
I recently encountered a problem building an arm-eabi newlib toolchain
where __libc_init_array was missing from the libraries. The issue was
eventually tracked to the following section of newlib/configure. What's
happening is that it's checking for readelf which fails on hosts which
do not have this program installed. It should really be checking for the
target readelf but I'm not sure how to modify the configure script to
look for the correct file. Is the check for readelf actually required or
is the compilation test for a .init_array section sufficient?
Can I remove the readelf check? If not how would I obtain the name of
the target readelf at this point?
Dave
echo $ac_n "checking for .preinit_array/.init_array/.fini_array
support""... $ac_c" 1>&6
echo "configure:3430: checking for
.preinit_array/.init_array/.fini_array support" >&5
if eval "test \"`echo '$''{'libc_cv_initfinit_array'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.c <<EOF
int _start (void) { return 0; }
int __start (void) { return 0; }
int foo (void) { return 1; }
int (*fp) (void) __attribute__ ((section (".init_array"))) = foo;
EOF
if { ac_try='${CC} $CFLAGS $CPPFLAGS $LDFLAGS -o conftest conftest.c
-static -nostartfiles -nostdlib 1>&AS_MESSAGE_LOG_FD'; {
(eval echo configure:3441: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }
then
if readelf -S conftest | grep -e INIT_ARRAY > /dev/null; then
libc_cv_initfinit_array=yes
else
libc_cv_initfinit_array=no
fi
else
libc_cv_initfinit_array=no
fi
rm -f conftest*
fi
echo "$ac_t""$libc_cv_initfinit_array" 1>&6
if test $libc_cv_initfinit_array = yes; then
cat >> confdefs.h <<EOF
#define HAVE_INITFINI_ARRAY 1
EOF
fi