2.0.0-1.6 (2021年6月18日)
スタンドアロンのユーザー・スペース実装の6番目のエラータ。
これは、機能が制限されたプレリリースです。
新機能:
-
プローブ・プログラムの実装に使用されるBPFプログラムのより大きいサイズに対応するために、命令オフセットが4桁の値として出力されます。
-
文字列定数をD節の値として使用でき、変数が文字列値を保持できます。文字列データを保持する組込み変数を変数に代入して、式の値およびアクション引数として使用できます。
-
trace()アクションは文字列をサポートします。
-
strlen()サブルーチンが実装されました。
-
組込み変数probeprov、probemod、probefunc、probename、caller、stackdepth、ucaller、ustackdepth、errnoおよびwalltimestampがサポートされるようになりました。
-
アクションstack()、ustack()、umod()、usym()およびuaddr()が実装されました。
バグ修正:
-
グローバル変数およびローカル変数のストレージ・サイズが必ずしも正しく設定されておらず、データが破損していました。変数が明示的に宣言されていない場合、最初に使用されるまでそのデータ型がわからない場合があります。ストレージ・サイズが、常に変数の明示的または検出されたデータ型に基づいて設定されるようになりました。
-
組込み変数は、特定の変数ID範囲内でグローバル変数として実装されます。この値はグローバル変数記憶域に格納されないため、記憶域オフセットがありません。逆アセンブリ出力内の変数リストは、オフセットとして-1を出力していました。組込み変数のこのオフセットは出力されなくなります。
-
ERRORプローブに関連するメモリー・リークが修正されました。
-
64ビット・データ項目の再配置が、下位32ビットに切り詰められていました。これは修正済です。
-
集積体にデータを格納することは、データ記録アクションとみなされていました。これにより、データが実際にプローブ出力バッファに格納されない節について、コンシューマがプローブの起動を報告していました。この動作は意図したものではありませんでした。集積データ生成は、データ記録アクションではなくなりました。
内部変更:
-
グローバル変数とローカル変数が、サイズとアライメントの要件を考慮することで、より効率的に格納されるようになりました。
-
プローブ記述(id、プロバイダ名、モジュール名、関数名およびプローブ名)がprobes BPFマップに格納されるようになりました。値は、文字列定数テーブルにオフセットされます。
-
文字列定数表は、キー0のシングルトン要素の値としてstrtab BPFマップにロードされます。
-
文字列ハッシュ値の計算が、必要なすべてのコードから呼び出される単一の関数に統合されました。
-
可変長整数のサポートが追加されました。これは主に、文字列の長さを文字ストリームに合わせて格納するために使用されます。
-
メモリー・コピー関数(プリコンパイル済Cコードとして実装され、BPFにコンパイル)が最適化され、さらに堅牢になりました。
テストスイートの変更:
-
新機能の実装に対応し、いくつかのバグ修正を考慮して、様々なテストがXFAILからPASSステータスに移動されました。
-
様々なテストが改善されました。
既知の問題点:
-
メモリー・コピーの実装の制限により、256バイトを超えるデータ型の値の代入は現在機能しません。
-
特定の最大文字列サイズを設定するDTraceオプションはコマンドライン・ツールによって受け入れられますが、256バイトを超える設定は正しく機能しません。
-
-Zオプション(使用可能なプローブに一致しない節を許可)では、節を登録して、後でプローブが使用可能になったときに有効にすることはできません。