svn commit: r206424 - head/usr.bin/xlint/lint1

Roman Divacky rdivacky at freebsd.org
Sun Apr 11 09:26:30 UTC 2010


On Sun, Apr 11, 2010 at 07:16:12PM +1000, Bruce Evans wrote:
> On Fri, 9 Apr 2010, Roman Divacky wrote:
> 
> >Log:
> > Rename the ALIGN macro to LINT_ALIGN so it does not clash with 
> > machine/param.h
> >
> > Bump the alignment to 16bytes because lint1 memory allocator is used for
> > objects that require 16bytes alignment on amd64 (ie. val_t). This makes
> > lint1 work when compiled with compiler(s) that use SSE for memcpy on 
> > amd64.
> > (e.g. clang).
> 
> This seems to be mostly backwards.  xlint wants to use the system
> ALIGN(), since it has no way of knowing the correct alignment.  However,
> the system might not supply ALIGN(), so it provided its own
> probably-incorrect ALIGN() as a fallback.  FreeBSD has a system ALIGN()
> and it should have always been used.  xlint get the includes correct
> for this, though this is fragile.  However2, the system ALIGN() on
> amd64 doesn't know the correct alignment either (both essentially had
> 64 bits hard-coded).  Now xlint uses a different hard-coded alignment
> (128 bits).
 
so you suggest fixing the ALIGN on amd64? ie. to make it 128bit?

> For a non-backwards fix, you need to follow the comment in xlint which
> says ALIGN should go away [in xlint].  Other compilers might need a
> working system ALIGN() in other places.  I think only memory allocator
> in xlint needs a working ALIGN() (just 1 instance).  Perhaps the allocator
> should just use malloc().  The only other uses of ALIGN() are in getbound().
> These seem to be all completely wrong.  The all use ALIGN(1), where ALIGN()
> is the host or hard-coded ALIGN() which gives maximal alignment and 1 is
> the size of a char, where SALIGN(type), where SALIGN() is the source
> ALIGN() which gives the (usually non-maximal) alignment of a type and
> the `type' parameter must contain type info and not be just the size of
> the type (certainly not the size of another type) since types of the same
> size may have different alignment.  SALIGN() is much more impossible to
> write as a portable macro.

the xlint allocator uses malloc and builds upon it. fixing this wont be
trivial and I have no interest in it :(


More information about the svn-src-head mailing list