我正在为我的树莓派编写一个玩具操作系统,并使用xv6作为参考。
当我尝试加载在另一个文件(在 C 中)中定义的“entrypgdir”符号时,我的代码出现编译错误。
_start.S:
#include "mem.h"
.globl entry
entry:
mov r0, #(V2P_NOCAST(entrypgdir))
V2P_NOCAST 是一个在 .h 文件中定义为的简单宏
内存.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中不可能?