linuxのメモ

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

error

エラー出力 - VIRTUAL_BUG_ON()

概要 例外を発生させ、エラーが発生したコードに関するデータを登録する 詳細 CONFIG_DEBUG_VIRTUALが無効な場合は何も実行しないが、有効な場合はBUG_ON()を実行する

エラー出力 - BUG_ON()

概要 例外を発生させ、エラーが発生したコードに関するデータを登録する 詳細 CONFIG_BUGが無効な場合は引数の値を評価するだけだが、有効な場合はunlikely()で引数の値を評価し、有効な値の場合にBUG()を実行する

エラー出力 - BUG()

概要 例外を発生させ、エラーが発生したコードに関するデータを登録する 詳細 アセンブラ命令ud2で例外を発生させ、unreachable()を実行するが、CONFIG_DEBUG_BUGVERBOSEが有効な場合は、pushsectionで_bug_tableセクションにstruct bug_entry構造体のデータ…

エラー出力 - BUILD_BUG_ON()

概要 コンパイル時にエラーを出力する 詳細 __CHECKER__と__OPTIMIZE__の値によって以下のように処理が異なる __CHECKER__が有効 何もしない __OPTIMIZE__が有効 ((void)sizeof(char[1 - 2*!!(condition)]))のコードにより、conditionが0以外の場合にコンパ…

エラー出力 - BUILD_BUG_ON_MSG()

概要 コンパイル時に任意のメッセージでエラーを出力する 詳細 このマクロでは以下の引数を受け取る 状態を示す : cond 表示するメッセージを示す : msg __CHECKER__が有効な場合は何も実行しないが、無効な場合はcompiletime_assert()にcondの否定した値とm…

エラー出力 - RB_WARN_ON()

概要 条件に一致した場合にwarningエラーを出力する 詳細 このマクロでは以下の引数を受け取る バッファを示す : b 比較する値や式を示す : cond unlikely()によりcondの比較結果が0である場合に高速に実行可能なコードを生成し、比較結果を一時変数に保持す…

エラー出力 - compiletime_assert_atomic_type()

概要 コンパイル時にエラーを表示するコードを挿入する 詳細 compiletime_assert()のconditionに__native_word()の値を、msgに"Need native word sized stores/loads for atomicity."の文字列を渡して実行することで、atomicに実行可能な型でない場合にエラ…

エラー出力 - compiletime_assert()

概要 コンパイル時にエラーを表示するコードを挿入する 詳細 _compiletime_assert()のprefixに__compiletime_assert__を、suffixにコードの行番号を指定して実行する

エラー出力 - __compiletime_assert()

概要 コンパイル時にエラーを表示するコードを挿入する 詳細 このマクロでは引数として以下の値を受け取る 実行時の状態を示す : condition エラーメッセージを示す : msg 実行する関数名のprefixを示す : prefix 実行する関数名のsuffixを示す : suffix pre…

エラー出力 - __compiletime_error_fallback()

概要 コンパイル時にエラーを検知する 詳細 __CHECKER__が無効な場合は何も実行しないが、有効でかつ引数の値が1の場合はコンパイル時にエラーとなる これは char[1 - 2 * condition] 上記のコードでconditionの値が正の数の場合char型の配列数が負数となる…

エラー出力 - _compiletime_assert()

概要 コンパイル時にエラーを表示するコードを挿入する 詳細 __compiletime_assert()のwrapperマクロ

エラー出力 - __bad_percpu_size()

概要 実行時エラーを検出するためのシンボル 詳細 extern宣言されているが、実態がソースコードのどこにも定義されていないシンボル extern宣言されているためプリプロセッサでは正常に処理することができるが、実行時にこの処理を実行しようとするとエラー…

エラー出力 - ____wrong_branch_error()

概要 実行時エラーを検出するためのシンボル 詳細 extern宣言されているが、実態がソースコードのどこにも定義されていないシンボル extern宣言されているためプリプロセッサでは正常に処理することができるが、実行時にこの処理を実行しようとするとエラー…

エラー出力 - error_putstr()

概要 エラーメッセージの出力に使用する 詳細 __putstr()マクロのwrapper

エラー出力 - error()

概要 エラーメッセージを表示してシステムを停止する 詳細 error_putstr()を実行して以下の文字列を出力した後、アセンブラのhlt命令によりシステムを停止する [message] -- System halted

エラー出力 - __compiletime_error()

概要 エラーメッセージを出力してシステムを停止する 詳細 引数として受け取ったメッセージをerror()に渡して実行するが、gccのバージョンが4.3以上の場合だけ機能するので、それ以下のバージョンやgcc以外のコンパイラを使用している場合は何もしない。 関…

エラー出力 - __x_wrong_size()

概要 エラーメッセージを出力してシステムを停止する 詳細 以下のいづれかの関数を表し、__compiletime_error()にBad argument size for _x_の文字列を引数として実行し、システムを停止する __xchg_wrong_size() __cmpxchg_wrong_size() __xadd_wrong_size()…

トレース - disable_trace_on_warning()

概要 warning error時にtraceを無効にする 詳細 __disable_trace_on_warningがtrueのときにtracing_off()を実行しtraceを無効にする

エラー出力 - warn_slowpath_null()

概要 ワーニングエラーを出力する 詳細 ファイル名と行数を引数として受け取り、warn_slowpath_common()を実行する。 warn_slowpath_common()の引数として以下の値を渡す。 取得したファイル名 取得した行数 呼び出し元のアドレス TAINT_WARN NULL

エラー出力 - WARN_ON()

概要 conditionがtrueの場合にwarningエラーを出力する 詳細 CONFIG_BUGの設定で挙動が変わる 無効な場合はエラー出力を行わない 有効な場合は__WARN()を実行する

エラー出力 - __WARN()

概要 ワーニングエラーを出力する 詳細 __WARN_TAINTが定義されている場合__WARN_TAINT()_マクロを実行するが、 x86では定義されていないため__FILE__・__LINE__を引数としてwarn_slowpath_null()関数を実行する

エラー出力 - WARN_ON_ONCE()

概要 conditionがtrueの場合にwarningエラーを一度だけ出力する 詳細 CONFIG_BUGの設定で挙動が変わる 無効な場合はエラー出力を行わない 有効な場合は、WARN_ON()マクロを一度だけ実行する このマクロ内でstaic変数に実行済みかどうかのフラグを持たせるこ…