This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
How to stop gcc padding structs???
- To: gcc at gcc dot gnu dot org
- Subject: How to stop gcc padding structs???
- From: Grant Edwards <grante at visi dot com>
- Date: Sun, 28 Jan 2001 12:56:09 -0600
I'm again fighting with gcc trying (and failing) to get it to
stop putting padding bytes into structs. Has anybody figured
out how to prevent gcc from padding structs?
I ran into this problem before and gave up, finally having to
use hand-calculated constants instead of "sizeof (struct foo)"
in numerous places. For example, it's impossible to define an
Ethernet header structure that ends up having a size of 14
bytes!
In the following example, gcc insists that each of the "high"
structs occupies four bytes despite my putting a "packed"
attribute evryplace that doesn't generate a syntax warning.
$ arm-elf-gcc -v
Reading specs from /usr/local/lib/gcc-lib/arm-elf/2.95.2/specs
gcc version 2.95.2 19991024 (release)
typedef struct
{
volatile unsigned char data __attribute__((packed));
volatile unsigned char _xxx __attribute__((packed));
} high __attribute((packed));
typedef struct
{
high a __attribute__((packed));
high b __attribute__((packed));
high c __attribute__((packed));
} tDemo __attribute__((packed));
tDemo foo;
void *addr[] =
{
&foo,
&foo.a,
&foo.b,
&foo.c
};
testit: file format elf32-bigarm
Disassembly of section .data:
00008000 <addr>:
8000: 00008010
8004: 00008010
8008: 00008014
800c: 00008018
--
Grant Edwards
grante@visi.com