Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 24 Oct 2012 22:55:54 +0200
From:      Andre Oppermann <andre@freebsd.org>
To:        attilio@FreeBSD.org
Cc:        svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org, Jim Harris <jim.harris@gmail.com>, John Baldwin <jhb@freebsd.org>
Subject:   Re: svn commit: r242014 - head/sys/kern
Message-ID:  <508855DA.1080903@freebsd.org>
In-Reply-To: <CAJ-FndBH2cjF2ukt4373BwMsoWEeLykBhPQNnXUgpJ=4jd3LJg@mail.gmail.com>
References:  <201210241836.q9OIafqo073002@svn.freebsd.org> <201210241443.25988.jhb@freebsd.org> <CAJP=Hc9wLv02sX%2BWnzZtaKccSAFzqg8jT0oP13nLw1jMfwOEBQ@mail.gmail.com> <CAJ-FndDzBdq8q6J7QKqf=abi_702s_ia=pa3XbBv80rxbGb-SA@mail.gmail.com> <50884E9F.3090706@freebsd.org> <CAJ-FndBH2cjF2ukt4373BwMsoWEeLykBhPQNnXUgpJ=4jd3LJg@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On 24.10.2012 22:29, Attilio Rao wrote:
> On Wed, Oct 24, 2012 at 9:25 PM, Andre Oppermann <andre@freebsd.org> wrote:
>> On 24.10.2012 21:06, Attilio Rao wrote:
>>> As I've already said in another thread __align() doesn't work on
>>> object declaration, so what that won't pad it either if it is global
>>> or part of a struct.
>>> It is just implemented as __attribute__((aligned(X))):
>>> http://gcc.gnu.org/onlinedocs/gcc-3.2/gcc/Type-Attributes.html
>>
>>
>> Actually it seems gcc itself doesn't really care and it up to the
>> linker to honor that.
>
> Yes but the concept being that if you use __aligned() properly (when
> defining a struct) the object will be correctly sized, so you will get
> padding automatically.

Yes.  With __aligned() the start of the element/structure should
begin on an address evenly dividable by the align value *and* it
should pad out any remaining space up to the next evenly dividable
address.

The problem we have is that is apparently doesn't work correctly
within gcc when creating structs nor within the linker when placing
such supposedly aligned structs in the .bss section (at least the
padding is missing).

It seems to come down to either a) fixing gcc+ld; or b) hacking
around it by magically padding the structs that require it.

-- 
Andre




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?508855DA.1080903>