2

私がインクルードしているヘッダー ファイル/usr/include/**/asm(失礼に?) は、単純な C 式を使用して、ベース値からのオフセットを表現します。つまり、次のようになります。

#define __NR_exit                       (__NR_SYSCALL_BASE+  1)

もちろん、#includeこれを.Sファイルに入れると、結果のプリプロセッサ生成の asm は次のようになります。

start.S|17| Error: garbage following instruction -- `ldr r7,=$(0+1)'

だから、クレイジーに聞こえるかもしれませんが、C プリプロセッサ (またはアセンブラ) がマクロを constexpr-evaluate して、実際に使用できるようにする必要があると思います+。これを行うには?

これはインライン asm ではなく、「アウト オブ ライン」.Sファイルであることに注意してください。

4

1 に答える 1

2

ああ、ドル記号が間違っていたからです。次のように変更した場合:

ldr r7,=__NR_exit

うまくコンパイルできたようです。as定数を期待する位置で基本的な算術式をサポートしていると思います。

于 2013-03-16T23:28:58.510 に答える