Architectures with strict alignment?

Bernd Walter ticso at cicely12.cicely.de
Sun Dec 30 11:37:33 PST 2007


On Sun, Dec 30, 2007 at 01:55:06PM -0500, Mike Meyer wrote:
> On Sun, 30 Dec 2007 10:34:33 +0100 Bernd Walter <ticso at cicely12.cicely.de> wrote:
> > On Sat, Dec 29, 2007 at 11:37:27PM +0100, Dag-Erling Smørgrav wrote:
> > > Wilko Bulte <wb at freebie.xs4all.nl> writes:
> > > > In the past the alpha port had it too.
> > > 
> > > No, it was optional and defaulted to off.
> > 
> > It was never optional, since no alpha CPU can do missaligned access
> > Alphas can fix missaligned access by software trap handlers in the same
> > way as most other strong alignment architectures can and we did this
> > for userland, but not in kernel.
> 
> > Nevertheless it is horribly slow to do this, but was required since
> > there was so many crappy software that days - fortunately this has
> > changed over time, although I still see aligment traps on new software
> > as well.
> > Sadly said we never implemented missaligment traps for x86 so
> [...]
> 
> Ok, I'm a bit confused. Since you're talking about moving code from
> the x86 to the alpha, I'm assuming you're talking about C code. Isn't
> it the *compilers* job to enforce alignment issues, unless the
> programmer specifically asks for byte-specific control of the layout
> of a set of variables?

Not in every case.
It is not unusual to read raw bytes from e.g. network and use
a struct pointer to it.
But in case of network data it may be missaligned and if the struct
contains anything else then bytes you may be doing missaligned accesses.

> Or are these the issue, and the problem is that people do that and
> then don't use the appropriate APIs to pull data from them, thus
> causing you headaches?

No - they just don't think about alignment when parsing data from random
source.
A very tricky case are IP headers in ethernet bytes - the ethernet
header is not divideable by 4, but the IPs inside are 32 bit.
Not to speak about the payload, which might contain 32 bit values.
We have seen lots of missalignment bugs every now and then in ipfw,
but now ipfw is aligment save since years now.
I'm still not 100% sure if TCP NFS clients are save.
At least in FreeBSD 5.x it is not.

-- 
B.Walter                http://www.bwct.de      http://www.fizon.de
bernd at bwct.de           info at bwct.de            support at fizon.de


More information about the freebsd-hackers mailing list