kexec-tools-2.0.1 and CFLAGS

Magnus Damm magnus.damm at gmail.com
Wed Aug 26 03:56:49 EDT 2009


Hi Simon!

On Wed, Aug 26, 2009 at 3:31 PM, Simon Horman<horms at verge.net.au> wrote:
> On Thu, Aug 20, 2009 at 10:14:19PM +0900, Magnus Damm wrote:
>> Kexec-tools 2.0.1 seems to build only with optimization enabled. If I
>> set CFLAGS before calling configure and remove the "-O2" then the code
>> won't link properly. I found it while cross compiling for SuperH, but
>> it's most likely an issue on other platforms as well. Have a look at
>> the "-O0" below:
>>
>>  $ AR=_ar CC=_gcc CFLAGS="-O0" LDFLAGS="-static" ./configure
>> --prefix=/ --host="sh3-linux" --without-zlib --without-xen

[snip]

>> This issue is most likely related to get_unaligned() and
>> put_unaligned() having bad_unaligned_access_length() in their default
>> case that never gets optimized away.
>>
>> Anyway, not very important. But at least you know now. =)
>
> Hi Magnus,
>
> I'm some what dubious about this, but it appears to be intentional that
> get_unaligned() doesn't exist:
>
> ---- From kexec/kexec.h ----
>
> /*
>  * This function doesn't actually exist.  The idea is that when someone
>  * uses the macros below with an unsupported size (datatype), the linker
>  * will alert us to the problem via an unresolved reference error.
>  */

Yes, I understand the purpose of the code and it makes sense. But the
data size in this case _is_ correct. The issue here seems to be that
the compiler is not optimizing away the default case reference unless
optimization is enabled. I'd suggest moving away from automatic type
size detection to have separate functions for each size. That would
make it possible to comple the code both with and without optimization
enabled.

Or may I'm misunderstanding the issue? =)

Cheers,

/ magnus



More information about the kexec mailing list