Date: Tue, 28 Aug 2012 07:12:15 -0600 From: Warner Losh <imp@bsdimp.com> To: Andrey Zonov <zont@FreeBSD.org> Cc: freebsd-arch@freebsd.org Subject: Re: warning: cast increases required alignment of target type Message-ID: <CDF0AE44-1CB2-42F7-BE60-DD2E4697A374@bsdimp.com> In-Reply-To: <503C8809.3050507@FreeBSD.org> References: <503C8809.3050507@FreeBSD.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Aug 28, 2012, at 2:57 AM, Andrey Zonov wrote: > Hi, >=20 > Does anyone know how to correctly fix this warning for > arm/ia64/mips/sparc64? >=20 > usr.bin/elf2aout/elf2aout.c: In function 'main': > usr.bin/elf2aout/elf2aout.c:129: warning: cast increases required > alignment of target type >=20 > I found this explanation from bde, but still don't understand how to > correctly fix this issue. >=20 > = ------------------------------------------------------------------------ > r99799 | bde | 2002-07-11 22:06:09 +0400 (Thu, 11 Jul 2002) | 10 lines >=20 > Set NO_WERROR to ignore the following warning which is emitted on > alphas: > .../elf2aout.c:130: warning: cast increases required alignment of > target type > The warning is about casting ((char *)e + phoff) to a struct pointer, > where e is aligned but phoff might be garbage, so I think the warning > should be emitted on most machines (even on i386's, alignment checking > might be on) and the correct fix would involve validation phoff before > using it. >=20 > Is this fix correct? No. You need to tell the compiler that e has the alignment you think it = has so that it can check to make sure that you are actually right. Just = casting like this defeats the purpose of the check and will break on = other architectures. Warner > Index: usr.bin/elf2aout/elf2aout.c > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > --- usr.bin/elf2aout/elf2aout.c (revision 239611) > +++ usr.bin/elf2aout/elf2aout.c (working copy) > @@ -126,7 +126,7 @@ > entry =3D xe64toh(e->e_entry); > phoff =3D xe64toh(e->e_phoff); > phnum =3D xe16toh(e->e_phnum); > - p =3D (Elf64_Phdr *)((char *)e + phoff); > + p =3D (Elf64_Phdr *)(void *)((char *)e + phoff); > bzero(&a, sizeof(a)); > for (i =3D 0; i < phnum; i++) { > type =3D xe32toh(p[i].p_type); >=20 >=20 > --=20 > Andrey Zonov >=20
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CDF0AE44-1CB2-42F7-BE60-DD2E4697A374>