linuxのメモ

Linux kernelの実装を解説していきます (対象ver 4.5)

準仮想化 - __PVOP_VCALL()

概要

準仮想環境下で実行される命令の置き換え、及び実行するための命令を生成する

詳細

このマクロでは以下の引数を受け取る

そして、以下の引数を____PVOP_VCALL()に渡して実行し、準仮想環境下で実行される命令を生成する

  • op
  • CLBR_ANY
    • 以下に示す全てのレジスタを使用することを示す
      • 32bitモード : %eax%ecx%edx%edi
      • 64bitモード : %[re]ax%[re]cx%[re]dx%[re]di%rsi%r8%r9%r10%r11
  • PVOP_VCALL_CLOBBERS
    • 出力引数として以下のレジスタを使用することを示す
      • 32bitモード : %eax%edx%ecx
      • 64bitモード : %edi%esi%edx%ecx
  • VEXTRA_CLOBBERS
    • 破壊レジスタとして指定される値で、以下のレジスタが指定される
      • 32bitモード : なし
      • 64bitモード : %rax%r8%r9%10%11
  • pre
  • post
  • 可変長引数が存在する場合は、それらも引数として渡す