svn commit: r211023 - head/usr.sbin/syslogd
M. Warner Losh
imp at bsdimp.com
Tue Aug 10 20:28:55 UTC 2010
In message: <201008101956.o7AJu5ms044774 at haluter.fromme.com>
Oliver Fromme <olli at fromme.com> writes:
:
: M. Warner Losh wrote:
: > /*
: > * Macros to cast a struct sockaddr, or parts thereof. struct
: > * sockaddr's alginment is loose to later be cast to a sockaddr_in or
: > * sockaddr_in6. On architectures with strict alignment requirements,
: > * this leads to compiler warnings because the compiler doesn't know
: > * the ABI guarantees proper alignment.
: > */
: >
: > But this leads me to think that the right fix might be:
: >
: > /*
: > * Structure used by kernel to store most
: > * addresses.
: > */
: > struct sockaddr {
: > unsigned char sa_len; /* total length */
: > sa_family_t sa_family; /* address family */
: > char sa_data[14]; /* actually longer; address value */
: > } __aligned(4);
: >
: > since that's what the ABI defines....
:
: Yes, that would solve most of the problems, at least the ones
: related to struct sockaddr.
:
: Can we make that change to struct sockaddr, or does it cause
: unwanted side-effects?
:
: I could do a full "make universe" to test it, but it would
: probably take two days on my 9-current machine.
Just do it on MIPS.
You'll find that a number of structures are potentially already
allocated with less than required alignment. There's about a dozen
places in the tree that would start to fail if we did this, or the
stronger form of __aligned(8). We could add that to the other
structures, but then we're breaking ABI rules, I think.
Warner
More information about the svn-src-all
mailing list