Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 24 Apr 2015 13:46:10 +0200
From:      Dimitry Andric <dim@FreeBSD.org>
To:        Chris Torek <torek@elf.torek.net>
Cc:        Adrian Chadd <adrian@freebsd.org>, scott4long@yahoo.com, 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:  <695B6002-002A-406C-B843-0DCFE24F81BD@FreeBSD.org>
In-Reply-To: <201504241101.t3OB1O8Z029626@elf.torek.net>
References:  <201504241101.t3OB1O8Z029626@elf.torek.net>

next in thread | previous in thread | raw e-mail | index | archive | help

--Apple-Mail=_8DD2A96B-B49A-4354-B6F8-DA5E952FE9B0
Content-Transfer-Encoding: 7bit
Content-Type: text/plain;
	charset=us-ascii

On 24 Apr 2015, at 13:01, Chris Torek <torek@elf.torek.net> wrote:
> 
> 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.)

I'm not sure I would consider this odd.  For purposes of sizeof(), the
flexible array member declaration can be thought of as:

		struct x b[0];

so while both struct s1 and s2 have members that must be aligned at 32
bytes, the former has one extra, while the latter doesn't.  Ergo, 2x32
bytes and 1x32 bytes.

-Dimitry


--Apple-Mail=_8DD2A96B-B49A-4354-B6F8-DA5E952FE9B0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
	filename=signature.asc
Content-Type: application/pgp-signature;
	name=signature.asc
Content-Description: Message signed with OpenPGP using GPGMail

-----BEGIN PGP SIGNATURE-----
Version: GnuPG/MacGPG2 v2.0.27

iEYEARECAAYFAlU6LQUACgkQsF6jCi4glqNeDACgyo1jXpFzVxfNg/zHVgEuBuZf
xjEAoLKT7Ltnjr0YIk7QQvawoQxwA808
=9NxY
-----END PGP SIGNATURE-----

--Apple-Mail=_8DD2A96B-B49A-4354-B6F8-DA5E952FE9B0--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?695B6002-002A-406C-B843-0DCFE24F81BD>