From: Russell King <rmk+lkml@arm.linux.org.uk>
To: Mikael Pettersson <mikpe@csd.uu.se>
Cc: linux-kernel@vger.kernel.org,
linux-usb-devel@lists.sourceforge.net, oliver@neukum.org
Subject: Re: need for packed attribute
Date: Thu, 12 Jan 2006 13:47:29 +0000 [thread overview]
Message-ID: <20060112134729.GB5700@flint.arm.linux.org.uk> (raw)
In-Reply-To: <200601121227.k0CCRCB8016162@alkaid.it.uu.se>
On Thu, Jan 12, 2006 at 01:27:12PM +0100, Mikael Pettersson wrote:
> On Fri, 6 Jan 2006 18:38:46 +0000, Russell King wrote:
> >> is there any architecture for which packed is required in structures like this:
> >>
> >> /* All standard descriptors have these 2 fields at the beginning */
> >> struct usb_descriptor_header {
> >> __u8 bLength;
> >> __u8 bDescriptorType;
> >> };
> >
> >sizeof(struct usb_descriptor_header) will be 4 on ARM.
>
> I found this surprising, but gcc-3.4.5 for ARM seems to agree with you.
>
> As fas as I can tell, the AAPCS document (v2.03 7th Oct 2005) requires
> that a simple "struct foo { unsigned char c; };" should have both size
> and alignment equal to 1, but gcc makes them both 4. Do you have any
> information about why gcc is doing this on ARM/Linux? Is there an accurate
> ABI document for ARM/Linux somewhere?
That's the new EABI, which is a major change to the existing ABI which
the kernel and all of userspace is currently built using.
The old ABI has it's roots in 1993 when the kernel and userland was
initially built using an ANSI C compiler, and the work being done to
port GCC was to make it compliant with that version of the ABI. This
ABI is documented only in dead-tree form.
Due to lack of manpower on the Linux side (iow, more or less just me)
this became the ABI of the early ARM Linux a.out toolchain. At that
time, I did not consider this to be a problem - it wasn't a problem
as far as the kernel was concerned.
When ELF came along, other folk worked on the toolchain, but they stuck
with that ABI - you could not transition between the a.out ABI to the
ELF ABI without breaking the kernel - structure layouts would change.
Hence, this is the existing ABI we have. Changing the padding or
alignment of structures changes the kernel ABI, making it incompatible
with current userland.
We're working on a set of patches to bring ARM Linux to be compatible
with the new EABI (which you've found above). This involves adding a
compatibility layer to the kernel to convert structures between the
old layouts and the new layouts.
I'm sure you can appreciate the size of this problem given the issues
with running 32-bit apps on 64-bit machines - it's the same kind of
issue.
--
Russell King
Linux kernel 2.6 ARM Linux - http://www.arm.linux.org.uk/
maintainer of: 2.6 Serial core
next prev parent reply other threads:[~2006-01-12 13:47 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-01-12 12:27 need for packed attribute Mikael Pettersson
2006-01-12 13:47 ` Russell King [this message]
2006-01-12 13:53 ` Russell King
2006-01-12 16:30 ` Mikael Pettersson
2006-01-12 16:46 ` Russell King
2006-01-12 17:22 ` [linux-usb-devel] " David Vrabel
2006-01-12 17:34 ` Russell King
2006-01-12 17:20 ` Pete Zaitcev
2006-01-12 17:26 ` Russell King
2006-01-12 17:36 ` Pete Zaitcev
2006-01-12 19:35 ` [linux-usb-devel] " David Brownell
-- strict thread matches above, loose matches on Subject: below --
2006-01-06 18:15 Oliver Neukum
2006-01-06 18:38 ` Russell King
2006-01-12 18:32 ` Benjamin LaHaise
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=20060112134729.GB5700@flint.arm.linux.org.uk \
--to=rmk+lkml@arm.linux.org.uk \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-usb-devel@lists.sourceforge.net \
--cc=mikpe@csd.uu.se \
--cc=oliver@neukum.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