The NBC functionality doesn't fare very well on SPARC. One of the
problems is with data alignment. An NBC schedule is a number of
variously sized fields laid out contiguously in linear memory (e.g.,
see nbc_internal.h or nbc.c) and words don't have much natural
alignment. On SPARC, the "default" (for some definition of that word)
is to sigbus when a word is not properly aligned. In any case (even
non-SPARC), one might argue misalignment and subsequent exception
handling is nice to avoid.
Here are two specific issues.
*) Schedule layout uses single-char delimiters between "round
schedules". So, even if the first "round schedule" has nice alignment,
the second will have single-byte offsets for its components.
*) 8-byte pointers can fall on 4-byte boundaries. E.g., say a schedule
starts on some "nice" alignment. The first words of the schedule will be:
int total size of the schedule
int number of elements in the first round schedule
enum type of function
void * pointer to some buffer
So, with -m64, that 8-byte pointer is on a 12-byte boundary.
Any input/comments on how to proceed?