lkml.org 
[lkml]   [2004]   [Jun]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    SubjectRE: drivers/block/ub.c
    Date
    The below makes no sense to me...  Nothing in the definition of struct bar{} (which
    is not packed) infers (top me) in the slightest that foo should be unnaturally
    aligned within it.

    Just because foo is internally un-aligned, it doesn't become a god-like dirty finger
    to with which to corrupt external entities. If you want bar.b packed up against
    bar.a then bar should be __packed__ also.

    Given the alignment rules for _empty_ structures as members of structures, why would
    a non-empty structure that is packed be less stringently aligned than an empty one
    that isn’t?

    Perhaps I am naïve.


    -----Original Message-----
    From: linux-kernel-owner@vger.kernel.org [mailto:linux-kernel-owner@vger.kernel.org]
    On Behalf Of David S. Miller
    Sent: Monday, June 28, 2004 2:04 PM
    To: Oliver Neukum
    Cc: scott@timesys.com; zaitcev@redhat.com; greg@kroah.com; arjanv@redhat.com;
    jgarzik@redhat.com; tburke@redhat.com; linux-kernel@vger.kernel.org;
    stern@rowland.harvard.edu; mdharm-usb@one-eyed-alien.net; david-b@pacbell.net
    Subject: Re: drivers/block/ub.c

    On Mon, 28 Jun 2004 22:57:11 +0200
    Oliver Neukum <oliver@neukum.org> wrote:

    > Am Montag, 28. Juni 2004 22:25 schrieb David S. Miller:
    > > That's true.  But if one were to propose such a feature to the gcc
    > > guys, I know the first question they would ask.  "If no padding of
    > > the structure is needed, why are you specifying this new
    > > __nopadding__ attribute?"
    >
    > It would replace some uses of __packed__, where the first element
    > is aligned.

    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;
    };

    That is why __packed__ can't assume the alignment of any structure
    instance whatsoever. Your __nopadding__ attribute proposal would
    lay out struct bar differently in order to meet the alignment guarentees
    you say it will be able to meet.
    -
    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/



    -
    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/

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