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?

Reply via email to