On Fri, Nov 18, 2011 at 02:43:58PM +0000, Iain Sandoe wrote: > > On 18 Nov 2011, at 14:40, Jack Howarth wrote: > >> 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? > > aclocal -I. -I.. -I..config > autoheader > automake > autoconf -I. -I.. -I..config > > ... you should be able to do this and then: > delete your existing libitm build. > make configure-target-libitm > > ... and then I would hope (from our other discussions) you should see > that it says > checking if weakref actually works ... no > ... for D11/XC4.2 >
Would appear to be as the config.h generated in x86_64-apple-darwin11.2.0/libitm has... /* Define to 1 if target has a working weakref. */ /* #undef HAVE_WORKING_WEAKREF */ >> 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 */ >>> >>> } >>> >> >>> >>> >>> >>