linuxのメモ

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

準仮想化 - __PVOP_CALLEESAVE()

概要

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

詳細

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

  • 取得する値の型を示す : rettype
  • 実行する命令が含まれる構造体 : op
  • 生成されるアセンブラ命令の前に実行する命令を示すアセンブラ命令の文字列 : pre
  • 生成されるアセンブラ命令の後に実行する命令を示すアセンブラ命令の文字列 : post

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

  • rettype
  • op.func
  • CLBR_RET_REG
    • 以下に示す全てのレジスタを使用することを示す
      • 32bitモード : %eax%edx
      • 64bitモード : %rax
  • PVOP_CALL_CLOBBERS
    • 出力引数として以下のレジスタを使用することを示す
      • 32bitモード : %eax%edx
      • 64bitモード : %eax
  • 破壊レジスタの指定は無し
  • pre
  • post
  • 可変長引数が存在する場合は、それらも引数として渡す