I was wondering if it's possible to emulate a big-endian behavior, for testing purpose?
via either windows or linux , mingw or gcc. Here's a sample of code which I would like the emulation to return big endian:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <limits.h>
#if CHAR_BIT != 8
#error "Unsupported char size for detecting endianness"
#endif
int main (void)
{
short int word = 0x0001;
char *byte = (char *) &word;
if (byte[0]) printf("little endian");
else printf("big endian");
return 0;
}
You can't switch endianes for testing purposes or anything like that. What you can do is, to install an emulator for a big-endian architecture and compile your program for the emulator. Here's one way, under:
http://people.debian.org/~aurel32/qemu/
are Debian disk images for all kinds of QEMU supported architectures. mips, sparc and arm are big-endian (do not download anything ending with -el). I'm using Debian Lenny for MIPS ( http://people.debian.org/~aurel32/qemu/mips/ ). Install QEMU for your platform, then follow the instructions on the MIPS-page to download a image and kernel file.
Now you can boot into a Debian 5 for MIPS right from your console. Login to you virtual machine, become super user (the password is "root") and install the C-compiler:
debian-mips:~# su -
debian-mips:~# apt-get update
debian-mips:~# apt-get install gcc
fire up an editor and enter your program:
debian-mips:~# pico foo.c
debian-mips:~# gcc foo.c
debian-mips:~# ./a.out
big endian
UPDATE (2021-07-27) Just want to add, for anyone reading this 11 years later, that using the multiarch privileged container in docker is an easier and faster way to get a testing setup. Getting a s390x (big endian) running is as easy as:
$ docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
$ docker run --rm -it s390x/ubuntu bash
Also, this works under Docker Desktop for Windows.
See https://github.com/multiarch/qemu-user-static for more infos.