tags 518837 + patch thanks On 2009/3/9 Peter De Schrijver wrote: > Package: opencascade > Version: 6.3.0.dfsg.1-1 > Severity: serious > > There was an error while trying to autobuild your package: [...]
Indeed, all non-x86 arches fail due to assembly code. Attached patch should work, but I own only x86 machines and cannot test it, will test it later on x86 to ensure that it is harmless. Denis
Index: opencascade/ros/inc/Standard_Atomic.hxx =================================================================== --- opencascade.orig/ros/inc/Standard_Atomic.hxx +++ opencascade/ros/inc/Standard_Atomic.hxx @@ -51,35 +51,24 @@ // however these definitions involve specific type atomic_t // Note: The same code probably would work for Intel compiler //=================================================== -#elif defined(LIN) +#elif defined(__GNUG__) -inline void Standard_Atomic_Increment (int volatile* var) +#include <ext/atomicity.h> + +inline void Standard_Atomic_Increment (int* var) { // C equivalent: // ++(*var); - __asm__ __volatile__ - ( - "lock incl %0" - : "=m"(*var) // out - : "m" (*var) // in - ); + __gnu_cxx::__atomic_add_dispatch(static_cast<_Atomic_word*>(var), 1); } -inline int Standard_Atomic_DecrementTest (int volatile* var) +inline int Standard_Atomic_DecrementTest (int* var) { // C equivalent: // return --(*var) == 0; - unsigned char c; - __asm__ __volatile__ - ( - "lock decl %0; sete %1" - : "=m"(*var), "=qm"(c) // out - : "m" (*var) // in - : "memory" - ); - return c != 0; + return __gnu_cxx::__exchange_and_add_dispatch(static_cast<_Atomic_word*>(var),-1) == 1; } //=================================================== Index: opencascade/ros/src/Standard/Standard_Atomic.hxx =================================================================== --- opencascade.orig/ros/src/Standard/Standard_Atomic.hxx +++ opencascade/ros/src/Standard/Standard_Atomic.hxx @@ -51,35 +51,24 @@ // however these definitions involve specific type atomic_t // Note: The same code probably would work for Intel compiler //=================================================== -#elif defined(LIN) +#elif defined(__GNUG__) -inline void Standard_Atomic_Increment (int volatile* var) +#include <ext/atomicity.h> + +inline void Standard_Atomic_Increment (int* var) { // C equivalent: // ++(*var); - __asm__ __volatile__ - ( - "lock incl %0" - : "=m"(*var) // out - : "m" (*var) // in - ); + __gnu_cxx::__atomic_add_dispatch(static_cast<_Atomic_word*>(var), 1); } -inline int Standard_Atomic_DecrementTest (int volatile* var) +inline int Standard_Atomic_DecrementTest (int* var) { // C equivalent: // return --(*var) == 0; - unsigned char c; - __asm__ __volatile__ - ( - "lock decl %0; sete %1" - : "=m"(*var), "=qm"(c) // out - : "m" (*var) // in - : "memory" - ); - return c != 0; + return __gnu_cxx::__exchange_and_add_dispatch(static_cast<_Atomic_word*>(var),-1) == 1; } //===================================================