LKML Archive on lore.kernel.org
help / color / mirror / Atom feed
From: "Phil Endecott" <phil_arcwk_endecott@chezphil.org>
To: "Jan Blunck" <jblunck@suse.de>
Cc: <linux-kernel@vger.kernel.org>
Subject: Re: Subtleties of __attribute__((packed))
Date: Wed, 06 Dec 2006 15:22:38 +0000	[thread overview]
Message-ID: <1165418558832@dmwebmail.belize.chezphil.org> (raw)
In-Reply-To: <4de7f8a60612060704k7d7c1ea3o1d43bee6c5e372d4@mail.gmail.com>

Jan Blunck wrote:
> On 12/6/06, Phil Endecott <phil_arcwk_endecott@chezphil.org> wrote:
>> I used to think that this:
>>
>> struct foo {
>>    int a  __attribute__((packed));
>>    char b __attribute__((packed));
>>    ... more fields, all packed ...
>> };
>>
>> was exactly the same as this:
>>
>> struct foo {
>>    int a;
>>    char b;
>>    ... more fields ...
>> } __attribute__((packed));
>>
>> but it is not, in a subtle way.
>>
>
> The same code is generated. [...]

I don't think so.  Example:

struct test {
   int a __attribute__((packed));
   int b __attribute__((packed));
};

char c = 1;
struct test t = { .a=2, .b=3 };

$ arm-linux-gnu-gcc -O2 -S -W -Wall test1.c

	.file	"test2.c"
	.global	c
	.data
	.type	c, %object
	.size	c, 1
c:
	.byte	1
	.global	t
	.align	2               <<<<<<<<===== t is aligned
	.type	t, %object
	.size	t, 8
t:
	.word	2
	.word	3
	.ident	"GCC: (GNU) 4.1.2 20061028 (prerelease) (Debian 4.1.1-19)"


Compare with:

struct test {
   int a;
   int b;
} __attribute__((packed));

char c = 1;
struct test t = { .a=2, .b=3 };

$ arm-linux-gnu-gcc -O2 -S -W -Wall test2.c

	.file	"test1.c"
	.global	c
	.data
	.type	c, %object
	.size	c, 1
c:
	.byte	1
	.global	t                    <<<<<<  "align" has gone, t is unaligned
	.type	t, %object
	.size	t, 8
t:
	.4byte	2
	.4byte	3
	.ident	"GCC: (GNU) 4.1.2 20061028 (prerelease) (Debian 4.1.1-19)"



Phil.






  reply	other threads:[~2006-12-06 15:22 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-12-06 13:20 Subtleties of __attribute__((packed)) Phil Endecott
2006-12-06 14:01 ` Frederik Deweerdt
2006-12-06 14:24   ` Phil Endecott
2006-12-06 15:04 ` Jan Blunck
2006-12-06 15:22   ` Phil Endecott [this message]
2006-12-06 15:54     ` Jan Blunck
2006-12-06 16:02       ` Andreas Schwab
2006-12-06 16:41         ` Jan Blunck
2006-12-06 17:28           ` Andreas Schwab
2006-12-06 16:13       ` Phil Endecott
2006-12-06 16:26         ` Jan Blunck
2006-12-06 17:54       ` Russell King
2006-12-06 18:05         ` David Miller
2006-12-07  9:48         ` Jan Blunck
2006-12-07 10:30           ` Andreas Schwab

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1165418558832@dmwebmail.belize.chezphil.org \
    --to=phil_arcwk_endecott@chezphil.org \
    --cc=jblunck@suse.de \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).