On 14/03/16 15:05, Andy Polyakov via RT wrote: >>>> Bump... The issue is still present as of b36a2ef for OS X 10.6 64-bit. >>>> 32-bit tests OK. >>>> >>>> The relevant snippets are: >>>> >>>> $ make test >>>> ... >>>> ../test/recipes/90-test_async.t ........... 1/1 >>>> # Failed test 'running asynctest' >>>> # at ../test/testlib/OpenSSL/Test/Simple.pm line 70. >>>> # Looks like you failed 1 test of 1. >>>> ../test/recipes/90-test_async.t ........... Dubious, test returned 1 >>>> (wstat 256, 0x100) >>>> Failed 1/1 subtests >>> >>> Once again, "it boils down to the fact that getcontext always returns >>> failure to ppc64 program. There is nothing we can do about it, you just >>> have to accept that this particular thing doesn't work on MacOS >>> X/ppc64." getcontext is part of libc equivalent, which is why there is >>> nothing that can be done about it. >>> >>> >> Can we detect the platform in async_posix.h so that if we work out we're >> on ppc64 then we default to ASYNC_NULL? > > #if defined(__APPLE__) && (defined(__ppc64__) || defined(_ARCH_PPC64)) > > So something like the attached?
Jeff, can you test this? Matt
>From e30be0c1c51cc7da06f103a07d6b4b9757838867 Mon Sep 17 00:00:00 2001 From: Matt Caswell <m...@openssl.org> Date: Mon, 14 Mar 2016 15:15:27 +0000 Subject: [PATCH] Disable ASYNC on MacOSX/ppc64 MacOSX/ppc64 has a getcontext() but it always fails, so if we detect we're on that platform we should use ASYNC_NULL RT#4366 --- crypto/async/arch/async_posix.h | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/crypto/async/arch/async_posix.h b/crypto/async/arch/async_posix.h index de80f95..edc332d 100644 --- a/crypto/async/arch/async_posix.h +++ b/crypto/async/arch/async_posix.h @@ -53,20 +53,25 @@ #define OPENSSL_ASYNC_ARCH_ASYNC_POSIX_H #include <openssl/e_os2.h> -#if (defined(OPENSSL_SYS_UNIX) || defined(OPENSSL_SYS_CYGWIN)) && defined(OPENSSL_THREADS) && !defined(OPENSSL_NO_ASYNC) +#if (defined(OPENSSL_SYS_UNIX) || defined(OPENSSL_SYS_CYGWIN)) \ + && defined(OPENSSL_THREADS) && !defined(OPENSSL_NO_ASYNC) -# include <unistd.h> +/* MacOSX/ppc64 has a getcontext() but it always fails */ +# if !defined(__APPLE__) || (!defined(__ppc64__) && !defined(_ARCH_PPC64)) \ + || !defined(__MACH__) -# if _POSIX_VERSION >= 200112L +# include <unistd.h> -# include <pthread.h> +# if _POSIX_VERSION >= 200112L -# define ASYNC_POSIX -# define ASYNC_ARCH +# include <pthread.h> -# include <ucontext.h> -# include <setjmp.h> -# include "e_os.h" +# define ASYNC_POSIX +# define ASYNC_ARCH + +# include <ucontext.h> +# include <setjmp.h> +# include "e_os.h" typedef struct async_fibre_st { ucontext_t fibre; @@ -88,11 +93,12 @@ static inline int async_fibre_swapcontext(async_fibre *o, async_fibre *n, int r) return 1; } -# define async_fibre_init_dispatcher(d) +# define async_fibre_init_dispatcher(d) int async_fibre_makecontext(async_fibre *fibre); void async_fibre_free(async_fibre *fibre); +# endif # endif #endif #endif /* OPENSSL_ASYNC_ARCH_ASYNC_POSIX_H */ -- 2.5.0
-- openssl-dev mailing list To unsubscribe: https://mta.openssl.org/mailman/listinfo/openssl-dev