Date: Tue, 28 Aug 2012 18:10:31 +0400 From: Andrey Zonov <zont@FreeBSD.org> To: Konstantin Belousov <kostikbel@gmail.com> Cc: freebsd-arch@freebsd.org Subject: Re: warning: cast increases required alignment of target type Message-ID: <503CD157.50306@FreeBSD.org> In-Reply-To: <20120828140646.GP33100@deviant.kiev.zoral.com.ua> References: <503C8809.3050507@FreeBSD.org> <CDF0AE44-1CB2-42F7-BE60-DD2E4697A374@bsdimp.com> <503CCF6E.7080208@FreeBSD.org> <20120828140646.GP33100@deviant.kiev.zoral.com.ua>
next in thread | previous in thread | raw e-mail | index | archive | help
This is an OpenPGP/MIME signed message (RFC 2440 and 3156) --------------enigDDAEA3B6B075123B90F271DA Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable On 8/28/12 6:06 PM, Konstantin Belousov wrote: > On Tue, Aug 28, 2012 at 06:02:22PM +0400, Andrey Zonov wrote: >> On 8/28/12 5:12 PM, Warner Losh wrote: >>> >>> On Aug 28, 2012, at 2:57 AM, Andrey Zonov wrote: >>> >>>> 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 lin= es >>>> >>>> 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 warnin= g >>>> should be emitted on most machines (even on i386's, alignment checki= ng >>>> might be on) and the correct fix would involve validation phoff befo= re >>>> using it. >>>> >>>> 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. J= ust casting like this defeats the purpose of the check and will break on = other architectures. >>> >>> Warner >>> >> >> 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); > This is plain wrong. Pointer arithmetic steps over the object's > count, not the char count. You end up incrementing the pointer by > sizeof(Elf64_Ehdr) * phoff. >=20 Ooops, you are totally right. --=20 Andrey Zonov --------------enigDDAEA3B6B075123B90F271DA 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 iQEcBAEBAgAGBQJQPNFXAAoJEBWLemxX/CvTyNMH/07DQY9SEqLzWCicIpF5l8Lo 5S97NSBUee97EMaBeI+vs3oWNp2tpl8klcil6GKg5731rhfWG7uwMToV8wBZL1jW fo2xdyUZjV2WgEw0s88uBjXLGhjmYtGu5aMBqTDjeszF+at47IbdGjoAO754GYfe 90gNj8NZyJz9o2xBeyeh7jr8bLylx7OlW9FNLRp7cap1kE3kVe3SG4Uo3CPxdn0I AfZ2bBNhHq0IKBfF++YKMtqCQWTrFAxumUiBy/eNcgGo5LlYDX3g9Oqivm7oDiy8 KY4VIF0Fc/uNeojaKwLJOp2nRy157q9jIRJfYDcmv3oam3gJfEwFok15gFyStW4= =k3PF -----END PGP SIGNATURE----- --------------enigDDAEA3B6B075123B90F271DA--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?503CD157.50306>