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オプション(使用可能なプローブに一致しない節を許可)では、節を登録して、後でプローブが使用可能になったときに有効にすることはできません。