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 */
>>>
>>> }
>>>
>>
>>>
>>>
>>>
>>

Reply via email to