2016-03-11から1日間の記事一覧
概要 インラインアセンブラのオペランドを定義する 詳細 アセンブラのオペランドとして以下の名前と値を定義する 名前 値 [paravirt_clobber] 引数で取得した値を割り当てる
概要 インラインアセンブラのオペランドを定義する 詳細 アセンブラのオペランドとして以下の名前と値を定義する 名前 値 [paravirt_typenum] PARAVIRT_PATCH()で取得した値を割り当てる [paravirt_opptr] 引数で取得した値のアドレスを割り当てる
概要 paravirt_patch_template構造体のメンバを示すindexを取得する 詳細 offsetof()でparavirt_patch_template構造体のメンバのoffset値を取得し、この値をvoidのサイズで割ることで指定したメンバのindexを得る
概要 構造体に含まれるメンバのoffsetを取得する 詳細 __compiler_offsetof()が定義されている場合は__compiler_offsetof()を実行するが、未定義の場合は以下の処理で算出する 構造体をアドレス0から始まるポインタとして定義し、メンバ変数のアドレスを取得…
概要 構造体に含まれるメンバのoffsetを取得する 詳細 GCCのバージョンが4以上の場合に定義されるため、3以下の場合は未定義となる 定義される場合は__builtin_offsetof()のwrapperとなり、GCCに含まれる標準関数を実行する
概要 アセンブラ命令内で定義するデータのサイズを指定するための文字列を生成する 詳細 __ASM_SEL()を使用して、CONFIG_X86_32が有効な場合はlong、無効な場合はquadのサイズのデータを指定する文字列を生成する
概要 アセンブラ命令をアライメントするための文字列を生成する 詳細 __ASM_SEL()を使用して、CONFIG_X86_32が有効な場合は4bite、無効な場合は8biteのアライメントを指定する文字列を生成する
概要 CPUのアーキテクチャに応じて適切なアセンブラの文字列を生成する 詳細 CONFIG_X86_32が有効な場合は第一引数を、それ以外の場合は第二引数を__ASM_FORM()に渡して実行する
概要 引数の値を文字列に変換する 詳細 引数の値を文字列として前後に空白文字を連結した文字列を作る
概要 CPUの割込みを無効化する 詳細 アセンブラ命令のcli命令を実行し、CPUの割込み処理を無効化する
概要 物理アドレスを仮想アドレスに変換する 詳細 取得した物理アドレスを示す値にPAGE_OFFSETを加算して仮想アドレスに変換する PAGE_OFFSETから64TBのアドレス範囲は物理アドレスのマッピングを管理するアドレス空間になっているため、上記の操作で物理ア…
概要 物理アドレスを仮想アドレスに変換する 詳細 __va()マクロのwrapper
概要 アドレスの範囲がISAのアドレス範囲内にあるか確認する 詳細 開始アドレスと終了アドレスを引数として取得し、開始アドレスがISA_START_ADDRESSより大きく、終了アドレスがISA_END_ADDRESSより小さければ1を返し、それ以外の場合は0を返す