Jee*_*ang 5 llvm clang inline-assembly
在Clang或LLVM中,如何正确声明引用CPU寄存器的外部变量?例如,我想表达以下声明(如https://github.com/mit-pdos/xv6-public/blob/master/proc.h#L27):
extern struct cpu *cpu asm("%gs:0"); // &cpus[cpunum()]
extern struct proc *proc asm("%gs:4"); // cpus[cpunum()].proc
Run Code Online (Sandbox Code Playgroud)
看来上面的代码是编译的,但没有以预期的方式链接.我将xv6移植到Rust,作为踏脚石,我将它移植到Clang 3.8.0(而不是GCC).但在构建期间,链接器发出以下错误消息:
ld -m elf_i386 -T kernel.ld -o kernel entry.o bio.o console.o exec.o file.o fs.o ide.o ioapic.o kalloc.o kbd.o lapic.o log.o main.o mp.o picirq.o pipe.o proc.o sleeplock.o spinlock.o string.o swtch.o syscall.o sysfile.o sysproc.o timer.o trapasm.o trap.o uart.o vectors.o vm.o -b binary initcode entryother
console.o: In function `panic':
.../console.c:114: undefined reference to `%gs:0'
Run Code Online (Sandbox Code Playgroud)