linuxのメモ

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

準仮想化 - PVOP_CALL_ARGx()

概要

拡張インラインアセンブラで使用可能な引数を指定する命令を生成する

詳細

PVOP_CALL_ARG1、PVOP_CALL_ARG2、PVOP_CALL_ARG3、PVOP_CALL_ARG4のいずれかに該当し以下の処理を行う

引数の値をunsigned long型にキャストし、適切なレジスタに割り当てる拡張インラインアセンブの引数を示す命令を生成する

割り当てられるレジスタCONFIG_X86_32の値とxによって以下のように異なる

  • CONFIG_X86_32が有効
    • x = 1 : %eax
    • x = 2 : %edx
    • x = 3 : %ecx
    • x = 4 : 未定義
  • CONFIG_X86_32が無効 (CONFIG_X86_64が有効)
    • x = 1 : %edi
    • x = 2 : %esi
    • x = 3 : %edx
    • x = 4 : %ecx