>The backtrace might help a little, though.
Not as such:
Program received signal SIGSEGV, Segmentation fault.
0xffffffff5dc1d55c in ?? ()
(gdb) bt
#0 0xffffffff5dc1d55c in ?? ()
#1 0xffffffff5dc1d554 in ?? ()
Backtrace stopped: previous frame identical to this frame (corrupt stack?)
(gdb)
The offending instruction is
0xffffffff5dc1d55c: sth %g1, [ %i0 + 0x18 ]
which attempts to store a 16-bit value at an odd address (since %i0
contains 0x10092d6e9).
Apparently I need to compile a new gdb, since I don't get any symbolic
info from shared objects, but I've managed to map the code back to
this line, using pattern matching of the machine code:
/tmp/pike/src/post_modules/CritBit/tree_low.c:156
CB_SET_KEY(node, s);
So appantly "node" contains an odd address. I instrumented the
function node_init() to print the addresses of nodes it allocates, and
sure enough:
tree = 1008d8480
tree = 100931289
*** Error code 138
make: Fatal error: Command failed for target `just_verify'
So the bug is that CB_NODE_ALLOC() does not provide enough alignment
for an object of type "struct cb_node" in the pointer it returns.