Messages in this thread |  | | Date | Thu, 15 Feb 2007 15:38:23 -0800 | From | Andrew Morton <> | Subject | Re: [PATCH] Optimize generic get_unaligned / put_unaligned implementations. |
| |
On Thu, 15 Feb 2007 22:18:39 +0000 Ralf Baechle <ralf@linux-mips.org> wrote:
> On Thu, Feb 15, 2007 at 01:53:58PM -0800, Andrew Morton wrote: > > > > The whole union thing was only needed to get rid of a warning but Marcel's > > > solution does the same thing by attaching the packed keyword to the entire > > > structure instead, so this patch is now using his macros but using __packed > > > instead. > > > > How do we know this trick will work as-designed across all versions of gcc > > and icc (at least) and for all architectures and for all sets of compiler > > options? > > > > Basically, it has to be guaranteed by a C standard. Is it? > > Gcc info page says: > > [...] > `packed' > The `packed' attribute specifies that a variable or structure field > should have the smallest possible alignment--one byte for a > variable, and one bit for a field, unless you specify a larger > value with the `aligned' attribute. > [...] >
hm. So if I have
struct bar { unsigned long b; } __attribute__((packed));
struct foo { unsigned long u; struct bar b; };
then the compiler can see that foo.b.b is well-aligned, regardless of the packedness.
Plus some crazy people compile the kernel with icc (or at least they used to). What happens there?
> Qed?
worried. - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
|  |