[head tinderbox] failure on mips/mips

Andrew Reilly andrew-freebsd at areilly.bpc-users.org
Wed Feb 18 06:14:04 PST 2009


On Tue, Feb 17, 2009 at 10:21:52PM -0700, M. Warner Losh wrote:
> In message: <20090217.203647.-1518647466.imp at bsdimp.com>
>             "M. Warner Losh" <imp at bsdimp.com> writes:
> : In message: <20090218023328.227617302F at freebsd-current.sentex.ca>
> :             FreeBSD Tinderbox <tinderbox at 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.)

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

Cheers,

Andrew


More information about the freebsd-tinderbox mailing list