[Patch RFA libitm] config-based assessment of weakref capability

Iain Sandoe developer@sandoe-acoustics.co.uk
Fri Nov 18 15:43:00 GMT 2011


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

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



More information about the Gcc-patches mailing list