Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 18 Feb 2009 08:21:03 -0700 (MST)
From:      "M. Warner Losh" <imp@bsdimp.com>
To:        andrew-freebsd@areilly.bpc-users.org
Cc:        mips@FreeBSD.org, tinderbox@FreeBSD.org, current@FreeBSD.org
Subject:   Re: [head tinderbox] failure on mips/mips
Message-ID:  <20090218.082103.-761055997.imp@bsdimp.com>
In-Reply-To: <20090218110402.GA13040@duncan.reilly.home>
References:  <20090217.203647.-1518647466.imp@bsdimp.com> <20090217.222152.-109416210.imp@bsdimp.com> <20090218110402.GA13040@duncan.reilly.home>

next in thread | previous in thread | raw e-mail | index | archive | help
In message: <20090218110402.GA13040@duncan.reilly.home>
            Andrew Reilly <andrew-freebsd@areilly.bpc-users.org> writes:
: On Tue, Feb 17, 2009 at 10:21:52PM -0700, M. Warner Losh wrote:
: > In message: <20090217.203647.-1518647466.imp@bsdimp.com>
: >             "M. Warner Losh" <imp@bsdimp.com> writes:
: > : In message: <20090218023328.227617302F@freebsd-current.sentex.ca>
: > :             FreeBSD Tinderbox <tinderbox@freebsd.org> writes:
: > : : /src/usr.sbin/bsnmpd/modules/snmp_mibII/../../../../contrib/bsnmp/snmp_mibII/mibII.c:1016: warning: cast increases required alignment of target type
: > The first one is:
: > 
: > 	  case RTM_IFINFO:
: > 		ifm = (struct if_msghdr *)rtm;
: > 		mib_extract_addrs(ifm->ifm_addrs, (u_char *)(ifm + 1), addrs);
: > 		if ((ifp = mib_find_if_sys(ifm->ifm_index)) == NULL)
: > 			break;
: > 
: > rtm is of type struct rt_msghdr.  This has an alignment requirement of
: > 4 on mips, at least on 32-bit mips (the biggest data element is a
: > u_long).  struct if_msghdr has an alignment requirement of 8, because
: > time_t is int64_t on MIPS, which is 8-bytes in size.
: 
: If the memory that rtm can be pointing to can be either a struct
: rt_msghdr or a struct if_msghdr, then shouldn't it really be
: pointing to a union of those two, and then the alignment will
: sort itself out?  (As far as I know, that's the only way that
: C99 will guarantee that the right thing happens anyway,
: otherwise strict aliasing analysis would allow much worse
: badness to happen, potentially.)

This is a stream of data from the kernel, multiple messages, so making
it be a union wouldn't force the proper alignment from the kernel...

: Not looked at the code myself.  Perhaps there's a reason why
: that would be unworkable.

Yes.  There is.

Warner



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20090218.082103.-761055997.imp>