aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>2010-04-16 13:45:25 +0000
committerRainer Orth <ro@gcc.gnu.org>2010-04-16 13:45:25 +0000
commit8ccb78f2d06ac9c06f49b8bdf1527bd7ebeadf06 (patch)
treed9a473d88d703aacdf7e3191ba2b717abcb59e6d /gcc
parentbc9c331d4320ff1e3b8258fcaf87f45bf3c4f2bf (diff)
downloadgcc-8ccb78f2d06ac9c06f49b8bdf1527bd7ebeadf06.zip
gcc-8ccb78f2d06ac9c06f49b8bdf1527bd7ebeadf06.tar.gz
gcc-8ccb78f2d06ac9c06f49b8bdf1527bd7ebeadf06.tar.bz2
configure.ac: Check for elf_getshdrstrndx or elf_getshstrndx separately.
toplevel: * configure.ac: Check for elf_getshdrstrndx or elf_getshstrndx separately. * configure: Regenerate. gcc: * configure.ac: Check for elf_getshdrstrndx or elf_getshstrndx flavor. * configure: Regenerate. * config.in: Regenerate. * doc/install.texi (Prerequisites): Document that Solaris 2 libelf works. gcc/lto: * lto-elf.c [!HAVE_ELF_GETSHDRSTRNDX] (elf_getshdrstrndx): New function. From-SVN: r158423
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog9
-rw-r--r--gcc/config.in18
-rwxr-xr-xgcc/configure57
-rw-r--r--gcc/configure.ac16
-rw-r--r--gcc/doc/install.texi2
-rw-r--r--gcc/lto/ChangeLog5
-rw-r--r--gcc/lto/lto-elf.c16
7 files changed, 120 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index d9d4f92..a50a6ac 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,12 @@
+2010-04-16 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ * configure.ac: Check for elf_getshdrstrndx or elf_getshstrndx
+ flavor.
+ * configure: Regenerate.
+ * config.in: Regenerate.
+ * doc/install.texi (Prerequisites): Document that Solaris 2 libelf
+ works.
+
2010-04-16 Richard Guenther <rguenther@suse.de>
* tree.h (struct tree_decl_minimal): Move pt_uid ...
diff --git a/gcc/config.in b/gcc/config.in
index a9e208f..9525625 100644
--- a/gcc/config.in
+++ b/gcc/config.in
@@ -814,6 +814,24 @@
#endif
+/* Define to 1 if you have the `elf_getshdrstrndx' function. */
+#ifndef USED_FOR_TARGET
+#undef HAVE_ELF_GETSHDRSTRNDX
+#endif
+
+
+/* Define to 1 if you have the `elf_getshstrndx' function. */
+#ifndef USED_FOR_TARGET
+#undef HAVE_ELF_GETSHSTRNDX
+#endif
+
+
+/* Define if elf_getshstrndx has gABI conformant return values. */
+#ifndef USED_FOR_TARGET
+#undef HAVE_ELF_GETSHSTRNDX_GABI
+#endif
+
+
/* Define to 1 if you have the <fcntl.h> header file. */
#ifndef USED_FOR_TARGET
#undef HAVE_FCNTL_H
diff --git a/gcc/configure b/gcc/configure
index 2b80019..de9cc72 100755
--- a/gcc/configure
+++ b/gcc/configure
@@ -8426,6 +8426,59 @@ fi
done
+save_CPPFLAGS="$CPPFLAGS"
+save_LIBS="$LIBS"
+LIBS="$LIBS $LIBELFLIBS"
+for ac_func in elf_getshdrstrndx
+do :
+ ac_fn_c_check_func "$LINENO" "elf_getshdrstrndx" "ac_cv_func_elf_getshdrstrndx"
+if test "x$ac_cv_func_elf_getshdrstrndx" = x""yes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_ELF_GETSHDRSTRNDX 1
+_ACEOF
+
+else
+ for ac_func in elf_getshstrndx
+do :
+ ac_fn_c_check_func "$LINENO" "elf_getshstrndx" "ac_cv_func_elf_getshstrndx"
+if test "x$ac_cv_func_elf_getshstrndx" = x""yes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_ELF_GETSHSTRNDX 1
+_ACEOF
+ if test "$cross_compiling" = yes; then :
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error "cannot run test program while cross compiling
+See \`config.log' for more details." "$LINENO" 5; }
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdlib.h>
+#include <libelf.h>
+int main()
+{
+ return elf_getshstrndx (NULL, 0) == 0;
+},
+$as_echo "#define HAVE_ELF_GETSHSTRNDX_GABI 1" >>confdefs.h
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+done
+
+
+fi
+done
+
+LIBS="$save_LIBS"
+CPPFLAGS="$save_CPPFLAGS"
+
if test x$ac_cv_func_mbstowcs = xyes; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbstowcs works" >&5
$as_echo_n "checking whether mbstowcs works... " >&6; }
@@ -17039,7 +17092,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 17042 "configure"
+#line 17095 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -17145,7 +17198,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 17148 "configure"
+#line 17201 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
diff --git a/gcc/configure.ac b/gcc/configure.ac
index 3784338..d256b62 100644
--- a/gcc/configure.ac
+++ b/gcc/configure.ac
@@ -1024,6 +1024,22 @@ AC_CHECK_FUNCS(times clock kill getrlimit setrlimit atoll atoq \
gettimeofday mbstowcs wcswidth mmap mincore setlocale \
gcc_UNLOCKED_FUNCS)
+save_CPPFLAGS="$CPPFLAGS"
+save_LIBS="$LIBS"
+LIBS="$LIBS $LIBELFLIBS"
+AC_CHECK_FUNCS(elf_getshdrstrndx,,
+ [AC_CHECK_FUNCS(elf_getshstrndx,
+ [AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <stdlib.h>
+#include <libelf.h>
+int main()
+{
+ return elf_getshstrndx (NULL, 0) == 0;
+}]]), AC_DEFINE(HAVE_ELF_GETSHSTRNDX_GABI, 1,
+ [Define if elf_getshstrndx has gABI conformant return values.])])])]
+ )
+LIBS="$save_LIBS"
+CPPFLAGS="$save_CPPFLAGS"
+
if test x$ac_cv_func_mbstowcs = xyes; then
AC_CACHE_CHECK(whether mbstowcs works, gcc_cv_func_mbstowcs_works,
[ AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <stdlib.h>
diff --git a/gcc/doc/install.texi b/gcc/doc/install.texi
index b917169..f65b29f 100644
--- a/gcc/doc/install.texi
+++ b/gcc/doc/install.texi
@@ -361,7 +361,7 @@ Necessary to build link-time optimization (LTO) support. It can be
downloaded from @uref{http://www.mr511.de/software/libelf-0.8.12.tar.gz},
though it is commonly available in several systems. The versions in
IRIX 5 and 6 don't work since they lack @file{gelf.h}. The version in
-recent releases of Solaris 11 does work, previous ones don't yet.
+Solaris 2 does work.
The @option{--with-libelf} configure option should be used if libelf is
not installed in your default library search patch.
diff --git a/gcc/lto/ChangeLog b/gcc/lto/ChangeLog
index c92562f..20b89d6 100644
--- a/gcc/lto/ChangeLog
+++ b/gcc/lto/ChangeLog
@@ -1,3 +1,8 @@
+2010-04-16 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ * lto-elf.c [!HAVE_ELF_GETSHDRSTRNDX] (elf_getshdrstrndx): New
+ function.
+
2010-03-09 Eric Botcazou <ebotcazou@adacore.com>
PR bootstrap/43276
diff --git a/gcc/lto/lto-elf.c b/gcc/lto/lto-elf.c
index 59f7150..c777da7 100644
--- a/gcc/lto/lto-elf.c
+++ b/gcc/lto/lto-elf.c
@@ -455,6 +455,22 @@ DEFINE_VALIDATE_EHDR (32)
DEFINE_VALIDATE_EHDR (64)
+#ifndef HAVE_ELF_GETSHDRSTRNDX
+/* elf_getshdrstrndx replacement for systems that lack it, but provide
+ either the gABI conformant or Solaris 2 variant of elf_getshstrndx
+ instead. */
+
+static int
+elf_getshdrstrndx (Elf *elf, size_t *dst)
+{
+#ifdef HAVE_ELF_GETSHSTRNDX_GABI
+ return elf_getshstrndx (elf, dst);
+#else
+ return elf_getshstrndx (elf, dst) ? 0 : -1;
+#endif
+}
+#endif
+
/* Validate's ELF_FILE's executable header and, if cached_file_attrs is
uninitialized, caches the results. Also records the section header string
table's section index. Returns true on success or false on failure. */