LLVM中的外部注册声明

时间:2016-11-23 02:51:50

标签: clang llvm 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

上面的代码似乎已编译,但未按预期方式链接。我正在将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'

0 个答案:

没有答案