Well, there are still alignment bugs:
Program received signal SIGSEGV, Segmentation fault. 0xffffffff5dc1cd18 in ?? ()
The offending instruction is
0xffffffff5dc1cd18: ld [ %g4 + %l0 ], %g3
%g4 is 0x100a001e0, but %l0 is 0x1, so together they form an odd address. The code comes from line 79 in widestring.h, which says
PREFIX(32);
The definition of PREFIX contains
uint ##n ##_t x = ((*((uint ##n ##_t *)(p1+j)) ^ *((uint ##n ##_t *) (p2+j))));
which will be instantiated to
uint32_t x = ((*((uint32_t *)(p1+j)) ^ *((uint32_t *) (p2+j))));
It seems like "j" is odd (1) which will of course not work for an uint32_t.