Date: Fri, 24 Apr 2015 04:01:24 -0700 (PDT) From: Chris Torek <torek@elf.torek.net> To: adrian@freebsd.org, scott4long@yahoo.com Cc: dchagin@freebsd.org, src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r281451 - head/sys/vm Message-ID: <201504241101.t3OB1O8Z029626@elf.torek.net> In-Reply-To: <CAJ-VmonQdnkLEhspj120bPMGO9PbVJv7vkNVVt%2B42viSNwL1Ww@mail.gmail.com>
index | next in thread | previous in thread | raw e-mail
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
home |
help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201504241101.t3OB1O8Z029626>
