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

Reply via email to