cpuid 命令を使用して Intel CPU の機能を識別したいと考えています。Kernel.framework で cpuid.h ヘッダーを見つけたので、Kernel.framework をプロジェクトに追加<Kernel/i386/cpuid.h>
し、ソース ファイルに含めました。それが生み出した
kern/kern_types.h: No such file or directory
わかりません。しかし、do_cpuid
私が使いたいと思う function はインラインで定義されているので、それをソースにコピーしてみました。
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 のヘルプには、「(位置に依存しない必要がある) 共有ライブラリには適していません」と記載されています。私はフレームワークを構築していますが、これは共有ライブラリとして数えられると思います。では、どうすればこれを機能させることができますか?