On 2013-Jun-29 15:31:24 +0000, Tim Kientzle <kient...@freebsd.org> wrote:
>Log:
>  Enable svnlite on armv6.

This breaks building world with gcc on Raspberry Pi:

gcc -O -pipe  
-I/tank/src10r/usr.bin/svn/svn/../../../contrib/subversion/subversion/include 
-I/tank/src10r/usr.bin/svn/svn/../../../contrib/subversion/subversion 
-I/tank/src10r/usr.bin/svn/svn/..  -I/tank/src10r/usr.bin/svn/svn/../lib/libapr 
 -I/tank/src10r/usr.bin/svn/svn/../../../contrib/apr/include/arch/unix  
-I/tank/src10r/usr.bin/svn/svn/../../../contrib/apr/include  
-I/tank/src10r/usr.bin/svn/svn/../lib/libapr_util  
-I/tank/src10r/usr.bin/svn/svn/../../../contrib/apr-util/include/private  
-I/tank/src10r/usr.bin/svn/svn/../../../contrib/apr-util/include -std=gnu99 
-Wno-pointer-sign  -o svnlite add-cmd.o blame-cmd.o cat-cmd.o changelist-cmd.o 
checkout-cmd.o cl-conflicts.o cleanup-cmd.o commit-cmd.o conflict-callbacks.o 
copy-cmd.o delete-cmd.o deprecated.o diff-cmd.o export-cmd.o file-merge.o 
help-cmd.o import-cmd.o info-cmd.o list-cmd.o lock-cmd.o log-cmd.o merge-cmd.o 
mergeinfo-cmd.o mkdir-cmd.o move-cmd.o notify.o patch-cmd.o propdel-cmd.o 
propedit-cmd.o propget-cmd.o proplist-cmd.o props.o propset-cmd.o 
relocate-cmd.o resolve-cmd.o resolved-cmd.o revert-cmd.o status-cmd.o status.o 
svn.o switch-cmd.o unlock-cmd.o update-cmd.o upgrade-cmd.o util.o 
-L/tank/obj/rpi/arm.armv6/tank/src10r/usr.bin/svn/svn/../lib/libsvn_client 
-lsvn_client  
-L/tank/obj/rpi/arm.armv6/tank/src10r/usr.bin/svn/svn/../lib/libsvn_wc -lsvn_wc 
 -L/tank/obj/rpi/arm.armv6/tank/src10r/usr.bin/svn/svn/../lib/libsvn_ra 
-lsvn_ra  
-L/tank/obj/rpi/arm.armv6/tank/src10r/usr.bin/svn/svn/../lib/libsvn_ra_local 
-lsvn_ra_local  
-L/tank/obj/rpi/arm.armv6/tank/src10r/usr.bin/svn/svn/../lib/libsvn_ra_svn 
-lsvn_ra_svn  
-L/tank/obj/rpi/arm.armv6/tank/src10r/usr.bin/svn/svn/../lib/libsvn_ra_serf 
-lsvn_ra_serf  
-L/tank/obj/rpi/arm.armv6/tank/src10r/usr.bin/svn/svn/../lib/libsvn_repos 
-lsvn_repos  
-L/tank/obj/rpi/arm.armv6/tank/src10r/usr.bin/svn/svn/../lib/libsvn_fs -lsvn_fs 
 -L/tank/obj/rpi/arm.armv6/tank/src10r/usr.bin/svn/svn/../lib/libsvn_fs_fs 
-lsvn_fs_fs  
-L/tank/obj/rpi/arm.armv6/tank/src10r/usr.bin/svn/svn/../lib/libsvn_fs_util 
-lsvn_fs_util  
-L/tank/obj/rpi/arm.armv6/tank/src10r/usr.bin/svn/svn/../lib/libsvn_delta 
-lsvn_delta  
-L/tank/obj/rpi/arm.armv6/tank/src10r/usr.bin/svn/svn/../lib/libsvn_diff 
-lsvn_diff  
-L/tank/obj/rpi/arm.armv6/tank/src10r/usr.bin/svn/svn/../lib/libsvn_subr 
-lsvn_subr  
-L/tank/obj/rpi/arm.armv6/tank/src10r/usr.bin/svn/svn/../lib/libserf -lserf  
-L/tank/obj/rpi/arm.armv6/tank/src10r/usr.bin/svn/svn/../lib/libapr_util 
-lapr-util  -lbsdxml  
-L/tank/obj/rpi/arm.armv6/tank/src10r/usr.bin/svn/svn/../lib/libapr -lapr  
-L/tank/obj/rpi/arm.armv6/tank/src10r/usr.bin/svn/svn/../lib/libsqlite3 
-lsqlite3  -lz -lcrypt -lmagic -lcrypto -lssl -lpthread
/tank/obj/rpi/arm.armv6/tank/src10r/usr.bin/svn/svn/../lib/libsvn_subr/libsvn_subr.a(named_atomic.o):
 In function `svn_named_atomic__cmpxchg':
named_atomic.c:(.text+0xf0): undefined reference to 
`__sync_val_compare_and_swap_8'
/tank/obj/rpi/arm.armv6/tank/src10r/usr.bin/svn/svn/../lib/libsvn_subr/libsvn_subr.a(named_atomic.o):
 In function `svn_named_atomic__add':
named_atomic.c:(.text+0x174): undefined reference to `__sync_add_and_fetch_8'
/tank/obj/rpi/arm.armv6/tank/src10r/usr.bin/svn/svn/../lib/libsvn_subr/libsvn_subr.a(named_atomic.o):
 In function `svn_named_atomic__write':
named_atomic.c:(.text+0x1c0): undefined reference to 
`__sync_lock_test_and_set_8'
/tank/obj/rpi/arm.armv6/tank/src10r/usr.bin/svn/svn/../lib/libapr/libapr.a(builtins.o):
 In function `apr_atomic_dec32':
builtins.c:(.text+0x90): undefined reference to `__sync_sub_and_fetch_4'
*** Error code 1

Stop.
make: stopped in /tank/src10r/usr.bin/svn/svn

I've split the failures into two categories:
 __sync_add_and_fetch_8
 __sync_lock_test_and_set_8
 __sync_val_compare_and_swap_8
these should be defined in /usr/src/sys/arm/arm/stdatomic.c (and
compiled into libcompiler_rt.a) but that file only defines 1-, 2- and
4-byte variants for userland armv6 (it looks like it fakes 8-byte
variants in the kernel by disabling interrupts).

I don't know ARM assembler well enough to know if there's any way to
do 64-bit atomic operations.  I suspect not.

 __sync_sub_and_fetch_4
There are references to __sync_sub_and_fetch() but I can't any sign of
a definition.  It looks like __sync_sub_and_fetch_4 is supposed to be
a gcc builtin so I'm not sure why it's being emitted without a definition.

-- 
Peter Jeremy

Attachment: pgpXL4FQEHwEX.pgp
Description: PGP signature

Reply via email to