On Fri, Nov 18, 2011 at 01:44:40PM +0000, Iain Sandoe wrote:
> Hi,
>
> one of the three remaining libitm issues for Darwin is to supply the
> dummy funcs fro the weakrefs (as Rainer has done for Tru64) for the
> versions of Darwin that need them.
>
> Since we now have the situation where there are several targets which
> might need dummy functions for the weak declarations, it seemed worth
> trying to auto-foo this.
>
> .. the attached works for me on Darwin9 (weakref doesn't work like
> elf***) and Darwin10+XCode3.2.5 (weakref works like elf)
>
> I hope it also works for Rainer .... and that I've got the right
> designator for the Tru64 cross-case.
Iain,
What steps are you taking to regenerate configure inside of libitm?
I am trying...
automake-1.11
autoconf -I. -I./config
but this fails with...
configure.ac:166: error: possibly undefined macro: GCC_AC_FUNC_MMAP_BLACKLIST
If this token and others are legitimate, please use m4_pattern_allow.
See the Autoconf documentation.
when using automake 1.11.1 and autoconf 2.64. Are you able to manually
regenerate configure or are you depending on --enable-maintainer-mode?
Jack
>
> comments/OK for trunk?
> Iain
>
> *** FWIW, weakref actually work (at runtime) for earlier Darwin
> - it's just that refs either need to be satisfied by dummies at link
> time -
> - or the library namespace has to be flattened (which is generally
> undesirable).
>
> -----
>
> libitm:
>
> * acinclude.m4 (LIBITM_CHECK_WORKING_WEAKREF): New.
> * configure.ac: Use LIBITM_CHECK_WORKING_WEAKREF.
> * alloc_cpp.cc: Generate dummy functions if we don't
> HAVE_WORKING_WEAKREF.
> * eh_cpp.cc: Likewise.
> * configure: Regenerate.
> * aclocal.m4: Likewise.
> * config.h.in: Likewise.
>
> Index: libitm/acinclude.m4
> ===================================================================
> --- libitm/acinclude.m4 (revision 181470)
> +++ libitm/acinclude.m4 (working copy)
> @@ -109,6 +109,29 @@ i[[34567]]86 | x86_64)
> ;;
> esac])
>
> +dnl Check whether weak refs actually work.
> +AC_DEFUN([LIBITM_CHECK_WORKING_WEAKREF], [
> + AC_CACHE_CHECK([whether weak refs actually work],
> + libitm_cv_have_working_weakref, [
> + AC_RUN_IFELSE([AC_LANG_SOURCE([[
> +extern void fNotToBeFoundInAnyStandardLib(void) __attribute__((weak));
> +int main ()
> +{
> + if (fNotToBeFoundInAnyStandardLib)
> + return 0;
> + else
> + return 1;
> +}
> +}]])], libitm_cv_have_working_weakref=yes,
> libitm_cv_have_working_weakref=no, [
> +case "${host}" in
> + alpha*-dec-osf*) libitm_cv_have_working_weakref=no ;;
> + *-apple-darwin[[89]]*) libitm_cv_have_working_weakref=no ;;
> + *) libitm_cv_have_working_weakref=yes;;
> +esac])])
> +if test x"$libitm_cv_have_working_weakref" = xyes; then
> + AC_DEFINE(HAVE_WORKING_WEAKREF, 1, [Define to 1 if target has a working
> weakref.])
> +fi])
> +
> sinclude(../libtool.m4)
> dnl The lines below arrange for aclocal not to bring an installed
> dnl libtool.m4 into aclocal.m4, while still arranging for automake to
> Index: libitm/configure.ac
> ===================================================================
> --- libitm/configure.ac (revision 181470)
> +++ libitm/configure.ac (working copy)
> @@ -238,6 +238,7 @@ CFLAGS="$save_CFLAGS $XCFLAGS"
> LIBITM_CHECK_SYNC_BUILTINS
> LIBITM_CHECK_64BIT_SYNC_BUILTINS
> LIBITM_CHECK_AS_AVX
> +LIBITM_CHECK_WORKING_WEAKREF
>
> # Cleanup and exit.
> CFLAGS="$save_CFLAGS"
> Index: libitm/alloc_cpp.cc
> ===================================================================
> --- libitm/alloc_cpp.cc (revision 181470)
> +++ libitm/alloc_cpp.cc (working copy)
> @@ -60,7 +60,7 @@ extern void _ZdlPvRKSt9nothrow_t (void *, c_nothro
> extern void *_ZnaXRKSt9nothrow_t (size_t, c_nothrow_p) __attribute__((weak));
> extern void _ZdaPvRKSt9nothrow_t (void *, c_nothrow_p) __attribute__((weak));
>
> -#ifdef __osf__ /* Really: !HAVE_WEAKDEF */
> +#if !defined (HAVE_WORKING_WEAKREF)
> void *_ZnwX (size_t) { return NULL; }
> void _ZdlPv (void *) { return; }
> void *_ZnaX (size_t) { return NULL; }
> @@ -70,7 +70,7 @@ void *_ZnwXRKSt9nothrow_t (size_t, c_nothrow_p) {
> void _ZdlPvRKSt9nothrow_t (void *, c_nothrow_p) { return; }
> void *_ZnaXRKSt9nothrow_t (size_t, c_nothrow_p) { return NULL; }
> void _ZdaPvRKSt9nothrow_t (void *, c_nothrow_p) { return; }
> -#endif /* __osf__ */
> +#endif /* HAVE_WORKING_WEAKREF */
>
> /* Wrap the delete nothrow symbols for usage with a single argument.
> Perhaps should have a configure type check for this, because the
> Index: libitm/eh_cpp.cc
> ===================================================================
> --- libitm/eh_cpp.cc (revision 181470)
> +++ libitm/eh_cpp.cc (working copy)
> @@ -39,13 +39,13 @@ extern void *__cxa_begin_catch (void *) WEAK;
> extern void *__cxa_end_catch (void) WEAK;
> extern void __cxa_tm_cleanup (void *, void *, unsigned int) WEAK;
>
> -#ifdef __osf__ /* Really: !HAVE_WEAKDEF */
> +#if !defined (HAVE_WORKING_WEAKREF)
> void *__cxa_allocate_exception (size_t) { return NULL; }
> void __cxa_throw (void *, void *, void *) { return; }
> void *__cxa_begin_catch (void *) { return NULL; }
> void *__cxa_end_catch (void) { return NULL; }
> void __cxa_tm_cleanup (void *, void *, unsigned int) { return; }
> -#endif
> +#endif /* HAVE_WORKING_WEAKREF */
>
> }
>
>
>
>