Something missing perhaps?
Jukka Ukkonen
jau789 at gmail.com
Wed Mar 18 06:38:49 UTC 2015
Right, it did not occur to me to blame it on the compiler, but that
certainly
is an excellent explanation. If I understood correctly
sync_lock_test_and_set_8
should then be an alias to***atomic_testandset_64* , sync_fetch_and_add_8 an
alias to *atomic_fetchadd_* *64*, and sync_bool_compare_and_swap an
alias to*
atomic_cmpset_acq_64*. Then the problem is shifted to the 64 bit atomic
operations not having been implemented at all for 32 bit ppc. This is
clearly
due to the fact that the ldarx instruction etc, which would be the native HW
method for implementing the 64 bit atomic operations, are only available on
ppc64, not on ppc32.
Ref. sys/powerpc/include/atomic.h and
http://www-01.ibm.com/support/knowledgecenter/ssw_aix_53/com.ibm.aix.aixassem/doc/alangref/ldarx.htm
This being the case it kind of makes sense to ask why should the compiler
try to use 64 bit atomic operations in the first place on a system which
does
not support them natively? In my mind it would be immensely better (read
more efficient) to drop the ball back to the programmers forcing them to
use data types suitable for the hardware.
--jau
On 2015-03-17 20:35, Justin Hibbits wrote:
> These symbol references are generated by the compiler to handle 64-bit
> atomic operations. I don't think there's currently any support, even
> in libgcc, for 64-bit atomics on 32-bit powerpc. Something *could* be
> hacked together to handle it, using a mutex wrapper, but to the best
> of my knowledge, nobody's done the work for it.
>
> - Justin
>
> On Tue, Mar 17, 2015 at 5:59 AM, Jukka Ukkonen <jau789 at gmail.com> wrote:
>> Hello all,
>>
>> I was trying to build kyotocabinet from the ports tree
>> on an old PowerMac G4 Quicksilver, but the attempt failed
>> in a very peculiar manner...
>> Do these complaints from cc ring any bells...
>>
>> ./libkyotocabinet.so: undefined reference to `__sync_lock_test_and_set_8'
>> ./libkyotocabinet.so: undefined reference to `__sync_fetch_and_add_8'
>> ./libkyotocabinet.so: undefined reference to
>> `__sync_bool_compare_and_swap_8'
>> ./libkyotocabinet.so: undefined reference to `__sync_lock_test_and_set_8'
>> ./libkyotocabinet.so: undefined reference to `__sync_fetch_and_add_8'
>> ./libkyotocabinet.so: undefined reference to
>> `__sync_bool_compare_and_swap_8'
>>
>> Those missing names are apparenly being referenced by
>> work/kyotocabinet-1.2.76/kcthread.cc. Since I failed
>> to find the definition of these names anywhere in the
>> kyotocabinet source, I assume the names are used in
>> some compiler header file.
>> Were those names really intended to be in the headers
>> as-is or were they actually some sort of place holders
>> for something which have then been completely forgotten
>> for some reason?
>>
>> The all important details of the system are...
>>
>> # uname -a
>> FreeBSD yggdrasil 10.1-STABLE FreeBSD 10.1-STABLE #0 r280132: Mon Mar 16
>> 06:12:57 EET 2015 root at yggdrasil:/opt2/obj/usr/src-10.1/sys/GENERIC
>> powerpc
>>
>> # uname -KU
>> 1001510 1001510
>>
>> # freebsd-version -ku
>> 10.1-STABLE
>> 10.1-STABLE
>>
>>
>> --jau
>> _______________________________________________
>> freebsd-ppc at freebsd.org mailing list
>> http://lists.freebsd.org/mailman/listinfo/freebsd-ppc
>> To unsubscribe, send any mail to "freebsd-ppc-unsubscribe at freebsd.org"
More information about the freebsd-ppc
mailing list