linuxのメモ

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

メモリ割り当て - __memset()

概要

任意の大きさのメモリを初期化する

詳細

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

  • 初期化するメモリのアドレスを示す : s(rdiレジスタ)
  • 初期化する値のアドレスを示す : c(rsiレジスタ)
  • 初期化するメモリの大きさを示す : count(rdxレジスタ)

レジスタへの割付は関数の呼出規約に従うものとする

CONFIG_X86_32の値によって以下のように処理が異なる

  • 有効(32bitモード)
  • 無効
    • ALTERNATIVE_2()memset_orig()をオリジナルの命令とし、新規に挿入する命令に空文字とmemset_erms()を指定して実行することで、CPUの機能が有効な場合はいづれかの命令に置き換える
    • 空の命令が選択された場合は、ret命令が実行されないため、このコード内に記述されている以下の処理を実行する