[lkml]   [2004]   [Jun]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    SubjectRe: drivers/block/ub.c
    On Mon, Jun 28, 2004 at 02:03:43PM -0700, David S. Miller wrote:
    > You have not considered what is supposed to happen when this
    > structure is embedded within another one. What kind of alignment
    > rules apply in that case? For example:
    > struct foo {
    > u32 x;
    > u8 y;
    > u16 z;
    > } __attribute__((__packed__));
    > struct bar {
    > u8 a;
    > struct foo b;
    > };

    As long as bar is not packed, why shouldn't the beginning of bar.b be

    If you did it the other way around, and had bar packed but foo not
    (or if both had nopadding specified), that would be a problem, and
    should probably at least generate a warning (if not an error) if you
    take the address of the inner struct.

    However, doing something like that is already broken; if you use a
    pointer to the inner struct rather than going through the base, GCC
    will use normal loads and stores to unaligned data, without even a
    warning. Fixing that, other than by disallowing it, would likely
    require making unalignedness a pointer qualifier.

    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to
    More majordomo info at
    Please read the FAQ at

     \ /
      Last update: 2005-03-22 14:04    [W:0.021 / U:0.716 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site