#18576: zeromq-4.0.5 fails to build on Solaris SPARC due to casting issues with
volatite integer.
-------------------------+-------------------------------------------------
   Reporter:  drkirkby   |            Owner:
       Type:  PLEASE     |           Status:  new
  CHANGE                 |        Milestone:  sage-6.8
   Priority:  major      |         Keywords:
  Component:  porting:   |          Authors:
  Solaris                |  Report Upstream:  Not yet reported upstream;
  Merged in:             |  Will do shortly.
  Reviewers:             |           Branch:
Work issues:             |     Dependencies:
     Commit:             |
   Stopgaps:             |
-------------------------+-------------------------------------------------
 Using

  * Sage 6.7
  * Sun Blade 2000 with UltraSPARC CPU
  * gcc 4.9.2

 I get a build failure on Solaris SPARC.

 {{{

 make[6]: Entering directory
 `/export/home/drkirkby/sage-6.7/local/var/tmp/sage/build/zeromq-4.0.5/src'
 make[6]: Leaving directory
 `/export/home/drkirkby/sage-6.7/local/var/tmp/sage/build/zeromq-4.0.5/src'
   CXX    libzmq_la-address.lo
   CXX    libzmq_la-clock.lo
   CXX    libzmq_la-ctx.lo
 In file included from ctx.hpp:34:0,
                  from ctx.cpp:30:
 atomic_counter.hpp: In member function 'zmq::atomic_counter_t::integer_t
 zmq::atomic_counter_t::add(zmq::atomic_counter_t::integer_t)':
 atomic_counter.hpp:87:71: error: invalid conversion from 'volatile
 integer_t* {aka volatile unsigned int*}' to 'uint32_t* {aka unsigned
 int*}' [-fpermissive]
              integer_t new_value = atomic_add_32_nv (&value, increment_);
                                                                        ^
 atomic_counter.hpp: In member function 'bool
 zmq::atomic_counter_t::sub(zmq::atomic_counter_t::integer_t)':
 atomic_counter.hpp:130:59: error: invalid conversion from 'volatile
 integer_t* {aka volatile unsigned int*}' to 'uint32_t* {aka unsigned
 int*}' [-fpermissive]
              integer_t nv = atomic_add_32_nv (&value, delta);
                                                            ^
 make[5]: *** [libzmq_la-ctx.lo] Error 1
 make[5]: Leaving directory
 `/export/home/drkirkby/sage-6.7/local/var/tmp/sage/build/zeromq-4.0.5/src/src'
 make[4]: *** [all] Error 2
 }}}
 It looks like there are assembly code that is assembled on x86 and ARM
 processors, but C++ is compiled on other processors. Here's the dodgy
 code, which appears to be casting a volatile unsigned 32-bit integer to a
 standard (non-volatile) unsigned 32-bit integer.No doubt adding
 -fpermissive would allow it to compile, but I don't know what the authors
 intended here.

 I will report this upstream to Martin Sustrik and Mikko Koppanen, and
 offer them access to the SPARC if they want it, although I suspect they
 will see the problem and can suggest a fix.

 {{{

        //  Atomic addition. Returns the old value.

   inline integer_t add (integer_t increment_){
     integer_t old_value;

 #if defined ZMQ_ATOMIC_COUNTER_WINDOWS

   old_value = InterlockedExchangeAdd ((LONG*) &value, increment_);

 #elif defined ZMQ_ATOMIC_COUNTER_ATOMIC_H

   integer_t new_value = atomic_add_32_nv (&value, increment_); // BREAKS
 ON SOLARIS
   old_value = new_value - increment_;

 #elif defined ZMQ_ATOMIC_COUNTER_TILE

   old_value = arch_atomic_add (&value, increment_);

 #elif defined ZMQ_ATOMIC_COUNTER_X86

   __asm__ volatile (
     "lock; xadd %0, %1 \n\t": "=r" (old_value), "=m" (value): "0"
 (increment_), "m" (value): "cc", "memory");

 #elif defined ZMQ_ATOMIC_COUNTER_ARM

   integer_t flag, tmp;__asm__ volatile (
     "       dmb     sy\n\t"
 }}}

--
Ticket URL: <http://trac.sagemath.org/ticket/18576>
Sage <http://www.sagemath.org>
Sage: Creating a Viable Open Source Alternative to Magma, Maple, Mathematica, 
and MATLAB

-- 
You received this message because you are subscribed to the Google Groups 
"sage-trac" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sage-trac.
For more options, visit https://groups.google.com/d/optout.

Reply via email to