On Thu, Jun 20, 2013 at 4:43 PM, Rainer Jung <rainer.jung_at_kippdata.de>wrote:
> 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
>
Due to the back-end-forth changes made on this function,
I combined the patches into one small summary patch and
and proposed it for backport (r1495806 of 1.8.x-1495063).
Please review.
-- Stefan^2.
Received on 2013-06-23 15:50:04 CEST