The problem seems likely to be related to odd compiler handling of
alignment.  Consider this code bit, which extracts the essentials:

        struct x {
                int x;
        } __attribute__((__aligned__(32)));

        struct s1 {
                int a;
                struct x b[1];
        };

        struct s2 {
                int a;
                struct x b[];
        };

        extern void test2(int);
        void test(void) {
            test2(sizeof(struct s1));
            test2(sizeof(struct s2));
        }

Compiled, here are the two sizeof values (this particular compiler
output is from clang but gcc and clang both agree on sizeof here):

        movl    $64, %edi
        callq   test2
        movl    $32, %edi
        popq    %rbp
        jmp     test2                   # TAILCALL

With the flexible array, (sizeof(struct uma_cache)) is going to be
32 bytes smaller than without it.

(I have not looked closely enough to determine what the size should be.)

Chris
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to