Remove sysdeps/nptl/configure.ac.

sysdeps/nptl/configure.ac tests for forced unwind support and the C
cleanup attribute, giving errors if either is unsupported.  It does
nothing beyond running those two tests.

Both the attribute, and _Unwind_GetCFA which is used in the forced
unwind test, were added in GCC 3.3.  Thus these tests are long
obsolete, and this patch removes the configure fragment running them,
along with associated conditionals.

Tested for x86_64 and x86 (testsuite, and that installed stripped
shared libraries are unchanged by the patch).

	* sysdeps/nptl/configure.ac: Remove file.
	* sysdeps/nptl/configure: Remove generated file.
	* configure.ac (libc_cv_forced_unwind): Do not substitute.
	* configure: Regenerated.
	* config.h.in (HAVE_FORCED_UNWIND): Remove #undef.
	* config.make.in (have-forced-unwind): Remove variable.
	* nptl/Makefile [$(have-forced-unwind) = yes]: Make code
	unconditional.
	* nptl/descr.h [HAVE_FORCED_UNWIND]: Likewise.
	* nptl/unwind.c [HAVE_FORCED_UNWIND]: Likewise.
	(__pthread_unwind) [!HAVE_FORCED_UNWIND]: Remove conditional code.
	* nptl/version.c [HAVE_FORCED_UNWIND]: Make code unconditional.
	* sysdeps/nptl/Makefile [$(have-forced-unwind) = yes]: Make code
	unconditional.
This commit is contained in:
Joseph Myers 2015-10-27 21:46:03 +00:00
parent 72f1463df8
commit 3e2ee6f0e3
12 changed files with 18 additions and 167 deletions

View File

