From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Kiper Subject: Re: [MULTIBOOT2 DOC PATCH 08/10] multiboot2: Add C structure alignment and padding consideration section Date: Fri, 10 Jun 2016 19:58:08 +0200 Message-ID: <20160610175808.GF5490@olila.local.net-space.pl> References: <1465504244-17175-1-git-send-email-daniel.kiper@oracle.com> <1465504244-17175-9-git-send-email-daniel.kiper@oracle.com> <1c1e54de-2f19-20b6-b8c8-229619b95038@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta3.messagelabs.com ([195.245.230.39]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bBQhQ-0004Ww-Ma for xen-devel@lists.xenproject.org; Fri, 10 Jun 2016 17:58:28 +0000 Content-Disposition: inline In-Reply-To: <1c1e54de-2f19-20b6-b8c8-229619b95038@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Andrew Cooper Cc: jgross@suse.com, grub-devel@gnu.org, arvidjaar@gmail.com, phcoder@gmail.com, eric.snowberg@oracle.com, seth.goldberg@oracle.com, xen-devel@lists.xenproject.org List-Id: xen-devel@lists.xenproject.org T24gVGh1LCBKdW4gMDksIDIwMTYgYXQgMTE6MDc6MTJQTSArMDEwMCwgQW5kcmV3IENvb3BlciB3 cm90ZToKPiBPbiAwOS8wNi8yMDE2IDIxOjMwLCBEYW5pZWwgS2lwZXIgd3JvdGU6Cj4gPiBTaWdu ZWQtb2ZmLWJ5OiBEYW5pZWwgS2lwZXIgPGRhbmllbC5raXBlckBvcmFjbGUuY29tPgo+ID4gLS0t Cj4gPiAgZG9jL211bHRpYm9vdC50ZXhpIHwgICAxNyArKysrKysrKysrKysrKysrKwo+ID4gIDEg ZmlsZSBjaGFuZ2VkLCAxNyBpbnNlcnRpb25zKCspCj4gPgo+ID4gZGlmZiAtLWdpdCBhL2RvYy9t dWx0aWJvb3QudGV4aSBiL2RvYy9tdWx0aWJvb3QudGV4aQo+ID4gaW5kZXggYzgxYjJlYS4uYmYw MmExYiAxMDA2NDQKPiA+IC0tLSBhL2RvYy9tdWx0aWJvb3QudGV4aQo+ID4gKysrIGIvZG9jL211 bHRpYm9vdC50ZXhpCj4gPiBAQCAtMTM4NCw2ICsxMzg0LDcgQEAgZG9jdW1lbnQsIGJ1dCBhcmUg aW5jbHVkZWQgZm9yIHByb3NwZWN0aXZlIG9wZXJhdGluZyBzeXN0ZW0gYW5kIGJvb3QKPiA+ICBs b2FkZXIgd3JpdGVycy4KPiA+Cj4gPiAgQG1lbnUKPiA+ICsqIEMgc3RydWN0dXJlIGFsaWdubWVu dCBhbmQgcGFkZGluZyBjb25zaWRlcmF0aW9uOjoKPiA+ICAqIE5vdGVzIG9uIFBDOjoKPiA+ICAq IEJJT1MgZGV2aWNlIG1hcHBpbmcgdGVjaG5pcXVlczo6Cj4gPiAgKiBFeGFtcGxlIE9TIGNvZGU6 Ogo+ID4gQEAgLTEzOTEsNiArMTM5MiwyMiBAQCBsb2FkZXIgd3JpdGVycy4KPiA+ICBAZW5kIG1l bnUKPiA+Cj4gPgo+ID4gK0Bub2RlIEMgc3RydWN0dXJlIGFsaWdubWVudCBhbmQgcGFkZGluZyBj b25zaWRlcmF0aW9uCj4gPiArQHNlY3Rpb24gQyBzdHJ1Y3R1cmUgYWxpZ25tZW50IGFuZCBwYWRk aW5nIGNvbnNpZGVyYXRpb24KPiA+ICsKPiA+ICtNYW55IEMgY29tcGlsZXJzIHRyeSB0byBvcHRp bWl6ZSBtZW1vcnkgYWNjZXNzZXMgYWxpZ25pbmcgc3RydWN0dXJlCj4KPiAiYnkgYWxpZ25pbmci Cj4KPiA+ICttZW1iZXJzIHByb3Blcmx5LiBVc3VhbGx5IHRoZXkgcmVhY2ggdGhlIGdvYWwgYnkg YWRkaW5nIHNvbWUgcGFkZGluZy4KPgo+IFdoYXQgZG9lcyAicHJvcGVybHkiIG1lYW4gaGVyZT8g IFRoZSBkZWZhdWx0IHBhZGRpbmcgd2lsbCBiZSBzcGVjaWZpZWQKPiBieSB0aGUgZGVmYXVsdCBB QkkgdGhlIGNvbXBpbGVyIGNvbmZvcm1zIHRvLgoKUmlnaHQuIEkgZG8gbm90IHdhbnQgdG8gZ28g aW50byB0aGUgZGV0YWlscyBpbiB0aGlzIHNlY3Rpb24gYW5kIGR1cGxpY2F0ZQphbnl0aGluZyB3 aGljaCBpcyBtdWNoIGJldHRlciBkZXNjcmliZWQgc29tZXdoZXJlIGVsc2UuIFNvLCB0aGF0IGlz IHdoeQpJIHVzZSAicHJvcGVybHkiIGhlcmUuIEhvd2V2ZXIsIGlmIHlvdSB0aGluayB0aGF0IGl0 IGNhbiBiZSBwaHJhc2VkCmJldHRlciB0aGVuIGRyb3AgbWUgYSBsaW5lLgoKPiA+ICtUaGlzIGlz IHZlcnkgdXNlZnVsIHRoaW5nIGluIGdlbmVyYWwuIEhvd2V2ZXIsIGlmIHlvdSB0cnkgdG8gbWl4 IGFzc2VtYmxlcgo+ID4gK3dpdGggQyBvciB1c2UgQyB0byBpbXBsZW1lbnQgc3RydWN0dXJlIGxv dyBsZXZlbCBhY2Nlc3MgdGhpcyBiZWhhdmlvcgo+ID4gK21heSBsZWFkLCBhdCBsZWFzdCwgdG8g cXVpdGUgc3VycHJpc2luZyByZXN1bHRzLiBIZW5jZSwgY29tcGlsZXIgc2hvdWxkCj4gPiArYmUg aW5zdHJ1Y3RlZCB0byBub3Qgb3B0aW1pemUgc3VjaCBhY2Nlc3Nlcy4gVXN1YWxseSBpdCBpcyBk b25lIGJ5IHNwZWNpYWwKPiA+ICthdHRyaWJ1dGUgYWRkZWQgdG8gc3RydWN0dXJlIGRlZmluaXRp b24sIGUuZy4gR0NDIGNvbXBhdGlibGUgc291cmNlcyB1c2UKPiA+ICtAc2FtcHtfX2F0dHJpYnV0 ZV9fICgoX19wYWNrZWRfXykpfSBmb3IgdGhpcyBwdXJwb3NlLiBIb3dldmVyLCB0aGlzIGlzIG5v dAo+ID4gK3JlcXVpcmVkIGlmIGl0IGlzIGtub3duIHRoYXQgaXRzIG1lbWJlcnMgYXJlIHByb3Bl cmx5IGFsaWduZWQgYW5kIGNvbXBpbGVyCj4gPiArZG9lcyBub3QgZG8gYW55IG9wdGltaXphdGlv bi4gVmVyeSBnb29kIGV4YW1wbGUgb2YgdGhpcyBpcyBzaG93biBiZWxvdyBpbgo+ID4gK0BmaWxl e211bHRpYm9vdDIuaH0gZmlsZS4KPgo+IEkgYW0gbm90IHN1cmUgd2hhdCB5b3UgYXJlIHRyeWlu ZyB0byBzYXkuCgpEbyB5b3UgcmVmZXIgdG8gd2hvbGUgcGFyYWdyYXBoIG9yIGxhc3Qgc2VudGVu Y2U/CgpJbiBnZW5lcmFsIEkgd291bGQgbGlrZSB0byBzYXkgdGhhdCBndXlzIHNob3VsZCBwYXkg YXR0ZW50aW9uIHRvIHByb3Blcgp1c2FnZSBvZiBzdHJ1Y3QgY29uc3RydWN0IGluIEMgYW5kIGJl IGF3YXJlIHRoYXQgYmFkIHRoaW5ncyBtYXkgaGFwcGVuIHdoZW4KdGhleSBpbnRyb2R1Y2UgbmV3 IHRhZ3Mgc3RydWN0cyB3aXRob3V0IF9fcGFja2VkX18gYXR0cmlidXRlLiBIb3dldmVyLCB0aGV5 CmFsc28gc2hvdWxkIGJlIGF3YXJlIHRoYXQgX19wYWNrZWRfXyBpcyBub3QgYWx3YXlzIHJlcXVp cmVkLiBBbmQgdGFnIHN0cnVjdHMKaW4gbXVsdGlib290Mi5oIGZpbGUgZG9lcyBub3QgY29udGFp biBfX3BhY2tlZF9fIGF0dHJpYnV0ZSBiZWNhdXNlIHRoZXkgYXJlCmJ1aWxkIGluIHByb3BlciB3 YXkuIEkgaG9wZSB0aGF0IGhlbHBzLgoKRGFuaWVsCgpfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBs aXN0cy54ZW4ub3JnCmh0dHA6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo= From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from list by lists.gnu.org with archive (Exim 4.71) id 1bBQhV-0005Dm-9Y for mharc-grub-devel@gnu.org; Fri, 10 Jun 2016 13:58:33 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:60203) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bBQhS-00054M-Iz for grub-devel@gnu.org; Fri, 10 Jun 2016 13:58:31 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bBQhN-0004K3-Kl for grub-devel@gnu.org; Fri, 10 Jun 2016 13:58:29 -0400 Received: from aserp1040.oracle.com ([141.146.126.69]:49814) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bBQhN-0004Jv-Bv for grub-devel@gnu.org; Fri, 10 Jun 2016 13:58:25 -0400 Received: from userv0022.oracle.com (userv0022.oracle.com [156.151.31.74]) by aserp1040.oracle.com (Sentrion-MTA-4.3.2/Sentrion-MTA-4.3.2) with ESMTP id u5AHwFvO013838 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 10 Jun 2016 17:58:15 GMT Received: from userv0122.oracle.com (userv0122.oracle.com [156.151.31.75]) by userv0022.oracle.com (8.14.4/8.13.8) with ESMTP id u5AHwE0r025666 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 10 Jun 2016 17:58:14 GMT Received: from abhmp0014.oracle.com (abhmp0014.oracle.com [141.146.116.20]) by userv0122.oracle.com (8.14.4/8.14.4) with ESMTP id u5AHwDEN005973; Fri, 10 Jun 2016 17:58:14 GMT Received: from olila.local.net-space.pl (/10.175.176.23) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Fri, 10 Jun 2016 10:58:13 -0700 Date: Fri, 10 Jun 2016 19:58:08 +0200 From: Daniel Kiper To: Andrew Cooper Cc: grub-devel@gnu.org, xen-devel@lists.xenproject.org, arvidjaar@gmail.com, eric.snowberg@oracle.com, jgross@suse.com, konrad.wilk@oracle.com, phcoder@gmail.com, seth.goldberg@oracle.com Subject: Re: [MULTIBOOT2 DOC PATCH 08/10] multiboot2: Add C structure alignment and padding consideration section Message-ID: <20160610175808.GF5490@olila.local.net-space.pl> References: <1465504244-17175-1-git-send-email-daniel.kiper@oracle.com> <1465504244-17175-9-git-send-email-daniel.kiper@oracle.com> <1c1e54de-2f19-20b6-b8c8-229619b95038@citrix.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1c1e54de-2f19-20b6-b8c8-229619b95038@citrix.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Source-IP: userv0022.oracle.com [156.151.31.74] X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.4.x-2.6.x [generic] X-Received-From: 141.146.126.69 X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: The development of GNU GRUB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 10 Jun 2016 17:58:31 -0000 On Thu, Jun 09, 2016 at 11:07:12PM +0100, Andrew Cooper wrote: > On 09/06/2016 21:30, Daniel Kiper wrote: > > Signed-off-by: Daniel Kiper > > --- > > doc/multiboot.texi | 17 +++++++++++++++++ > > 1 file changed, 17 insertions(+) > > > > diff --git a/doc/multiboot.texi b/doc/multiboot.texi > > index c81b2ea..bf02a1b 100644 > > --- a/doc/multiboot.texi > > +++ b/doc/multiboot.texi > > @@ -1384,6 +1384,7 @@ document, but are included for prospective operating system and boot > > loader writers. > > > > @menu > > +* C structure alignment and padding consideration:: > > * Notes on PC:: > > * BIOS device mapping techniques:: > > * Example OS code:: > > @@ -1391,6 +1392,22 @@ loader writers. > > @end menu > > > > > > +@node C structure alignment and padding consideration > > +@section C structure alignment and padding consideration > > + > > +Many C compilers try to optimize memory accesses aligning structure > > "by aligning" > > > +members properly. Usually they reach the goal by adding some padding. > > What does "properly" mean here? The default padding will be specified > by the default ABI the compiler conforms to. Right. I do not want to go into the details in this section and duplicate anything which is much better described somewhere else. So, that is why I use "properly" here. However, if you think that it can be phrased better then drop me a line. > > +This is very useful thing in general. However, if you try to mix assembler > > +with C or use C to implement structure low level access this behavior > > +may lead, at least, to quite surprising results. Hence, compiler should > > +be instructed to not optimize such accesses. Usually it is done by special > > +attribute added to structure definition, e.g. GCC compatible sources use > > +@samp{__attribute__ ((__packed__))} for this purpose. However, this is not > > +required if it is known that its members are properly aligned and compiler > > +does not do any optimization. Very good example of this is shown below in > > +@file{multiboot2.h} file. > > I am not sure what you are trying to say. Do you refer to whole paragraph or last sentence? In general I would like to say that guys should pay attention to proper usage of struct construct in C and be aware that bad things may happen when they introduce new tags structs without __packed__ attribute. However, they also should be aware that __packed__ is not always required. And tag structs in multiboot2.h file does not contain __packed__ attribute because they are build in proper way. I hope that helps. Daniel