Skip site navigation (1)Skip section navigation (2)
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>