LKML Archive on lore.kernel.org
help / color / mirror / Atom feed
From: Jan Blunck <jblunck@suse.de>
To: Phil Endecott <phil_arcwk_endecott@chezphil.org>
Cc: linux-kernel@vger.kernel.org
Subject: Re: Subtleties of __attribute__((packed))
Date: Wed, 6 Dec 2006 16:54:39 +0100 [thread overview]
Message-ID: <20061206155439.GA6727@hasse.suse.de> (raw)
In-Reply-To: <1165418558832@dmwebmail.belize.chezphil.org>
On Wed, Dec 06, Phil Endecott wrote:
> 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)"
>
Maybe the arm backend is somehow broken. AFAIK (and I verfied it on S390 and
i386) the alignment shouldn't change.
struct foo {
int a;
char b;
int c;
};
struct bar1 {
char a __attribute__((__packed__));
struct foo b __attribute__((__packed__));
};
struct bar2 {
char a;
struct foo b;
} __attribute__((__packed__));
struct bar3 {
char a;
struct foo b;
};
struct bar1 packed1 = { 10, { 20, 30, 40 } };
struct bar2 packed2 = { 50, { 60, 70, 80 } };
struct bar3 unpacked = { 90, { 100, 110, 120 } };
s390x-linux-gcc -S packed2.c:
packed2.c:9: warning: '__packed__' attribute ignored for field of type 'char'
.file "packed2.c"
.globl packed1
.data
.align 2
.type packed1, @object
.size packed1, 13
packed1:
.byte 10
.4byte 20
.byte 30
.zero 3
.4byte 40
.globl packed2
.align 2
.type packed2, @object
.size packed2, 13
packed2:
.byte 50
.4byte 60
.byte 70
.zero 3
.4byte 80
.globl unpacked
.align 4
.type unpacked, @object
.size unpacked, 16
unpacked:
.byte 90
.zero 3
.long 100
.byte 110
.zero 3
.long 120
.ident "GCC: (GNU) 4.1.2 20060531 (prerelease) (SUSE Linux)"
.section .note.GNU-stack,"",@progbits
next prev parent reply other threads:[~2006-12-06 15:54 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
2006-12-06 15:54 ` Jan Blunck [this message]
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=20061206155439.GA6727@hasse.suse.de \
--to=jblunck@suse.de \
--cc=linux-kernel@vger.kernel.org \
--cc=phil_arcwk_endecott@chezphil.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).