ラズベリーパイ用のおもちゃのOSを書いていて、xv6を参考にしています。
別のファイル (C) で定義されている「entrypgdir」シンボルをロードしようとすると、コードにコンパイル エラーが発生します。
_start.S:
#include "mem.h"
.globl entry
entry:
mov r0, #(V2P_NOCAST(entrypgdir))
V2P_NOCAST は、.h ファイルで次のように定義された単純なマクロです。
mem.h:
#define V2P_NOCAST(va) ((va) - KERNBASE)
そしてエラー:
$ arm-none-eabi-gcc -c -o build/_start.o source/_start.S
source/_start.S: Assembler messages:
source/_start.S:17: Error: undefined symbol entrypgdir used as an immediate value
xv6がそうやってるから気になる
movl $(V2P_WO(entrypgdir)), %eax
そして、それはうまくコンパイルされ、
$ gcc -m32 -c -o entry.o entry.S
それは私のツールチェーンに何かありますか?それともARMでは不可能ですか?