J'essaie de créer un programme qui communique avec un système embarqué 32 bits, qui fonctionne sur une machine x86_64 basée sur Linux (hôte). Sur le programme hôte, j'ai une structure contenant quelques pointeurs qui reflète une structure identique sur le système embarqué.
Le problème est que sur l'hôte, les pointeurs sont nativement de 64 bits, de sorte que l'offset des membres de la structure n'est pas le même que dans le système embarqué. Ainsi, lors de la copie de la structure (comme memcpy), le contenu se retrouve au mauvais endroit dans la copie de l'hôte.
struct {
float a;
float b;
float *p;
float *q;
} mailbox;
// sizeof(mailbox) is 4*4=16 on the embedded, but 2*4+2*8=24 on the host
Heureusement, j'ai trouvé aquí que gcc dispose d'une option -mx32
pour générer des pointeurs 32 bits sur les machines x86_64. Mais en essayant de l'utiliser, j'obtiens une erreur disant :
$ gcc -mx32 test.c -o test.e
cc1: error: unrecognized command line option "-mx32"
Ceci est valable pour les versions de gcc 4.4.3 y 4.7.0 20120120 (expérimental) .
Pourquoi cette option ne fonctionne-t-elle pas ? Existe-t-il un moyen de contourner ce problème ?
EDIT : Selon le Manuel v4.4.7 il n'y avait pas d'option -mx32 disponible, et ceci est vrai jusqu'à v4.6.3 . D'AUTRE PART, v4.7.0 montre cette option, il se peut donc que la version Jan-20 que j'utilise ne soit pas la version finale !