Commit ca6d1176 by Rainer Orth Committed by Rainer Orth

configure.ac: Check for Sun symbol versioning.

	* configure.ac: Check for Sun symbol versioning.
	Check for memmove.
	* configure: Regenerate.
	* config.h.in: Regenerate.

	* Makefile.am [LIBSSP_USE_SYMVER]: Protect version_arg,
	version_dep with LIBSSP_USE_SYMVER_GNU.
	[LIBSSP_USE_SYMVER_SUN]: Handle Sun symbol versioning.
	* Makefile.in: Regenerate.

	* ssp.map: Reformat.

	* memmove-chk.c: Change guard to HAVE_MEMMOVE.

From-SVN: r161699
parent baf7c318
2010-07-02 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
* configure.ac: Check for Sun symbol versioning.
Check for memmove.
* configure: Regenerate.
* config.h.in: Regenerate.
* Makefile.am [LIBSSP_USE_SYMVER]: Protect version_arg,
version_dep with LIBSSP_USE_SYMVER_GNU.
[LIBSSP_USE_SYMVER_SUN]: Handle Sun symbol versioning.
* Makefile.in: Regenerate.
* ssp.map: Reformat.
* memmove-chk.c: Change guard to HAVE_MEMMOVE.
2010-05-04 Ralf Wildenhues <Ralf.Wildenhues@gmx.de> 2010-05-04 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
PR other/43620 PR other/43620
......
## Makefile for the toplevel directory of the libssp library. ## Makefile for the toplevel directory of the libssp library.
## ##
## Copyright (C) 2005 ## Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010
## Free Software Foundation, Inc. ## Free Software Foundation, Inc.
## ##
...@@ -12,8 +12,23 @@ MAINT_CHARSET = latin1 ...@@ -12,8 +12,23 @@ MAINT_CHARSET = latin1
gcc_version := $(shell cat $(top_srcdir)/../gcc/BASE-VER) gcc_version := $(shell cat $(top_srcdir)/../gcc/BASE-VER)
if LIBSSP_USE_SYMVER if LIBSSP_USE_SYMVER
if LIBSSP_USE_SYMVER_GNU
version_arg = -Wl,--version-script=$(srcdir)/ssp.map version_arg = -Wl,--version-script=$(srcdir)/ssp.map
version_dep = $(srcdir)/ssp.map version_dep = $(srcdir)/ssp.map
endif
if LIBSSP_USE_SYMVER_SUN
version_arg = -Wl,-M,ssp.map-sun
version_dep = ssp.map-sun
ssp.map-sun : $(srcdir)/ssp.map \
$(top_srcdir)/../contrib/make_sunver.pl \
$(libssp_la_OBJECTS) $(libssp_la_LIBADD)
perl $(top_srcdir)/../contrib/make_sunver.pl \
$(srcdir)/ssp.map \
$(libssp_la_OBJECTS:%.lo=.libs/%.o) \
`echo $(libssp_la_LIBADD) | \
sed 's,/\([^/.]*\)\.la,/.libs/\1.a,g'` \
> $@ || (rm -f $@ ; exit 1)
endif
else else
version_arg = version_arg =
version_dep = version_dep =
......
...@@ -250,9 +250,11 @@ MAINT_CHARSET = latin1 ...@@ -250,9 +250,11 @@ MAINT_CHARSET = latin1
# May be used by various substitution variables. # May be used by various substitution variables.
gcc_version := $(shell cat $(top_srcdir)/../gcc/BASE-VER) gcc_version := $(shell cat $(top_srcdir)/../gcc/BASE-VER)
@LIBSSP_USE_SYMVER_FALSE@version_arg = @LIBSSP_USE_SYMVER_FALSE@version_arg =
@LIBSSP_USE_SYMVER_TRUE@version_arg = -Wl,--version-script=$(srcdir)/ssp.map @LIBSSP_USE_SYMVER_GNU_TRUE@@LIBSSP_USE_SYMVER_TRUE@version_arg = -Wl,--version-script=$(srcdir)/ssp.map
@LIBSSP_USE_SYMVER_SUN_TRUE@@LIBSSP_USE_SYMVER_TRUE@version_arg = -Wl,-M,ssp.map-sun
@LIBSSP_USE_SYMVER_FALSE@version_dep = @LIBSSP_USE_SYMVER_FALSE@version_dep =
@LIBSSP_USE_SYMVER_TRUE@version_dep = $(srcdir)/ssp.map @LIBSSP_USE_SYMVER_GNU_TRUE@@LIBSSP_USE_SYMVER_TRUE@version_dep = $(srcdir)/ssp.map
@LIBSSP_USE_SYMVER_SUN_TRUE@@LIBSSP_USE_SYMVER_TRUE@version_dep = ssp.map-sun
AM_CFLAGS = -Wall AM_CFLAGS = -Wall
toolexeclib_LTLIBRARIES = libssp.la libssp_nonshared.la toolexeclib_LTLIBRARIES = libssp.la libssp_nonshared.la
libsubincludedir = $(libdir)/gcc/$(target_noncanonical)/$(gcc_version)/include libsubincludedir = $(libdir)/gcc/$(target_noncanonical)/$(gcc_version)/include
...@@ -694,6 +696,15 @@ uninstall-am: uninstall-nobase_libsubincludeHEADERS \ ...@@ -694,6 +696,15 @@ uninstall-am: uninstall-nobase_libsubincludeHEADERS \
uninstall-am uninstall-nobase_libsubincludeHEADERS \ uninstall-am uninstall-nobase_libsubincludeHEADERS \
uninstall-toolexeclibLTLIBRARIES uninstall-toolexeclibLTLIBRARIES
@LIBSSP_USE_SYMVER_SUN_TRUE@@LIBSSP_USE_SYMVER_TRUE@ssp.map-sun : $(srcdir)/ssp.map \
@LIBSSP_USE_SYMVER_SUN_TRUE@@LIBSSP_USE_SYMVER_TRUE@ $(top_srcdir)/../contrib/make_sunver.pl \
@LIBSSP_USE_SYMVER_SUN_TRUE@@LIBSSP_USE_SYMVER_TRUE@ $(libssp_la_OBJECTS) $(libssp_la_LIBADD)
@LIBSSP_USE_SYMVER_SUN_TRUE@@LIBSSP_USE_SYMVER_TRUE@ perl $(top_srcdir)/../contrib/make_sunver.pl \
@LIBSSP_USE_SYMVER_SUN_TRUE@@LIBSSP_USE_SYMVER_TRUE@ $(srcdir)/ssp.map \
@LIBSSP_USE_SYMVER_SUN_TRUE@@LIBSSP_USE_SYMVER_TRUE@ $(libssp_la_OBJECTS:%.lo=.libs/%.o) \
@LIBSSP_USE_SYMVER_SUN_TRUE@@LIBSSP_USE_SYMVER_TRUE@ `echo $(libssp_la_LIBADD) | \
@LIBSSP_USE_SYMVER_SUN_TRUE@@LIBSSP_USE_SYMVER_TRUE@ sed 's,/\([^/.]*\)\.la,/.libs/\1.a,g'` \
@LIBSSP_USE_SYMVER_SUN_TRUE@@LIBSSP_USE_SYMVER_TRUE@ > $@ || (rm -f $@ ; exit 1)
# Tell versions [3.59,3.63) of GNU make to not export all variables. # Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded. # Otherwise a system limit (for SysV at least) may be exceeded.
......
...@@ -21,6 +21,9 @@ ...@@ -21,6 +21,9 @@
/* Define to 1 if you have the <malloc.h> header file. */ /* Define to 1 if you have the <malloc.h> header file. */
#undef HAVE_MALLOC_H #undef HAVE_MALLOC_H
/* Define to 1 if you have the `memmove' function. */
#undef HAVE_MEMMOVE
/* Define to 1 if you have the <memory.h> header file. */ /* Define to 1 if you have the <memory.h> header file. */
#undef HAVE_MEMORY_H #undef HAVE_MEMORY_H
......
...@@ -625,6 +625,10 @@ LIBTOOL ...@@ -625,6 +625,10 @@ LIBTOOL
ssp_have_usable_vsnprintf ssp_have_usable_vsnprintf
EGREP EGREP
GREP GREP
LIBSSP_USE_SYMVER_SUN_FALSE
LIBSSP_USE_SYMVER_SUN_TRUE
LIBSSP_USE_SYMVER_GNU_FALSE
LIBSSP_USE_SYMVER_GNU_TRUE
LIBSSP_USE_SYMVER_FALSE LIBSSP_USE_SYMVER_FALSE
LIBSSP_USE_SYMVER_TRUE LIBSSP_USE_SYMVER_TRUE
CPP CPP
...@@ -4093,18 +4097,18 @@ fi ...@@ -4093,18 +4097,18 @@ fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether symbol versioning is supported" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether symbol versioning is supported" >&5
$as_echo_n "checking whether symbol versioning is supported... " >&6; } $as_echo_n "checking whether symbol versioning is supported... " >&6; }
cat > conftest.map <<EOF
FOO_1.0 {
global: *foo*; bar; local: *;
};
EOF
save_LDFLAGS="$LDFLAGS"
LDFLAGS="$LDFLAGS -fPIC -shared -Wl,--version-script,./conftest.map"
if test x$gcc_no_link = xyes; then if test x$gcc_no_link = xyes; then
# If we cannot link, we cannot build shared libraries, so do not use # If we cannot link, we cannot build shared libraries, so do not use
# symbol versioning. # symbol versioning.
ssp_use_symver=no ssp_use_symver=no
else else
save_LDFLAGS="$LDFLAGS"
LDFLAGS="$LDFLAGS -fPIC -shared -Wl,--version-script,./conftest.map"
cat > conftest.map <<EOF
FOO_1.0 {
global: *foo*; bar; local: *;
};
EOF
if test x$gcc_no_link = xyes; then if test x$gcc_no_link = xyes; then
as_fn_error "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5 as_fn_error "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
fi fi
...@@ -4120,17 +4124,48 @@ main () ...@@ -4120,17 +4124,48 @@ main ()
} }
_ACEOF _ACEOF
if ac_fn_c_try_link "$LINENO"; then : if ac_fn_c_try_link "$LINENO"; then :
ssp_use_symver=yes ssp_use_symver=gnu
else else
ssp_use_symver=no ssp_use_symver=no
fi fi
rm -f core conftest.err conftest.$ac_objext \ rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext conftest$ac_exeext conftest.$ac_ext
if test x$ssp_use_symver = xno; then
LDFLAGS="$save_LDFLAGS"
LDFLAGS="$LDFLAGS -fPIC -shared -Wl,-M,./conftest.map"
# Sun ld cannot handle wildcards and treats all entries as undefined.
cat > conftest.map <<EOF
FOO_1.0 {
global: foo; local: *;
};
EOF
if test x$gcc_no_link = xyes; then
as_fn_error "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
fi
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int foo;
int
main ()
{
;
return 0;
}
_ACEOF
if ac_fn_c_try_link "$LINENO"; then :
ssp_use_symver=sun
else
ssp_use_symver=no
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
fi
LDFLAGS="$save_LDFLAGS"
fi fi
LDFLAGS="$save_LDFLAGS"
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ssp_use_symver" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ssp_use_symver" >&5
$as_echo "$ssp_use_symver" >&6; } $as_echo "$ssp_use_symver" >&6; }
if test "x$ssp_use_symver" = xyes; then if test "x$ssp_use_symver" != xno; then
LIBSSP_USE_SYMVER_TRUE= LIBSSP_USE_SYMVER_TRUE=
LIBSSP_USE_SYMVER_FALSE='#' LIBSSP_USE_SYMVER_FALSE='#'
else else
...@@ -4138,6 +4173,22 @@ else ...@@ -4138,6 +4173,22 @@ else
LIBSSP_USE_SYMVER_FALSE= LIBSSP_USE_SYMVER_FALSE=
fi fi
if test "x$ssp_use_symver" = xgnu; then
LIBSSP_USE_SYMVER_GNU_TRUE=
LIBSSP_USE_SYMVER_GNU_FALSE='#'
else
LIBSSP_USE_SYMVER_GNU_TRUE='#'
LIBSSP_USE_SYMVER_GNU_FALSE=
fi
if test "x$ssp_use_symver" = xsun; then
LIBSSP_USE_SYMVER_SUN_TRUE=
LIBSSP_USE_SYMVER_SUN_FALSE='#'
else
LIBSSP_USE_SYMVER_SUN_TRUE='#'
LIBSSP_USE_SYMVER_SUN_FALSE=
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
...@@ -4423,7 +4474,7 @@ if test x$gcc_no_link = xyes; then ...@@ -4423,7 +4474,7 @@ if test x$gcc_no_link = xyes; then
$as_echo "#define HAVE_STRNCAT 1" >>confdefs.h $as_echo "#define HAVE_STRNCAT 1" >>confdefs.h
else else
for ac_func in mempcpy strncpy strncat for ac_func in memmove mempcpy strncpy strncat
do : do :
as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
...@@ -10591,7 +10642,7 @@ else ...@@ -10591,7 +10642,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF cat > conftest.$ac_ext <<_LT_EOF
#line 10594 "configure" #line 10645 "configure"
#include "confdefs.h" #include "confdefs.h"
#if HAVE_DLFCN_H #if HAVE_DLFCN_H
...@@ -10697,7 +10748,7 @@ else ...@@ -10697,7 +10748,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF cat > conftest.$ac_ext <<_LT_EOF
#line 10700 "configure" #line 10751 "configure"
#include "confdefs.h" #include "confdefs.h"
#if HAVE_DLFCN_H #if HAVE_DLFCN_H
...@@ -11096,6 +11147,14 @@ if test -z "${LIBSSP_USE_SYMVER_TRUE}" && test -z "${LIBSSP_USE_SYMVER_FALSE}"; ...@@ -11096,6 +11147,14 @@ if test -z "${LIBSSP_USE_SYMVER_TRUE}" && test -z "${LIBSSP_USE_SYMVER_FALSE}";
as_fn_error "conditional \"LIBSSP_USE_SYMVER\" was never defined. as_fn_error "conditional \"LIBSSP_USE_SYMVER\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5 Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi fi
if test -z "${LIBSSP_USE_SYMVER_GNU_TRUE}" && test -z "${LIBSSP_USE_SYMVER_GNU_FALSE}"; then
as_fn_error "conditional \"LIBSSP_USE_SYMVER_GNU\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
if test -z "${LIBSSP_USE_SYMVER_SUN_TRUE}" && test -z "${LIBSSP_USE_SYMVER_SUN_FALSE}"; then
as_fn_error "conditional \"LIBSSP_USE_SYMVER_SUN\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
: ${CONFIG_STATUS=./config.status} : ${CONFIG_STATUS=./config.status}
ac_write_fail=0 ac_write_fail=0
......
...@@ -72,23 +72,36 @@ if test x$ssp_hidden = xyes; then ...@@ -72,23 +72,36 @@ if test x$ssp_hidden = xyes; then
fi fi
AC_MSG_CHECKING([whether symbol versioning is supported]) AC_MSG_CHECKING([whether symbol versioning is supported])
cat > conftest.map <<EOF
FOO_1.0 {
global: *foo*; bar; local: *;
};
EOF
save_LDFLAGS="$LDFLAGS"
LDFLAGS="$LDFLAGS -fPIC -shared -Wl,--version-script,./conftest.map"
if test x$gcc_no_link = xyes; then if test x$gcc_no_link = xyes; then
# If we cannot link, we cannot build shared libraries, so do not use # If we cannot link, we cannot build shared libraries, so do not use
# symbol versioning. # symbol versioning.
ssp_use_symver=no ssp_use_symver=no
else else
AC_TRY_LINK([int foo;],[],[ssp_use_symver=yes],[ssp_use_symver=no]) save_LDFLAGS="$LDFLAGS"
LDFLAGS="$LDFLAGS -fPIC -shared -Wl,--version-script,./conftest.map"
cat > conftest.map <<EOF
FOO_1.0 {
global: *foo*; bar; local: *;
};
EOF
AC_TRY_LINK([int foo;],[],[ssp_use_symver=gnu],[ssp_use_symver=no])
if test x$ssp_use_symver = xno; then
LDFLAGS="$save_LDFLAGS"
LDFLAGS="$LDFLAGS -fPIC -shared -Wl,-M,./conftest.map"
# Sun ld cannot handle wildcards and treats all entries as undefined.
cat > conftest.map <<EOF
FOO_1.0 {
global: foo; local: *;
};
EOF
AC_TRY_LINK([int foo;],[],[ssp_use_symver=sun],[ssp_use_symver=no])
fi
LDFLAGS="$save_LDFLAGS"
fi fi
LDFLAGS="$save_LDFLAGS"
AC_MSG_RESULT($ssp_use_symver) AC_MSG_RESULT($ssp_use_symver)
AM_CONDITIONAL(LIBSSP_USE_SYMVER, [test "x$ssp_use_symver" = xyes]) AM_CONDITIONAL(LIBSSP_USE_SYMVER, [test "x$ssp_use_symver" != xno])
AM_CONDITIONAL(LIBSSP_USE_SYMVER_GNU, [test "x$ssp_use_symver" = xgnu])
AM_CONDITIONAL(LIBSSP_USE_SYMVER_SUN, [test "x$ssp_use_symver" = xsun])
AC_CHECK_HEADERS(alloca.h malloc.h paths.h syslog.h string.h unistd.h fcntl.h stdio.h limits.h) AC_CHECK_HEADERS(alloca.h malloc.h paths.h syslog.h string.h unistd.h fcntl.h stdio.h limits.h)
...@@ -98,7 +111,7 @@ if test x$gcc_no_link = xyes; then ...@@ -98,7 +111,7 @@ if test x$gcc_no_link = xyes; then
AC_DEFINE(HAVE_STRNCPY) AC_DEFINE(HAVE_STRNCPY)
AC_DEFINE(HAVE_STRNCAT) AC_DEFINE(HAVE_STRNCAT)
else else
AC_CHECK_FUNCS(mempcpy strncpy strncat) AC_CHECK_FUNCS(memmove mempcpy strncpy strncat)
fi fi
AC_MSG_CHECKING([whether vsnprintf is usable]) AC_MSG_CHECKING([whether vsnprintf is usable])
......
/* Checking memmove. /* Checking memmove.
Copyright (C) 2005, 2009 Free Software Foundation, Inc. Copyright (C) 2005, 2009, 2010 Free Software Foundation, Inc.
This file is part of GCC. This file is part of GCC.
...@@ -40,7 +40,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see ...@@ -40,7 +40,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
extern void __chk_fail (void) __attribute__((__noreturn__)); extern void __chk_fail (void) __attribute__((__noreturn__));
#ifdef HAVE_MEMPCPY #ifdef HAVE_MEMMOVE
void * void *
__memmove_chk (void *dest, const void *src, size_t len, size_t slen) __memmove_chk (void *dest, const void *src, size_t len, size_t slen)
{ {
......
LIBSSP_1.0 { LIBSSP_1.0 {
global: global:
__stack_chk_fail; __stack_chk_guard; __chk_fail; __stack_chk_fail;
__gets_chk; __memcpy_chk; __memmove_chk; __mempcpy_chk; __memset_chk; __stack_chk_guard;
__snprintf_chk; __sprintf_chk; __stpcpy_chk; __strcat_chk; __strcpy_chk; __chk_fail;
__strncat_chk; __strncpy_chk; __vsnprintf_chk; __vsprintf_chk; __gets_chk;
__memcpy_chk;
__memmove_chk;
__mempcpy_chk;
__memset_chk;
__snprintf_chk;
__sprintf_chk;
__stpcpy_chk;
__strcat_chk;
__strcpy_chk;
__strncat_chk;
__strncpy_chk;
__vsnprintf_chk;
__vsprintf_chk;
local: local:
*; *;
}; };
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment