svn commit: r281451 - head/sys/vm

Chris Torek torek at elf.torek.net
Fri Apr 24 11:08:30 UTC 2015


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


More information about the svn-src-all mailing list