@ -1,3 +1,20 @@
2015-10-27 Joseph Myers <joseph@codesourcery.com>
* sysdeps/nptl/configure.ac: Remove file.
* sysdeps/nptl/configure: Remove generated file.
* configure.ac (libc_cv_forced_unwind): Do not substitute.
* configure: Regenerated.
* config.h.in (HAVE_FORCED_UNWIND): Remove #undef.
* config.make.in (have-forced-unwind): Remove variable.
* nptl/Makefile [$(have-forced-unwind) = yes]: Make code
unconditional.
* nptl/descr.h [HAVE_FORCED_UNWIND]: Likewise.
* nptl/unwind.c [HAVE_FORCED_UNWIND]: Likewise.
(__pthread_unwind) [!HAVE_FORCED_UNWIND]: Remove conditional code.
* nptl/version.c [HAVE_FORCED_UNWIND]: Make code unconditional.
* sysdeps/nptl/Makefile [$(have-forced-unwind) = yes]: Make code
unconditional.
2015-10-27 Paul E. Murphy <murphyp@linux.vnet.ibm.com>
[BZ #19174]

View File

@ -119,9 +119,6 @@
/* Mach/i386 specific: define if the `i386_set_gdt' RPC is available. */
#undef HAVE_I386_SET_GDT
/* Defined if forced unwind support is available. */
#undef HAVE_FORCED_UNWIND
/* Defined of libidn is available. */
#undef HAVE_LIBIDN

View File

@ -53,7 +53,6 @@ have-protected-data = @libc_cv_protected_data@
with-fp = @with_fp@
enable-timezone-tools = @enable_timezone_tools@
unwind-find-fde = @libc_cv_gcc_unwind_find_fde@
have-forced-unwind = @libc_cv_forced_unwind@
have-fpie = @libc_cv_fpie@
stack-protector = @stack_protector@
have-selinux = @have_selinux@

2
configure vendored
View File

@ -600,7 +600,6 @@ shared
static
ldd_rewrite_script
use_ldconfig
libc_cv_forced_unwind
libc_cv_rootsbindir
libc_cv_localstatedir
libc_cv_sysconfdir
@ -6717,7 +6716,6 @@ fi
if test x$use_ldconfig = xyes; then
$as_echo "#define USE_LDCONFIG 1" >>confdefs.h

View File

@ -1858,7 +1858,6 @@ AC_SUBST(libc_cv_localedir)
AC_SUBST(libc_cv_sysconfdir)
AC_SUBST(libc_cv_localstatedir)
AC_SUBST(libc_cv_rootsbindir)
AC_SUBST(libc_cv_forced_unwind)
if test x$use_ldconfig = xyes; then
AC_DEFINE(USE_LDCONFIG)

View File

@ -311,14 +311,12 @@ LDFLAGS-pthread.so = -Wl,--enable-new-dtags,-z,nodelete,-z,initfirst
CFLAGS-tst-cleanup2.c = -fno-builtin
CFLAGS-tst-cleanupx2.c = -fno-builtin
ifeq ($(have-forced-unwind),yes)
tests += tst-cancelx2 tst-cancelx3 tst-cancelx4 tst-cancelx5 \
tst-cancelx6 tst-cancelx7 tst-cancelx8 tst-cancelx9 tst-cancelx10 \
tst-cancelx11 tst-cancelx12 tst-cancelx13 tst-cancelx14 tst-cancelx15 \
tst-cancelx16 tst-cancelx17 tst-cancelx18 tst-cancelx20 tst-cancelx21 \
tst-cleanupx0 tst-cleanupx1 tst-cleanupx2 tst-cleanupx3 tst-cleanupx4 \
tst-oncex3 tst-oncex4
endif
ifeq ($(build-shared),yes)
tests += tst-atfork2 tst-tls3 tst-tls4 tst-tls5 tst-_res1 tst-fini1 \
tst-stackguard1

View File

@ -32,9 +32,7 @@
#include <dl-sysdep.h>
#include "../nptl_db/thread_db.h"
#include <tls.h>
#ifdef HAVE_FORCED_UNWIND
# include <unwind.h>
#endif
#include <unwind.h>
#define __need_res_state
#include <resolv.h>
#include <kernel-features.h>
@ -362,10 +360,8 @@ struct pthread
/* Next descriptor with a pending event. */
struct pthread *nextevent;
#ifdef HAVE_FORCED_UNWIND
/* Machine-specific unwind info. */
struct _Unwind_Exception exc;
#endif
/* If nonzero pointer to area allocated for the stack and its
size. */

View File

@ -25,8 +25,6 @@
#include "pthreadP.h"
#include <jmpbuf-unwind.h>
#ifdef HAVE_FORCED_UNWIND
#ifdef _STACK_GROWS_DOWN
# define FRAME_LEFT(frame, other, adj) \
((uintptr_t) frame - adj >= (uintptr_t) other - adj)
@ -107,8 +105,6 @@ unwind_cleanup (_Unwind_Reason_Code reason, struct _Unwind_Exception *exc)
__libc_fatal ("FATAL: exception not rethrown\n");
}
#endif /* have forced unwind */
void
__cleanup_fct_attribute __attribute ((noreturn))
@ -117,42 +113,12 @@ __pthread_unwind (__pthread_unwind_buf_t *buf)
struct pthread_unwind_buf *ibuf = (struct pthread_unwind_buf *) buf;
struct pthread *self = THREAD_SELF;
#ifdef HAVE_FORCED_UNWIND
/* This is not a catchable exception, so don't provide any details about
the exception type. We do need to initialize the field though. */
THREAD_SETMEM (self, exc.exception_class, 0);
THREAD_SETMEM (self, exc.exception_cleanup, &unwind_cleanup);
_Unwind_ForcedUnwind (&self->exc, unwind_stop, ibuf);
#else
/* Handle the compatibility stuff first. Execute all handlers
registered with the old method. We don't execute them in order,
instead, they will run first. */
struct _pthread_cleanup_buffer *oldp = ibuf->priv.data.cleanup;
struct _pthread_cleanup_buffer *curp = THREAD_GETMEM (self, cleanup);
if (curp != oldp)
{
do
{
/* Pointer to the next element. */
struct _pthread_cleanup_buffer *nextp = curp->__prev;
/* Call the handler. */
curp->__routine (curp->__arg);
/* To the next. */
curp = nextp;
}
while (curp != oldp);
/* Mark the current element as handled. */
THREAD_SETMEM (self, cleanup, curp);
}
/* We simply jump to the registered setjmp buffer. */
__libc_unwind_longjmp ((struct __jmp_buf_tag *) ibuf->cancel_jmp_buf, 1);
#endif
/* NOTREACHED */
/* We better do not get here. */

View File

@ -27,9 +27,7 @@ static const char banner[] =
This is free software; see the source for copying conditions.\n\
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n\
PARTICULAR PURPOSE.\n"
#ifdef HAVE_FORCED_UNWIND
"Forced unwind support included.\n"
#endif
;

View File

