linux-2.6.25/__CRC_SYMBOL()
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
*参照元 [#tc694da8]
#backlinks
*説明 [#d98596fe]
-パス: [[linux-2.6.25/include/linux/module.h]]
-モジュールのバージョン管理をサポートするため、
関数や変数の CRC 値(バージョンとして使う)を入れるシンボ...
--CRC はコンパイル時に計算されるようだが、詳細は不明です。
--バージョン情報テーブルの先頭要素は __start___kcrctab と...
**引数 [#y452095b]
-sym
--CRC を計算する対象となるシンボルを指定する。
-sec
--セクションに追記する文字列を指定する。
**返り値 [#p5e6d7e0]
-なし
**参考 [#gb0a2eee]
#ifndef __GENKSYMS__
-__GENKSYMS__ が宣言されていないときに有効である。
--[[linux-2.6.25/__GENKSYMS__]]
*実装 [#nac1271b]
#ifdef CONFIG_MODVERSIONS
/* Mark the CRC weak since genksyms apparently decides n...
* generate a checksums for some symbols */
#define __CRC_SYMBOL(sym, sec) ...
extern void *__crc_##sym __attribute__((weak)); ...
-CRC を格納するシンボルを宣言する。
--weak シンボルとして宣言する。
--## はトークン連結演算子で、トークン同士を繋いで一つのト...
(例: __CRC_SYMBOL(hoge, "") なら __crc_hoge となる)
static const unsigned long __kcrctab_##sym ...
-CRC 格納用の変数を宣言する。
__used ...
-最適化で消されないようにする。「未使用の変数/関数です」...
--古い gcc 用に使う。
__attribute__((section("__kcrctab" sec), unused)...
-セクション __kcrctab に入れる。
--
--__attribute__( (unused) ) なのは __attribute__( (used) ...
古い gcc のため(gcc < 3.4)らしい。
= (unsigned long) &__crc_##sym;
-__crc_##sym へのポインタを __kcrctab_##sym と言う
名前で__kcrctab セクション(CRC 用のシンボルテーブル)に...
-このセクションを見れば CRC 値を入れた変数へのポインタが...
--セクションを探してくる関数、セクションからバージョンを...
--[[linux-2.6.25/find_sec()]]
--[[linux-2.6.25/symversion()]]
#else
#define __CRC_SYMBOL(sym, sec)
-CONFIG_MODVERSIONS が宣言されていない場合は何もしない。
--このマクロはカーネルのコンフィグで module versioning を...
宣言される。
#endif
*コメント [#p94a1c5a]
終了行:
*参照元 [#tc694da8]
#backlinks
*説明 [#d98596fe]
-パス: [[linux-2.6.25/include/linux/module.h]]
-モジュールのバージョン管理をサポートするため、
関数や変数の CRC 値(バージョンとして使う)を入れるシンボ...
--CRC はコンパイル時に計算されるようだが、詳細は不明です。
--バージョン情報テーブルの先頭要素は __start___kcrctab と...
**引数 [#y452095b]
-sym
--CRC を計算する対象となるシンボルを指定する。
-sec
--セクションに追記する文字列を指定する。
**返り値 [#p5e6d7e0]
-なし
**参考 [#gb0a2eee]
#ifndef __GENKSYMS__
-__GENKSYMS__ が宣言されていないときに有効である。
--[[linux-2.6.25/__GENKSYMS__]]
*実装 [#nac1271b]
#ifdef CONFIG_MODVERSIONS
/* Mark the CRC weak since genksyms apparently decides n...
* generate a checksums for some symbols */
#define __CRC_SYMBOL(sym, sec) ...
extern void *__crc_##sym __attribute__((weak)); ...
-CRC を格納するシンボルを宣言する。
--weak シンボルとして宣言する。
--## はトークン連結演算子で、トークン同士を繋いで一つのト...
(例: __CRC_SYMBOL(hoge, "") なら __crc_hoge となる)
static const unsigned long __kcrctab_##sym ...
-CRC 格納用の変数を宣言する。
__used ...
-最適化で消されないようにする。「未使用の変数/関数です」...
--古い gcc 用に使う。
__attribute__((section("__kcrctab" sec), unused)...
-セクション __kcrctab に入れる。
--
--__attribute__( (unused) ) なのは __attribute__( (used) ...
古い gcc のため(gcc < 3.4)らしい。
= (unsigned long) &__crc_##sym;
-__crc_##sym へのポインタを __kcrctab_##sym と言う
名前で__kcrctab セクション(CRC 用のシンボルテーブル)に...
-このセクションを見れば CRC 値を入れた変数へのポインタが...
--セクションを探してくる関数、セクションからバージョンを...
--[[linux-2.6.25/find_sec()]]
--[[linux-2.6.25/symversion()]]
#else
#define __CRC_SYMBOL(sym, sec)
-CONFIG_MODVERSIONS が宣言されていない場合は何もしない。
--このマクロはカーネルのコンフィグで module versioning を...
宣言される。
#endif
*コメント [#p94a1c5a]
ページ名: