Architectures with strict alignment?

Mike Meyer mwm-keyword-freebsdhackers2.e313df at mired.org
Sun Dec 30 20:18:17 PST 2007


On Sun, 30 Dec 2007 20:37:18 +0100 Bernd Walter <ticso at cicely12.cicely.de> wrote:
> 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.

Actually, network data is the most common case where the programmer
has to ask for byte-specific control of the layout. As far as I know,
the proper way to do this is to declare the struct properly - with a
compiler-dependent request for packing - then read the data into
that. If you could be reading more than one type of struct into it,
then set up the appropriate unions for all of them. In either case,
the compiler should DTRT.

But it sounds like this people just read raw bytes, and then
disassembled them by hand, which I would say qualifies as "crappy
software."

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

That seems to be common: if something doesn't matter on their
platform, programmers tend not to worry about it. I saw plenty of
evidence of that as Unix moved from 16 bit systems to 32 bit ones, and
again as it went to 64 bits (though not quite so bad).

      Thanks,
      <mike
-- 
Mike Meyer <mwm at mired.org>		http://www.mired.org/consulting.html
Independent Network/Unix/Perforce consultant, email for more information.


More information about the freebsd-hackers mailing list