In message: <20090218110402.GA13040_at_duncan.reilly.home> Andrew Reilly <andrew-freebsd_at_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_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.) 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. WarnerReceived on Wed Feb 18 2009 - 14:22:20 UTC
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:39:42 UTC