Message ID | 1331757449-20873-1-git-send-email-stuart.yoder@freescale.com |
---|---|
State | New |
Headers | show |
Am 14.03.2012 21:37, schrieb Stuart Yoder: > From: Stuart Yoder <stuart.yoder@freescale.com> > > Remove the runtime check for endianness, and for platforms > that can be bit or little endian do a compile time check. > > This resolves an issue encountered building QEMU > under Yocto which was not setting --cross-prefix. > > Signed-off-by: Stuart Yoder <stuart.yoder@freescale.com> > --- > > -v2: removed the dynamic runtime test completely, > added compile time check for mips > > configure | 33 ++++++++------------------------- > 1 files changed, 8 insertions(+), 25 deletions(-) > > diff --git a/configure b/configure > index fe4fc4f..d9c5999 100755 > --- a/configure > +++ b/configure > @@ -1269,41 +1269,24 @@ feature_not_found() { > exit 1; > } > > -if test -z "$cross_prefix" ; then > - > -# --- > -# big/little endian test > -cat > $TMPC << EOF > -#include <inttypes.h> > -int main(int argc, char ** argv){ > - volatile uint32_t i=0x01234567; > - return (*((uint8_t*)(&i))) == 0x67; > -} > -EOF > - > -if compile_prog "" "" ; then > -$TMPE && bigendian="yes" > -else > -echo big/little test failed > -fi > - > -else > - > -# if cross compiling, cannot launch a program, so make a static guess > +########################################## > +# endianness check > case "$cpu" in > arm) > - # ARM can be either way; ask the compiler which one we are > if check_define __ARMEB__; then > bigendian=yes > fi > ;; > - hppa|m68k|mips|mips64|ppc|ppc64|s390|s390x|sparc|sparc64) > + mips|mips64) > + if check_define __MIPSEB__; then > + bigendian=yes > + fi > + ;; > + hppa|m68k|ppc|ppc64|s390|s390x|sparc|sparc64) > bigendian=yes > ;; > esac > > -fi > - > ########################################## > # NPTL probe > The patch fixes all issues which were addressed in the discussion, therefore Reviewed-by: Stefan Weil <sw@weilnetz.de> Nevertheless the old test which was removed still might be useful and could be re-added later in a modified form: Contrary to Paul's argument QEMU does not only support a fixed set of known host architectures, but also unknown hosts (via TCI). For those, there remains a small chance that they are big endian and that they get the wrong endianness now. TCI is still experimental, so I don't care too much about this small deficit. Regards, Stefan W.
On 14 March 2012 21:24, Stefan Weil <sw@weilnetz.de> wrote: > Contrary to Paul's argument QEMU does not only support a fixed > set of known host architectures, but also unknown hosts (via TCI). > For those, there remains a small chance that they are big endian > and that they get the wrong endianness now. TCI is still experimental, > so I don't care too much about this small deficit. (speaking with absolutely no idea of the innards of TCI :-)) I think the correct fix for this is that TCI should be portable code which doesn't care about the host endianness. -- PMM
Am 14.03.2012 22:37, schrieb Peter Maydell: > On 14 March 2012 21:24, Stefan Weil <sw@weilnetz.de> wrote: >> Contrary to Paul's argument QEMU does not only support a fixed >> set of known host architectures, but also unknown hosts (via TCI). >> For those, there remains a small chance that they are big endian >> and that they get the wrong endianness now. TCI is still experimental, >> so I don't care too much about this small deficit. > > (speaking with absolutely no idea of the innards of TCI :-)) > I think the correct fix for this is that TCI should be portable > code which doesn't care about the host endianness. > > -- PMM TCI does not care, but the rest of QEMU cares. That's why configure determines the endianness. Stefan
> Contrary to Paul's argument QEMU does not only support a fixed > set of known host architectures, but also unknown hosts (via TCI). > For those, there remains a small chance that they are big endian > and that they get the wrong endianness now. TCI is still experimental, > so I don't care too much about this small deficit. If you're compiling for a host that obscure, then there's a good chance you'll be cross-compiling anyway. I'd be amazed if there aren't other bits of qemu that require host-specific code. Paul
diff --git a/configure b/configure index fe4fc4f..d9c5999 100755 --- a/configure +++ b/configure @@ -1269,41 +1269,24 @@ feature_not_found() { exit 1; } -if test -z "$cross_prefix" ; then - -# --- -# big/little endian test -cat > $TMPC << EOF -#include <inttypes.h> -int main(int argc, char ** argv){ - volatile uint32_t i=0x01234567; - return (*((uint8_t*)(&i))) == 0x67; -} -EOF - -if compile_prog "" "" ; then -$TMPE && bigendian="yes" -else -echo big/little test failed -fi - -else - -# if cross compiling, cannot launch a program, so make a static guess +########################################## +# endianness check case "$cpu" in arm) - # ARM can be either way; ask the compiler which one we are if check_define __ARMEB__; then bigendian=yes fi ;; - hppa|m68k|mips|mips64|ppc|ppc64|s390|s390x|sparc|sparc64) + mips|mips64) + if check_define __MIPSEB__; then + bigendian=yes + fi + ;; + hppa|m68k|ppc|ppc64|s390|s390x|sparc|sparc64) bigendian=yes ;; esac -fi - ########################################## # NPTL probe