Linuxベースのx86_64マシン(ホスト)で実行される32ビット組み込みシステムと通信するプログラムを構築しようとしています。ホストプログラムには、組み込みシステムの同じ構造を反映するいくつかのポインターを含む構造があります。
問題は、ホスト上でポインターがネイティブに64ビットであるため、構造体メンバーのオフセットが組み込みシステムの場合と同じではないことです。したがって、構造を(memcpyとして)コピーすると、コンテンツはホストコピーの間違った場所に配置されてしまいます。
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
幸いなことに、gccにはx86_64マシンで32ビットポインターを生成するためのオプションがあることがわかりました。-mx32
しかし、これを使おうとすると、次のようなエラーが発生します。
$ gcc -mx32 test.c -o test.e
cc1: error: unrecognized command line option "-mx32"
これは、gccバージョン4.4.3および4.7.0 20120120(実験的)用です。
このオプションが機能しないのはなぜですか?これを回避する方法はありますか?
編集:v4.4.7のマニュアルによると、利用可能な-mx32オプションはありませんでした。これは、v4.6.3まで当てはまります。OTOH、v4.7.0はそのオプションを示しているので、私が使用しているJan-20バージョンが最終バージョンではない可能性がありますか?!