funcs[-adehou] |
|
|
func ... |
funcs[-adehilou] |
[directly] |
|
|
funcs[-adehlou] |
[directly] |
called by |
func ... |
funcs[-adehlou] |
[directly] |
calling |
func ... |
funcs[-adehlou] |
[directly] |
reading |
var .... |
funcs[-adehlou] |
[directly] |
writing |
var ... |
funcs[-adehlou] |
[directly] |
accessing |
var ... |
funcs[-adehlou] |
[directly] |
affecting |
lock ... |
funcs[-adehlou] |
[directly] |
inverting |
lock ... |
funcs は、読み込まれたファイル中で定義され、呼び出される関数についての情報をリストします。各関数について 1 行分の情報が表示されます。
表 A-7 funcs のオプション
オプション |
定義 |
|
---|---|---|
-a |
(asserts) assert サブコマンドの設定内容に従って、各関数のエントリに対してどのロックが保持されることになっているかに関する情報を提示します。アサーションは以下のように表示されます。 asserts={ lock ... } read_asserts={ lock ... } エントリに対して整合性が保持されていないロック名の前には、アスタリクが付けられます (解析後)。 |
|
-e |
(effects) 各関数がロックに持つ副作用についての情報を提示します (たとえば、"acquires mutex lock foo" など)。副作用は以下のように表示されます。 side_effects={ effect [, effect] ... } 解析に先だってこのオプションを使用すると、 assert side effect サブコマンドによってアサートされた副作用も提示されます。解析後には、解析中に発見された副作用についての情報も提示されます。 |
|
-d |
(defined) 読み込まれたファイル中で定義されている関数のみを提示します。未定義の関数の表示は抑制されます。 |
|
-h |
(held) (解析後) 関数が呼び出された際に、どのロックが整合性を保持されていたかについての情報を提示します。エントリの読み取り (または書き込み) に対してロックが整合性を保持されている場合、以下のように表示されます。 held={ lock ... }+{ lock ... } read_held={ lock ... }+{ lock ... } 各セットの最初の行は、関数呼び出し時に整合性を保持されるロックのリストで、2 行目は整合性を保持されるないロック (関数が呼び出し時、保持されていることはあっても、つねに保持されるわけではないロック) のリストです。 |
|
-i |
(ignored) 無視される関数をリストします。 |
|
-l |
(long) -aeoh に相当します。 |
|
-o |
(other) 各関数に関する以下の情報を提示します (該当する場合)。 |
|
=ignored |
ロック lint は、ignore サブコマンドを使って関数を無視するよう指示されています。 |
|
=nonreturning |
この関数を介した呼び出しは戻ってきません (ターゲットとなる関数のいずれも戻りません)。 |
|
=rooted |
declare root サブコマンドによって、関数がルート化されています。 |
|
=root |
関数がもともとルートです (ほかの関数から呼び出されることがありません)。 |
|
=recursive |
関数が自分自身を呼び出します。 |
|
=unanalyzed |
解析中に、関数が呼び出されませんでした (そのため、解析が行われませんでした)。foo が bar を呼び出し、bar が foo を呼び出し、foo または bar を呼び出す関数はほかになく、いずれもルート化されていない (「=rooted」を参照) 場合で、=root とは異なります。つまり、foo および bar はルートではなく、ほかのいかなるルート関数からもたどり着くことができないため、これらの関数は解析されることはありません。 |
|
calls=# |
読み込まれたファイルの内容そのままに、ソースコード中、この関数が呼び出されている箇所の数を示します。実際には解析されない呼び出しもあります。たとえば、disallow サブコマンドによって、実際には呼び出しが行われないこともあります。 |
|
-u |
(undefined) 読み込まれたファイル中に定義されていない関数のみを提示します。 |
個々の関数に関する情報をリストします。デフォルトでは、この形式のサブコマンドは、-aeho が指定されている場合と同様に、関数についての詳細情報をすべて提供します。
無視されないすべての関数についての情報をリストします。-i が使用されると、無視される関数もリストされます。
指定された関数の呼び出しの結果として呼び出される可能性のある関数のみをリストします。directly が指定されると、指定された関数によって呼び出される関数のみがリストされます。directly が指定されない場合は、呼び出された関数がさらに呼び出している関数もリストされます。
自身が呼び出されると、その結果として、指定された 1 つまたは複数の関数を呼び出す可能性のある関数のみをリストします。この後の「directly について」の項も参照してください。
自身が呼び出されると、その結果として、指定された 1 つまたは複数の関数が読み込まれる可能性のある関数のみをリストします。この後の「directly について」の項も参照してください。
自身が呼び出されると、その結果として、指定された 1 つまたは複数の変数が書き込まれる可能性のある関数のみをリストします。この後の「directly について」の項も参照してください。
自身が呼び出されると、その結果として、指定された 1 つまたは複数の変数がアクセスされる (読み取られるまたは書き込まれる) 可能性のある関数のみをリストします。この後の「directly について」の項も参照してください。
自身が呼び出されると、その結果として、指定された 1 つまたは複数のロックに影響 (獲得、解放、昇格、または降格) を与える可能性のある関数のみをリストします。この後の「directly について」の項も参照してください。
指定された 1 つまたは複数のロックを反転させる関数のみをリストします (「ロックの逆転」を参照)。directly が指定されると、自身が 1 つまたは複数のロックを反転させている (実際には解放する) 関数のみがリストされます。directly が指定されない場合は、すでに保持されたロックとともに呼び出され、その後、そのロックを反転させるほかの関数を呼び出す関数もリストされます。
たとえば、以下のコードでは、f3() はロック m を直接反転し、f2() はそれを間接的に反転しています。
f1() { pthread_mutex_unlock(&m); f2(); pthread_mutex_lock(&m); } f2() { f3(); } f3() { pthread_mutex_unlock(&m); pthread_mutex_lock(&m); }
特にことわり書きがない限り、キーワード directly を許可する形式は、それ自身が記述に一致する関数のみをリストします。directly が指定されない場合は、指定された関数を呼び出すすべての関数が表示され、さらにそれらの関数を呼び出す関数もリストされます。