Hi there,

I built and tested svn 1.8.0 today on Solaris 0 Sparc and got lots of
test failures due to core dumps.

The first few dumps I inspected all showed a bus error in

#0  0xfe660760 in cache_lookup (path=0x10fce06 "/A/D/H/pi3", revision=3,
cache=0x17c1820) at subversion/libsvn_fs_fs/tree.c:357

The code is:

for (i = 0; i + 4 <= path_len; i += 4)
  hash_value = hash_value * 0xd1f3da69 + *(const apr_uint32_t*)(path + i);

>From similar problems with other software I expect this to be an
alignment issue: the cast to apr_uint32_t* expects the pointer to point
to an address divisible by four, but the string path can be located at
any address in memory. In fact the cores show, that the address is not
divisible by four.

Sparc is especially picky about correct alignment, other platforms might
have more relaxed rules.

I guess you need to replace path by the next address divisible by 4 (and
decrement path_len) accordingly) before running that loop.

Regards,

Rainer

Reply via email to