Properly check if .init_array can be used with .ctors on targets.
2011-06-18 H.J. Lu <hongjiu.lu@intel.com> PR other/49325 * acinclude.m4 (gcc_AC_INITFINI_ARRAY): Properly check if .init_array can be used with .ctors on targets. * configure: Regenerated. From-SVN: r175181
This commit is contained in:
parent
6e6224c1d0
commit
0c58726088
3 changed files with 217 additions and 5 deletions
|
@ -1,3 +1,10 @@
|
|||
2011-06-18 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
PR other/49325
|
||||
* acinclude.m4 (gcc_AC_INITFINI_ARRAY): Properly check if
|
||||
.init_array can be used with .ctors on targets.
|
||||
* configure: Regenerated.
|
||||
|
||||
2011-06-18 Eric Botcazou <ebotcazou@adacore.com>
|
||||
|
||||
* tree-sra.c (type_internals_preclude_sra_p) <ARRAY_TYPE>: Return true
|
||||
|
|
108
gcc/acinclude.m4
108
gcc/acinclude.m4
|
@ -375,13 +375,115 @@ AC_DEFUN([gcc_AC_INITFINI_ARRAY],
|
|||
[], [
|
||||
AC_CACHE_CHECK(for .preinit_array/.init_array/.fini_array support,
|
||||
gcc_cv_initfini_array, [dnl
|
||||
AC_RUN_IFELSE([AC_LANG_SOURCE([
|
||||
if test "x${build}" = "x${target}" && test "x${build}" = "x${host}"; then
|
||||
AC_RUN_IFELSE([AC_LANG_SOURCE([
|
||||
#ifdef __ia64__
|
||||
/* We turn on .preinit_array/.init_array/.fini_array support for ia64
|
||||
if it can be used. */
|
||||
static int x = -1;
|
||||
int main (void) { return x; }
|
||||
int foo (void) { x = 0; }
|
||||
int (*fp) (void) __attribute__ ((section (".init_array"))) = foo;])],
|
||||
int (*fp) (void) __attribute__ ((section (".init_array"))) = foo;
|
||||
#else
|
||||
extern void abort ();
|
||||
static int count;
|
||||
|
||||
static void
|
||||
init1005 ()
|
||||
{
|
||||
if (count != 0)
|
||||
abort ();
|
||||
count = 1005;
|
||||
}
|
||||
void (*const init_array1005[]) ()
|
||||
__attribute__ ((section (".init_array.01005"), aligned (sizeof (void *))))
|
||||
= { init1005 };
|
||||
static void
|
||||
fini1005 ()
|
||||
{
|
||||
if (count != 1005)
|
||||
abort ();
|
||||
}
|
||||
void (*const fini_array1005[]) ()
|
||||
__attribute__ ((section (".fini_array.01005"), aligned (sizeof (void *))))
|
||||
= { fini1005 };
|
||||
|
||||
static void
|
||||
ctor1007 ()
|
||||
{
|
||||
if (count != 1005)
|
||||
abort ();
|
||||
count = 1007;
|
||||
}
|
||||
void (*const ctors1007[]) ()
|
||||
__attribute__ ((section (".ctors.64528"), aligned (sizeof (void *))))
|
||||
= { ctor1007 };
|
||||
static void
|
||||
dtor1007 ()
|
||||
{
|
||||
if (count != 1007)
|
||||
abort ();
|
||||
count = 1005;
|
||||
}
|
||||
void (*const dtors1007[]) ()
|
||||
__attribute__ ((section (".dtors.64528"), aligned (sizeof (void *))))
|
||||
= { dtor1007 };
|
||||
|
||||
static void
|
||||
init65530 ()
|
||||
{
|
||||
if (count != 1007)
|
||||
abort ();
|
||||
count = 65530;
|
||||
}
|
||||
void (*const init_array65530[]) ()
|
||||
__attribute__ ((section (".init_array.65530"), aligned (sizeof (void *))))
|
||||
= { init65530 };
|
||||
static void
|
||||
fini65530 ()
|
||||
{
|
||||
if (count != 65530)
|
||||
abort ();
|
||||
count = 1007;
|
||||
}
|
||||
void (*const fini_array65530[]) ()
|
||||
__attribute__ ((section (".fini_array.65530"), aligned (sizeof (void *))))
|
||||
= { fini65530 };
|
||||
|
||||
static void
|
||||
ctor65535 ()
|
||||
{
|
||||
if (count != 65530)
|
||||
abort ();
|
||||
count = 65535;
|
||||
}
|
||||
void (*const ctors65535[]) ()
|
||||
__attribute__ ((section (".ctors"), aligned (sizeof (void *))))
|
||||
= { ctor65535 };
|
||||
static void
|
||||
dtor65535 ()
|
||||
{
|
||||
if (count != 65535)
|
||||
abort ();
|
||||
count = 65530;
|
||||
}
|
||||
void (*const dtors65535[]) ()
|
||||
__attribute__ ((section (".dtors"), aligned (sizeof (void *))))
|
||||
= { dtor65535 };
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
])],
|
||||
[gcc_cv_initfini_array=yes], [gcc_cv_initfini_array=no],
|
||||
[gcc_cv_initfini_array=no])])
|
||||
[gcc_cv_initfini_array=no])
|
||||
else
|
||||
AC_MSG_CHECKING(cross compile... guessing)
|
||||
gcc_cv_initfini_array=no
|
||||
fi])
|
||||
enable_initfini_array=$gcc_cv_initfini_array
|
||||
])
|
||||
if test $enable_initfini_array = yes; then
|
||||
|
|
107
gcc/configure
vendored
107
gcc/configure
vendored
|
@ -10459,16 +10459,114 @@ $as_echo_n "checking for .preinit_array/.init_array/.fini_array support... " >&6
|
|||
if test "${gcc_cv_initfini_array+set}" = set; then :
|
||||
$as_echo_n "(cached) " >&6
|
||||
else
|
||||
if test "x${build}" = "x${target}" && test "x${build}" = "x${host}"; then
|
||||
if test "$cross_compiling" = yes; then :
|
||||
gcc_cv_initfini_array=no
|
||||
else
|
||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||
/* end confdefs.h. */
|
||||
|
||||
#ifdef __ia64__
|
||||
/* We turn on .preinit_array/.init_array/.fini_array support for ia64
|
||||
if it can be used. */
|
||||
static int x = -1;
|
||||
int main (void) { return x; }
|
||||
int foo (void) { x = 0; }
|
||||
int (*fp) (void) __attribute__ ((section (".init_array"))) = foo;
|
||||
#else
|
||||
extern void abort ();
|
||||
static int count;
|
||||
|
||||
static void
|
||||
init1005 ()
|
||||
{
|
||||
if (count != 0)
|
||||
abort ();
|
||||
count = 1005;
|
||||
}
|
||||
void (*const init_array1005) ()
|
||||
__attribute__ ((section (".init_array.01005"), aligned (sizeof (void *))))
|
||||
= { init1005 };
|
||||
static void
|
||||
fini1005 ()
|
||||
{
|
||||
if (count != 1005)
|
||||
abort ();
|
||||
}
|
||||
void (*const fini_array1005) ()
|
||||
__attribute__ ((section (".fini_array.01005"), aligned (sizeof (void *))))
|
||||
= { fini1005 };
|
||||
|
||||
static void
|
||||
ctor1007 ()
|
||||
{
|
||||
if (count != 1005)
|
||||
abort ();
|
||||
count = 1007;
|
||||
}
|
||||
void (*const ctors1007) ()
|
||||
__attribute__ ((section (".ctors.64528"), aligned (sizeof (void *))))
|
||||
= { ctor1007 };
|
||||
static void
|
||||
dtor1007 ()
|
||||
{
|
||||
if (count != 1007)
|
||||
abort ();
|
||||
count = 1005;
|
||||
}
|
||||
void (*const dtors1007) ()
|
||||
__attribute__ ((section (".dtors.64528"), aligned (sizeof (void *))))
|
||||
= { dtor1007 };
|
||||
|
||||
static void
|
||||
init65530 ()
|
||||
{
|
||||
if (count != 1007)
|
||||
abort ();
|
||||
count = 65530;
|
||||
}
|
||||
void (*const init_array65530) ()
|
||||
__attribute__ ((section (".init_array.65530"), aligned (sizeof (void *))))
|
||||
= { init65530 };
|
||||
static void
|
||||
fini65530 ()
|
||||
{
|
||||
if (count != 65530)
|
||||
abort ();
|
||||
count = 1007;
|
||||
}
|
||||
void (*const fini_array65530) ()
|
||||
__attribute__ ((section (".fini_array.65530"), aligned (sizeof (void *))))
|
||||
= { fini65530 };
|
||||
|
||||
static void
|
||||
ctor65535 ()
|
||||
{
|
||||
if (count != 65530)
|
||||
abort ();
|
||||
count = 65535;
|
||||
}
|
||||
void (*const ctors65535) ()
|
||||
__attribute__ ((section (".ctors"), aligned (sizeof (void *))))
|
||||
= { ctor65535 };
|
||||
static void
|
||||
dtor65535 ()
|
||||
{
|
||||
if (count != 65535)
|
||||
abort ();
|
||||
count = 65530;
|
||||
}
|
||||
void (*const dtors65535) ()
|
||||
__attribute__ ((section (".dtors"), aligned (sizeof (void *))))
|
||||
= { dtor65535 };
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
_ACEOF
|
||||
if ac_fn_c_try_run "$LINENO"; then :
|
||||
gcc_cv_initfini_array=yes
|
||||
|
@ -10479,6 +10577,11 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
|
|||
conftest.$ac_objext conftest.beam conftest.$ac_ext
|
||||
fi
|
||||
|
||||
else
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking cross compile... guessing" >&5
|
||||
$as_echo_n "checking cross compile... guessing... " >&6; }
|
||||
gcc_cv_initfini_array=no
|
||||
fi
|
||||
fi
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_initfini_array" >&5
|
||||
$as_echo "$gcc_cv_initfini_array" >&6; }
|
||||
|
@ -17520,7 +17623,7 @@ else
|
|||
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
|
||||
lt_status=$lt_dlunknown
|
||||
cat > conftest.$ac_ext <<_LT_EOF
|
||||
#line 17523 "configure"
|
||||
#line 17626 "configure"
|
||||
#include "confdefs.h"
|
||||
|
||||
#if HAVE_DLFCN_H
|
||||
|
@ -17626,7 +17729,7 @@ else
|
|||
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
|
||||
lt_status=$lt_dlunknown
|
||||
cat > conftest.$ac_ext <<_LT_EOF
|
||||
#line 17629 "configure"
|
||||
#line 17732 "configure"
|
||||
#include "confdefs.h"
|
||||
|
||||
#if HAVE_DLFCN_H
|
||||
|
|
Loading…
Add table
Reference in a new issue