我想使用 cpuid 指令来识别 Intel CPU 的功能。我在 Kernel.framework 中找到了 cpuid.h 标头,因此我将 Kernel.framework 添加到我的项目中并包含<Kernel/i386/cpuid.h>
在我的源文件中。那产生了
kern/kern_types.h: No such file or directory
我不明白。但是do_cpuid
我认为我想要使用的函数是内联定义的,所以我尝试将它复制到我的源代码中。
static inline void
do_cpuid(uint32_t selector, uint32_t *data)
{
asm("cpuid"
: "=a" (data[0]),
"=b" (data[1]),
"=c" (data[2]),
"=d" (data[3])
: "a"(selector));
}
这给了我错误:
error: can't find a register in class 'BREG' while reloading 'asm'
error: 'asm' operand has impossible constraints
谷歌搜索该错误使我想到了这个问题:Mac 上的问题:“在重新加载 asm 时找不到 BREG 类中的寄存器”
但是该问题的解决方案是使用 dynamic-no-pic 选项(GCC_DYNAMIC_NO_PIC
构建设置),并且 Xcode 对构建设置的帮助说“不适合共享库(需要与位置无关)。” 我正在构建一个框架,我认为它算是一个共享库。那么我怎样才能使这项工作呢?