Package: libatomic-ops-dev
Version: 1.2+cvs20091005-1
Severity: important
Hi again,
Thanks to your hint about AO_REQUIRE_CAS define, the armel build of firebird2.5
reached to the point where it needs to link to libatomic_ops.
Sparc wasn't so lucky. The build stops at:
In file included from /usr/include/atomic_ops.h:215,
from ../src/include/../common/classes/fb_atomic.h:476,
from ../src/include/../common/classes/alloc.h:43,
from ../src/include/../common/classes/fb_string.h:39,
from ../src/jrd/../jrd/os/path_utils.h:31,
from ../src/jrd/gds.cpp:47:
/usr/include/atomic_ops/sysdeps/gcc/sparc.h: In function ‘AO_BYTE_TS_val
AO_test_and_set_full(volatile unsigned char*)’:
/usr/include/atomic_ops/sysdeps/gcc/sparc.h:37: error: invalid conversion
from ‘int’ to ‘AO_BYTE_TS_val’
make[4]: *** [../temp/boot/jrd/gds.o] Error 1
Looking at sparc.h, it appears that either the 'oldval' variable defined on
line 32 should be of type 'AO_TS_VAL_t' instead of 'int', or some casting is
needed. Strangely, if I look at this file on my amd64 system, oldval is defined
as AO_TS_VAL_t.
Minimal test program for reproducing (make sure you try it on sparc):
------------[ sparc.cpp ]-------------
#include "atomic_ops.h"
int main(int argc, char** argv)
{
volatile AO_TS_t v;
AO_test_and_set_full(&v);
return 0;
}
--------------------------------------
$ g++ sparc.c
In file included from /usr/include/atomic_ops.h:215,
from sparc.cpp:1:
/usr/include/atomic_ops/sysdeps/gcc/sparc.h: In function ‘AO_BYTE_TS_val
AO_test_and_set_full(volatile unsigned char*)’:
/usr/include/atomic_ops/sysdeps/gcc/sparc.h:37: error: invalid conversion from
‘int’ to ‘AO_BYTE_TS_val’
$ g++ --version
g++ (Debian 4.4.2-9) 4.4.3 20100108 (prerelease)
$ uname -a
Linux smetana 2.6.26-2-sparc64-smp #1 SMP Thu Nov 5 03:34:29 UTC 2009 sparc64
GNU/Linux
Thank you in advance,
dam
--
To UNSUBSCRIBE, email to [email protected]
with a subject of "unsubscribe". Trouble? Contact [email protected]