Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 28 Aug 2012 07:31:51 -0600
From:      Warner Losh <imp@bsdimp.com>
To:        Konstantin Belousov <kostikbel@gmail.com>
Cc:        Andrey Zonov <zont@freebsd.org>, freebsd-arch@freebsd.org
Subject:   Re: warning: cast increases required alignment of target type
Message-ID:  <1B08245D-D467-48A5-B18C-9C8FF6823F6F@bsdimp.com>
In-Reply-To: <20120828132851.GN33100@deviant.kiev.zoral.com.ua>
References:  <503C8809.3050507@FreeBSD.org> <CDF0AE44-1CB2-42F7-BE60-DD2E4697A374@bsdimp.com> <20120828132851.GN33100@deviant.kiev.zoral.com.ua>

next in thread | previous in thread | raw e-mail | index | archive | help

On Aug 28, 2012, at 7:28 AM, Konstantin Belousov wrote:

> On Tue, Aug 28, 2012 at 07:12:15AM -0600, Warner Losh wrote:
>>=20
>> On Aug 28, 2012, at 2:57 AM, Andrey Zonov wrote:
>>=20
>>> 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?
>>=20
>> 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.
>=20
> Does compiler ever checks the alignment ? I thought that it is =
hardware that
> performs (transparent) checks, like elfags.AC bit on x86.

Yes. Hence the warning.  The hardware does *NOT* transparently fix =
misaligned accesses, which causes core dumps which is why this warning =
is in place.

> IMO hardware checks are good enough, since having program headers
> not aligned as required by ELF standard/ABI means that incoming ELF =
file
> is corrupted.

It is alignment in the source code.  Telling the compiler about these =
alignments is what I'm suggesting.

> Note that the same code is present in
> libexec/rtld-elf/map_object.c:map_object(), and there it might indeed
> make sense to introduce manual check for the alignment, to avoid hw
> triggering trap. Instead, rtld could gracefully refuse to load the
> mis-formed object.

In the rtld case, we should know if things are properly aligned or not =
as part of the ABI.  A check wouldn't hurt too much, but it is done at =
every program execution and too many sanity checks that are never =
happens can cause performance hits.

Warner=



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?1B08245D-D467-48A5-B18C-9C8FF6823F6F>