@ -24,11 +24,9 @@ ifeq ($(subdir),rt)
librt-sysdep_routines += timer_routines librt-cancellation
CFLAGS-librt-cancellation.c += -fexceptions -fasynchronous-unwind-tables
ifeq ($(have-forced-unwind),yes)
tests += tst-mqueue8x
CFLAGS-tst-mqueue8x.c += -fexceptions
endif
endif
ifeq ($(subdir),posix)
CFLAGS-confstr.c += -DLIBPTHREAD_VERSION='"NPTL $(version)"'

View File

@ -1,78 +0,0 @@
# This file is generated from configure.ac by Autoconf. DO NOT EDIT!
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for forced unwind support" >&5
$as_echo_n "checking for forced unwind support... " >&6; }
if ${libc_cv_forced_unwind+:} false; then :
$as_echo_n "(cached) " >&6
else
old_CPPFLAGS="$CPPFLAGS"
# Without inhibit_libc #define'd, GCC's unwind.h (at least for ia64)
# will try to include <stdlib.h>, which doesn't exist yet if we're
# building libc in a bare environment.
CPPFLAGS="$CPPFLAGS -Dinhibit_libc=1"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <unwind.h>
int
main ()
{
struct _Unwind_Exception exc;
struct _Unwind_Context *context;
_Unwind_GetCFA (context)
;
return 0;
}
_ACEOF
if ac_fn_c_try_compile "$LINENO"; then :
libc_cv_forced_unwind=yes
else
libc_cv_forced_unwind=no
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
CPPFLAGS="$old_CPPFLAGS"
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_forced_unwind" >&5
$as_echo "$libc_cv_forced_unwind" >&6; }
if test $libc_cv_forced_unwind = yes; then
$as_echo "#define HAVE_FORCED_UNWIND 1" >>confdefs.h
old_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS -Werror -fexceptions"
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C cleanup handling" >&5
$as_echo_n "checking for C cleanup handling... " >&6; }
if ${libc_cv_c_cleanup+:} false; then :
$as_echo_n "(cached) " >&6
else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
extern void some_function (void);
void cl (void *a) { }
int
main ()
{
int a __attribute__ ((cleanup (cl)));
some_function ()
;
return 0;
}
_ACEOF
if ac_fn_c_try_compile "$LINENO"; then :
libc_cv_c_cleanup=yes
else
libc_cv_c_cleanup=no
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_c_cleanup" >&5
$as_echo "$libc_cv_c_cleanup" >&6; }
CFLAGS="$old_CFLAGS"
if test $libc_cv_c_cleanup = no; then
as_fn_error $? "the compiler must support C cleanup handling" "$LINENO" 5
fi
else
as_fn_error $? "forced unwind support is required" "$LINENO" 5
fi

View File

@ -1,37 +0,0 @@
dnl configure fragment for new libpthread implementation.
GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
dnl Iff <unwind.h> is available, make sure it is the right one and it
dnl contains struct _Unwind_Exception.
AC_CACHE_CHECK(dnl
for forced unwind support, libc_cv_forced_unwind, [dnl
old_CPPFLAGS="$CPPFLAGS"
# Without inhibit_libc #define'd, GCC's unwind.h (at least for ia64)
# will try to include <stdlib.h>, which doesn't exist yet if we're
# building libc in a bare environment.
CPPFLAGS="$CPPFLAGS -Dinhibit_libc=1"
AC_TRY_COMPILE([#include <unwind.h>], [
struct _Unwind_Exception exc;
struct _Unwind_Context *context;
_Unwind_GetCFA (context)],
libc_cv_forced_unwind=yes, libc_cv_forced_unwind=no)
CPPFLAGS="$old_CPPFLAGS"])
if test $libc_cv_forced_unwind = yes; then
AC_DEFINE(HAVE_FORCED_UNWIND)
dnl Check for C cleanup handling.
old_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS -Werror -fexceptions"
AC_CACHE_CHECK([for C cleanup handling], libc_cv_c_cleanup, [dnl
AC_TRY_COMPILE([
extern void some_function (void);
void cl (void *a) { }], [
int a __attribute__ ((cleanup (cl)));
some_function ()],
libc_cv_c_cleanup=yes, libc_cv_c_cleanup=no)])
CFLAGS="$old_CFLAGS"
if test $libc_cv_c_cleanup = no; then
AC_MSG_ERROR([the compiler must support C cleanup handling])
fi
else
AC_MSG_ERROR(forced unwind support is required)
fi