Ok. I'm going with that solution, then. See attached diff.

Cheers,
Richard

On Wed Aug 17 21:21:34 2016, yoi_no_myou...@yahoo.co.jp wrote:
> Yes, __SUNPRO_C is defined by DeveloperStudio compiler.
>
> > To only allow the use of __atomic_add_fetch when __ATOMIC_RELAXED is
> > non-zero
>
> > isn't the right move here. So it seems that different compilers
> > either only
> > implement a subset of the __atomic builtins, or name them
> > differently.
> >
> > What was the macro defined by the DeveloperStudio compiler?
> > __SUNPRO_C or
> > something else? In that case, the correct method might be to exclude
> > it, like
> > this:
> >
> > #if defined(__ATOMIC_RELAXED) && !defined(__SUNPRO_C)
> >
> > On Mon Aug 08 08:33:34 2016, yoi_no_myou...@yahoo.co.jp wrote:
> >> Hello,
> >>
> >> % ./Configure solaris-x86-cc
> >> % make
> >> :
> >> Undefined first referenced
> >> symbol in file
> >> __atomic_add_fetch ./libcrypto.so
> >> ld: fatal: symbol referencing errors. No output written to
> >> fuzz/asn1parse-test
> >>
> >>
> >> % ./Configure solaris64-x86_64-cc
> >> % make
> >> has the same error.
> >>
> >> Tested on Solaris10 x86/64, with Solaris developerstudio12.5.
> >>
> >>
> >> This is caused because __ATOMIC_RELAXED is #defined as 0
> >> in /opt/developerstudio12.5/lib/compilers/include/CC/gnu/builtins.h
> >>
> >>
> >> Sample patch:
> >> --- ../openssl-1.1.0-pre6.orig/crypto/threads_pthread.c
> >> +++ ./crypto/threads_pthread.c
> >> @@ -109,7 +109,7 @@
> >>
> >> int CRYPTO_atomic_add(int *val, int amount, int *ret, CRYPTO_RWLOCK
> >> *lock)
> >> {
> >> -#ifdef __ATOMIC_RELAXED
> >> +#if __ATOMIC_RELAXED
> >> *ret = __atomic_add_fetch(val, amount, __ATOMIC_RELAXED);
> >> #else
> >> if (!CRYPTO_THREAD_write_lock(lock))
> >>
> >>
> >> With this patch,
> >> % ./Configure solaris-x86-cc
> >> % make
> >> % make test
> >> passes.
> >>
> >> % ./Configure solaris64-x86_64-cc
> >> % make
> >> passes but
> >> % make test
> >> stops.
> >> This is another problem, which seems to be the same as bug #4641.
> >>
> >>
> >> Regards,
> >>
> >> --- Kiyoshi <yoi_no_myou...@yahoo.co.jp>
> >
> >
> > --
> > Richard Levitte
> > levi...@openssl.org
> >
> > --
> > Ticket here: http://rt.openssl.org/Ticket/Display.html?id=4642
> > Please log in as guest with password guest if prompted
> >


--
Richard Levitte
levi...@openssl.org

-- 
Ticket here: http://rt.openssl.org/Ticket/Display.html?id=4642
Please log in as guest with password guest if prompted

commit 7a73fd48ee58b7792b7c89526c7d3c650091559e
Author: Richard Levitte <levi...@openssl.org>
Date:   Tue Aug 23 03:41:46 2016 -0700

    Don't use __atomic_add_fetch with DeveloperStudio on Solaris
    
    It seems that, although __ATOMIC_RELAXED is defined, that function
    isn't necessarely present.
    
    RT#4642

diff --git a/crypto/threads_pthread.c b/crypto/threads_pthread.c
index 6f5e812..87a2cd6 100644
--- a/crypto/threads_pthread.c
+++ b/crypto/threads_pthread.c
@@ -109,7 +109,7 @@ int CRYPTO_THREAD_compare_id(CRYPTO_THREAD_ID a, CRYPTO_THREAD_ID b)
 
 int CRYPTO_atomic_add(int *val, int amount, int *ret, CRYPTO_RWLOCK *lock)
 {
-#ifdef __ATOMIC_RELAXED
+#if defined(__ATOMIC_RELAXED) && !defined(__SUNPRO_C)
     *ret = __atomic_add_fetch(val, amount, __ATOMIC_RELAXED);
 #else
     if (!CRYPTO_THREAD_write_lock(lock))
-- 
openssl-dev mailing list
To unsubscribe: https://mta.openssl.org/mailman/listinfo/openssl-dev

Reply via email to