Date: Tue, 28 Aug 2012 18:02:22 +0400 From: Andrey Zonov <zont@FreeBSD.org> To: Warner Losh <imp@bsdimp.com> Cc: freebsd-arch@freebsd.org Subject: Re: warning: cast increases required alignment of target type Message-ID: <503CCF6E.7080208@FreeBSD.org> In-Reply-To: <CDF0AE44-1CB2-42F7-BE60-DD2E4697A374@bsdimp.com> References: <503C8809.3050507@FreeBSD.org> <CDF0AE44-1CB2-42F7-BE60-DD2E4697A374@bsdimp.com>
next in thread | previous in thread | raw e-mail | index | archive | help
This is an OpenPGP/MIME signed message (RFC 2440 and 3156) --------------enigC0AA8BFED6D1E4FEBC86BF53 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable On 8/28/12 5:12 PM, Warner Losh wrote: >=20 > On Aug 28, 2012, at 2:57 AM, Andrey Zonov wrote: >=20 >> Hi, >> >> Does anyone know how to correctly fix this warning for >> arm/ia64/mips/sparc64? >> >> usr.bin/elf2aout/elf2aout.c: In function 'main': >> usr.bin/elf2aout/elf2aout.c:129: warning: cast increases required >> alignment of target type >> >> I found this explanation from bde, but still don't understand how to >> correctly fix this issue. >> >> ----------------------------------------------------------------------= -- >> r99799 | bde | 2002-07-11 22:06:09 +0400 (Thu, 11 Jul 2002) | 10 lines= >> >> 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. >> >> Is this fix correct? >=20 > No. You need to tell the compiler that e has the alignment you think i= t has so that it can check to make sure that you are actually right. Jus= t casting like this defeats the purpose of the check and will break on ot= her architectures. >=20 > Warner >=20 What do you say about this one? 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 *)(e + phoff); bzero(&a, sizeof(a)); for (i =3D 0; i < phnum; i++) { type =3D xe32toh(p[i].p_type); I can build elf2aout without warnings on amd64 in 'buildenv' for all targets. >> 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 >> Andrey Zonov >> >=20 --=20 Andrey Zonov --------------enigC0AA8BFED6D1E4FEBC86BF53 Content-Type: application/pgp-signature; name="signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG/MacGPG2 v2.0.18 (Darwin) Comment: GPGTools - http://gpgtools.org iQEcBAEBAgAGBQJQPM9wAAoJEBWLemxX/CvTx3YH/RMywLzQHvj1Q4gjdmElavnh v11NF5TNplZxMB5RR/7cY202Jw3GOIV4Jeei1ElqNS1tmBjALtO0h1ROfaGbTGki C8Hb8L/U+Te0TZjI8VSpvv3CwmG99iZNjrxtrIg0RXRmWcAzb7su81eKqrmDhdWl r/YehA6gg4Y2ePWRL2Sq0DLJNMPwTwSjNxJZI82MzJAlBDJlqGSP/PDi+u1maIY6 k1LoNoVnb4MMoBRVZ/pa6KgD3BgSxumPCU5DOl9Nm2k3Xb61mmwBN1aiXrMjjSpJ 7MDvWRcpzU78b4cFNFLtWywTrdpZTEWr1fUPF5rMLcwMqPrVikky2VzHEInVDnQ= =DEZE -----END PGP SIGNATURE----- --------------enigC0AA8BFED6D1E4FEBC86BF53--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?503CCF6E.7080208>