Pull Request on 2026年05月19日

dotnet/runtimeにマージされたPull RequestをAIで日本語要約

注意点

このページは、dotnet/runtimeリポジトリにマージされたPull Requestを自動的に収集し、その内容をAIが要約した内容を表示しています。そのため、必ずしも正確な要約ではない場合があります。


目次

  1. #128380 Lay out resumption stubs next to async method variants
  2. #128361 [browser] Skip boot json generation in nested publish
  3. #128359 Override ProcessOutputLine.ToString() to return Content
  4. #128348 [Wasm RyuJit] codegen for callfinally
  5. #128345 [release/10.0] Downgrade dotnet-optimization dependencies to LKG
  6. #128344 Add project exclusion for System.Text.Json tests
  7. #128341 [cDAC]: convert DacDbi GetRcwCachedInterfacePointers to EnumerateRcwCachedInterfacePointers and implement in cDAC
  8. #128317 [mono] Fix aot profiler buffer resizing
  9. #128307 Break apart gtFoldExprConst into a couple functions so its more manageable
  10. #128303 JIT: Canonicalize loop backedges to a single latch block
  11. #128300 Pre-size intermediate Dictionary in ToFrozenDictionary
  12. #128284 Release Android X509 chain certificate GREFs
  13. #128275 Fix R2R detected layout issues
  14. #128269 Reduce parallelism for composite crossgen2 for jit64_3 test
  15. #128256 [cDAC] Implement DacDbi API GetSymbolsBuffer
  16. #128244 improve accuracy of SslClientHelloInfo
  17. #128241 [cDAC] implement EnumerateInternalFrames and GetCountOfInternalFrames
  18. #128237 Fix R2Rdump for 32bit platforms, and print disassembly for wasm even when we can't load CoreDisTools
  19. #128214 Honor MarshalAs.IidParameterIndex for out object in source-generated COM stubs
  20. #128170 Add missing THUMB_BRANCH24 and ARM64_BRANCH26 to Relocation.GetSize
  21. #128149 Match jit behavior when converting float/double to u1/u2
  22. #128067 Fix NegotiateStream stale read buffer on mid-frame read failure
  23. #128049 [clr-ios] Skip XSLT API tests on Apple mobile CoreCLR via ConditionalClass
  24. #128001 [cDAC] Implement DacDbi APIs TypeHandleToExpandedTypeInfo and GetObjectExpandedTypeInfo
  25. #127838 Arm64: [PAC-RET] Jit Support
  26. #127683 Fix NotifyOfCHFFilter notification by advancing stackwalk iterator if in NATIVE_MARKER_FRAME state
  27. #127578 [android] Enable android-arm CoreCLR with softfp ABI handling
  28. #127573 [release/10.0] Redo GC heap size fix in heavily pinning scenarios
  29. #127497 [clr-ios] Enable Text.Json tests on CoreCLR Apple mobile
  30. #126552 [RyuJit] Remove the single-IG prolog restriction
  31. #125729 Pass Vector<T> by reference when InstructionSet_VectorT is available
  32. #123252 Use dispatch helper for calling interface methods

#128380 Lay out resumption stubs next to async method variants

概要

ARM32など大規模なコンポジット コンパイルで、async メソッドと resumation stub が離れすぎて reloc のオフセットが収まらなくなる問題を解決します。ReadyToRun (crossgen2) コード レイアウト時に resumation stub を対応する async メソッド直後に配置し、オフセットを小さく保つことで、reloc の失敗を防ぎ、iキャッシュの局所性を向上させます。

変更内容

  • MethodWithGCInfo.cs: async メソッドの resumation stub を同じメソッド直後に配置するソート順序ルールを実装
  • ReadyToRunReader.cs: [RESUME] プレフィックスを持つ resumation stub を単一ランタイム関数メソッドとして表現するよう修正
  • ReadyToRunTableManager.cs: DEBUG アサーションを緩和し、新しい resumation stub 隣接配置に対応
  • R2RResultChecker.cs: [ASYNC] メソッドとその [RESUME] stub が RVA 順で隣接していることを検証するテストを追加(99行追加)
  • R2RTestSuites.cs: runtime-async 検証スイートで新しい隣接性アサーションを実行

パフォーマンスへの影響

  • iキャッシュ局所性の改善により、わずかなパフォーマンス向上が期待される
  • ARM32 composite コンパイルで reloc オフセット問題による大距離 fixup を排除

関連Issue

なし

その他

このPRは ReadyToRun 関連の内部実装(コンパイラ・リフレクション)の変更であり、公開APIへの影響はありません。既存コンパイル済みアセンブリの互換性への影響もありません。


#128361 [browser] Skip boot json generation in nested publish

概要

WASM Browser SDK MSBuildターゲットにおいて、ネストされた発行(nested publish)時のboot JSON生成をスキップするための修正。ネストされた発行でVFSコンテンツエントリを含まないboot JSONが生成され、その後の外側のビルドでインクリメンタルビルドが誤作動してVFSコンテンツを含まないJSON状態のままになることでDirectoryNotFoundExceptionが発生していた問題を解決。

変更内容

  • Microsoft.NET.Sdk.WebAssembly.Browser.targets: _WriteBuildWasmBootJsonFileと_GenerateBuildWasmBootJsonターゲットにCondition="'$(WasmBuildingForNestedPublish)' != 'true'"を追加し、ネストされた発行時の実行をスキップ
  • コメントを拡張してネストされた発行時にこれらのターゲットをスキップする必要性を説明

パフォーマンスへの影響

影響なし

関連Issue

その他

この修正は公開APIの変更ではなく、内部的なMSBuildターゲット定義の修正。ネストされた発行プロセスの条件分岐を改善するもので、互換性への影響なし。


#128359 Override ProcessOutputLine.ToString() to return Content

概要

ProcessOutputLine.ToString() が型名を返していた問題を修正し、Content プロパティの内容を返すようにしました。これにより Console.WriteLine(line) などでの出力が期待通りになります。デフォルト初期化されたstruct の場合は string.Empty を返し、null を返さないようにしています。

await foreach (var line in process!.ReadAllLinesAsync())
{
    Console.WriteLine(line); // 型名ではなく実際の出力を表示
}

変更内容

  • ProcessOutputLine.cs: public override string ToString() => Content ?? string.Empty; を追加
  • System.Diagnostics.Process.cs (参照アセンブリ): ToString() override をAPI契約に追加
  • ProcessStreamingTests.cs: ToString() の動作を検証するユニットテストを追加(デフォルトstruct、一般的な入力パターンをカバー)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

この変更は Microsoft.Extensions.Primitives の StringSegment や StringValues と同じパターンに従っており、.NET公式ドキュメントの ToString() 仕様要件(null を返さないこと)を遵守しています。これはパブリックAPI(公開メンバー)の追加であり、既存コードとの互換性への影響はありません。


#128348 [Wasm RyuJit] codegen for callfinally

概要

WebAssembly RyuJIT コンパイラの finally ブロック呼び出しコード生成を実装しました。これまで未実装だった BBJ_CALLFINALLY ブロックの処理を、finally funclet への間接呼び出しを行う実装に置き換えています。finally が正常系で呼び出される必要がある場合に使用されます。

変更内容

  • src/coreclr/jit/codegenwasm.cpp: genCallFinally() メソッドの実装を追加(+31 行)
    • NYI_WASM スタブを実装に置き換え
    • finally funclet の WASM 関数シグネチャを構築(ポインタ引数 2 個、戻り値なし)
    • SP/FP ローカル変数と funclet アドレス定数をスタックに push
    • 間接呼び出しを発行
    • BBF_RETLESS_CALL フラグが設定されている場合は unreachable 命令を発行

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • WASM バックエンド上で finally ブロック処理が正式にサポートされるようになり、NYI(Not Yet Implemented)スタブが削除されました。
  • finally funclet への呼び出しに SP/FP をポインタ引数として渡す設計になっています。

#128345 [release/10.0] Downgrade dotnet-optimization dependencies to LKG

概要

.NET 10.0のリリースブランチにおいて、dotnet-optimizationの依存関係をLKG(Last Known Good)バージョンにダウングレードします。サービシングブランチではoptimizationデータパッケージが生成されないため、意図しない場所へbitが流れていた問題を解決します。ダウングレード対象は.NET 10.0.0で使用されていた安定版です。

変更内容

  • eng/Version.Details.props: dotnet-optimization依存関係バージョンを更新(6行変更)
  • eng/Version.Details.xml: 対応するXML設定を更新(12行変更)

パフォーマンスへの影響

影響なし

関連Issue

#127687

その他

  • リスクレベル: 低(.NET 10.0.0で既に検証されたデータの使用)
  • 対象ブランチ: release/10.0(サービシングブランチ)
  • 背景: 2月までoptimizationビルドが存在せず、optimizationリポジトリのチャネル割り当てが誤っていたため、意図しない場所への配布が発生していた

#128344 Add project exclusion for System.Text.Json tests

概要

System.Text.Jsonテストをプロジェクト除外対象に追加する変更です。outerloopsテストの実行を正常化するために必要な対応となります。

変更内容

  • src/libraries/tests.proj: System.Text.Jsonテストのプロジェクト除外設定を追加(3行追加)

パフォーマンスへの影響

影響なし

関連Issue

#128344

その他

ILC(Intermediate Language Compiler)関連チームへの通知が含まれています。


#128341 [cDAC]: convert DacDbi GetRcwCachedInterfacePointers to EnumerateRcwCachedInterfacePointers and implement in cDAC

  • 作成者: @Copilot
  • 作成日時: 2026年05月18日 22:04:39(UTC)
  • マージ日時: 2026年05月19日 22:41:37(UTC)
  • ラベル: area-Diagnostics-cdac

概要

DAC/DBI インターフェースの RCW キャッシュ済みインターフェースポインタ照会 API をコールバック ベースの列挙 API に変換します。GetRcwCachedInterfacePointers(配列を返す)からEnumerateRcwCachedInterfacePointers(コールバック型)に切り替え、cDAC 実装パスを追加します。

変更内容

  • IDL/インターフェース定義: GetRcwCachedInterfacePointersをEnumerateRcwCachedInterfacePointersに更新(dacdbi.idl、dacdbiinterface.h、IDacDbiInterface.cs)
  • ネイティブ DAC 実装: コールバックベースの RCW インターフェースポインタ列挙を実装(dacdbiimpl.cpp/h)
  • cDAC 実装: IBuiltInCOM.GetRCWInterfacesを使用した RCW インターフェースポインタ列挙を実装(DacDbiImpl.cs)
  • DI 側ユーティリティ: 再利用可能なCallbackAccumulator<T>ヘルパーを追加(rspriv.h)し、ヒープセグメント列挙と RCW インターフェースポインタ列挙に適用(process.cpp、divalue.cpp)
  • 既存コード削除: RCW ヘルパー関数をネイティブ実装から削除(runtimecallablewrapper.h)

パフォーマンスへの影響

影響なし。API をコールバックベースに変換することで、呼び出し側で必要なデータのみ収集可能になり、将来的なメモリ効率化の余地が生まれます。

関連Issue

なし

その他

  • 互換性: 内部 DAC/DBI インターフェース(非公開 API)の変更のため、外部への影響はありません
  • 設計: CallbackAccumulator<T>は列挙系 API 全般への適用が想定されており、コード再利用性が向上します

#128317 [mono] Fix aot profiler buffer resizing

  • 作成者: @BrzVlad
  • 作成日時: 2026年05月18日 10:53:00(UTC)
  • マージ日時: 2026年05月19日 04:30:34(UTC)
  • ラベル: area-VM-meta-mono

概要

Mono AOT プロファイラーのバッファリサイズ処理におけるバグを修正。必要なサイズが現在のサイズの2倍を超える場合、1回の倍化では不足するため、必要なサイズに達するまでループでバッファサイズを倍化する処理に変更しました。

変更内容

  • src/mono/mono/profiler/aot.c: バッファリサイズロジックを修正。必要なサイズを事前に計算し、new_len を必要な容量に達するまでループで倍化する処理を実装(+5/-1)。

パフォーマンスへの影響

影響なし(バグ修正のみ。リサイズが必要なシナリオで適切なメモリ確保を実現)

関連Issue

#128317

その他

内部実装の修正。Mono AOT プロファイラーの内部バッファ管理に関する変更で、公開APIへの影響はありません。


#128307 Break apart gtFoldExprConst into a couple functions so its more manageable

概要

JITコンパイラの定数畳み込み(constant folding)ロジックをリファクタリングし、巨大なgtFoldExprConstメソッドを複数の小さな専門化されたヘルパー関数に分割します。動作は変わらず(32ビットxarchの軽微な修正を除く)、コード可読性の向上とネイティブコンパイラのインライン最適化の改善を目指しています。

変更内容

  • src/coreclr/jit/compiler.h: 新しい定数畳み込みヘルパーメソッドの宣言を追加
  • src/coreclr/jit/gentree.cpp: 定数畳み込み実装をリファクタリング
    • gtFoldExprConstをunary、binary、type-specific(整数/長整数/浮動小数点)、bash/overflow処理用のヘルパー関数に分割
    • unaryおよびbinary定数畳み込みを新しい専門化されたヘルパーメソッド経由でルーティング

パフォーマンスへの影響

影響なし(zero-diffs を目指した変更)。ただし、ネイティブコンパイラが主要なコードパスのインライン化をより容易に行える可能性があります。

関連Issue

#128307

その他

このリファクタリングは将来的にgtFoldExprへのmorph処理からのfolding移行を予定しており、その際のコード理解を容易にするための準備作業です。


#128303 JIT: Canonicalize loop backedges to a single latch block

概要

JIT ループ正規化処理を拡張し、複数のバックエッジを持つ自然ループに対して単一の「ラッチ」ブロックを作成する機能を追加します。このラッチブロックはループヘッダーへの無条件分岐となり、すべてのバックエッジソースがここを経由するようにリダイレクトされます。これにより、ダウンストリーム最適化が単一の正規バックエッジ形状に依存できるようになります。

変更内容

  • src/coreclr/jit/optimizer.cpp: optCanonicalizeBackedges(FlowGraphNaturalLoop*) メソッドを新規実装。プリヘッダー作成後、終了正規化前に呼び出される新しい正規化フェーズを追加。複数バックエッジを持つループに対してラッチブロックを作成し、EH領域の合法性チェックを行いながらすべてのバックエッジをリダイレクト
  • src/coreclr/jit/compiler.h: optCanonicalizeBackedges メソッドの宣言を追加
  • src/coreclr/jit/fgdiagnostic.cpp: 診断情報の追加

パフォーマンスへの影響

影響なし(この変更はループ正規化の構造最適化であり、実行時パフォーマンスや既存の最適化パスに直接的な負荷をもたらさないため)

関連Issue

なし

その他

  • 内部実装の変更であり、公開APIへの影響なし
  • EH(例外処理)領域の合法性チェックが実装されており、堅牢性を考慮した設計

#128300 Pre-size intermediate Dictionary in ToFrozenDictionary

概要

ToFrozenDictionaryで中間Dictionary<,>を構築する際、ソースコレクションのカウント情報を利用して事前にサイズを設定することで、不要なリサイズと再ハッシュを削減します。これにより、ConcurrentDictionary<,>、SortedDictionary<,>、ImmutableDictionary<,>、ReadOnlyDictionary<,>、配列、List<KVP>などのソースからFrozenDictionaryを構築する際のパフォーマンスが向上します。

変更内容

  • FrozenDictionary.cs: 中間Dictionary<TKey, TValue>の構築時に、ソースコレクションがICollectionインターフェースを実装している場合、Countプロパティを利用して適切な初期容量を指定。これにより無駄なリサイズを回避します。
  • FrozenDictionaryTests.cs: 重複キーの"最後の値を採用"(Last-In-Wins)セマンティクスが事前サイズ設定後も保持されることを検証する回帰テストを追加。

パフォーマンスへの影響

改善: ソースコレクションが既知のサイズを報告できる場合、従来はlog2(N)回のリサイズと約2N回のリハッシュが発生していましたが、これらが排除されます。特に以下のシナリオで効果的です:

  • ConcurrentDictionary<,>、SortedDictionary<,>などのDictionary<,>以外のコレクション
  • LINQで生成される配列やList<KeyValuePair<,>>
  • ImmutableDictionary<,>、ReadOnlyDictionary<,>

具体的なベンチマーク数値は提供されていません。

関連Issue

なし

その他

  • この変更は容量設定のみで、Dictionary<,>の容量はAPI仕様において動作不変であるため、既存のMultipleValuesSameKey_LastInSourceWinsテストがforeach { d[k] = v; }の共有ロジックをカバーします。
  • 内部実装の最適化であり、公開APIへの変更や破壊的変更はありません。

#128284 Release Android X509 chain certificate GREFs

概要

Android の X509 チェーン PAL における JNI グローバルリファレンス(GREF)のメモリリークを修正します。AndroidCryptoNative_X509ChainGetCertificates が返すグローバルリファレンスが、マネージド証明書の構築後に解放されていなかったため、try/finally ブロックで確実に解放するようにしました。

変更内容

  • Interop.X509Chain.cs: AndroidCryptoNative_X509ChainGetCertificates の呼び出し処理に try/finally ブロックを追加し、マネージド X509Certificate2 オブジェクト構築後に元の JNI グローバルリファレンスを明示的に解放
  • PlatformDetection.cs: Android 環境判定用の補助変更
  • ChainTests.cs: リグレッションテスト BuildChainRepeatedly_DoesNotExhaustGlobalReferences を追加(OuterLoop、Android のみ)。8,600 回のチェーン構築で 51,600 個のリファレンスリークが発生することを検証

パフォーマンスへの影響

メモリ改善:修正なしの場合、8,600 回の 6 証明書チェーン構築で 51,600 個の JNI グローバルリファレンスがリークし、Android デフォルト上限 51,200 を超過。修正後は上限超過なし。

関連Issue

#128284

その他

  • Android エミュレータ(API 36, arm64-v8a)での動作確認済み:修正あり時は約 9.5 分で成功、修正なし時は 7,750~8,500 反復で JNI ERROR: global reference table overflow でクラッシュ
  • Android プラットフォーム固有の修正のため、他プラットフォームへの影響なし

#128275 Fix R2R detected layout issues

概要

R2R(Ready2Run)生成時のレイアウト問題を2つ修正します。

  1. SupportAlign8のWasm対応: Armチェックをハードコードしていた箇所をSupportsAlign8チェックに変更し、WasmをArmと同じ方法で処理
  2. GCRefMap/ArgIteratorの構築エラー修正: リフレクション呼び出しの戻り値バッファパラメータが16バイトアライメントを正しく尊重していない問題と、Crossgen2のArgIteratorが構造体引数/戻り値のWasmLoweringコード処理を誤りマージしていた問題を解決

変更内容

  • CorInfoImpl.cs, WasmLowering.cs: ArmのハードコードチェックをSupportsAlign8条件に修正(各-1/+1)
  • MetadataFieldLayoutAlgorithm.cs: アライメント条件の修正(-1/+1)
  • ArgIterator.cs: WasmLowering処理の削除と正規化(-39/+5)
  • TransitionBlock.cs: 16バイトアライメント対応の強化(+7/-1)
  • reflectioninvocation.cpp: 戻り値バッファパラメータ処理の修正(+24/-1)
  • calldescrworkerwasm.cpp: Wasm呼び出しヘルパーの整理(-16/+3)
  • WasmImportThunk.cs, WasmInterpreterToR2RThunkNode.cs, WasmR2RToInterpreterThunkNode.cs: 各Wasmサンク処理の修正(各-1/+1)
  • WasmLowering.ReadyToRun.cs(新規): ReadyToRun用WasmLowering実装(+33)

パフォーマンスへの影響

影響なし

関連Issue

#128275

その他

  • R2R生成時のメモリレイアウト計算に関連する内部実装修正で、公開APIへの直接的な影響なし
  • Wasm上でのReady2Run機能の正確性向上に寄与

#128269 Reduce parallelism for composite crossgen2 for jit64_3 test

  • 作成者: @Copilot
  • 作成日時: 2026年05月15日 21:56:32(UTC)
  • マージ日時: 2026年05月19日 20:04:19(UTC)
  • ラベル: area-crossgen2-coreclr

概要

win-x86レグでのOOM問題を解決するため、composite mode時のCrossGen2並列度を制御する新しいMSBuildプロパティを追加しました。HugeArray、HugeFieldなどの大規模メソッドがparallel compilationで過度なネイティブメモリを消費していたため、jit64_3テストではcomposite mode時のみparallelismを2に制限することで、ビルド時間への影響を最小限に抑えながら問題を解決しています。

変更内容

  • CLRTest.CrossGen.targets: Composite mode専用のCrossGen2引数プロパティCompositeCrossGen2TestExtraArgumentsを新規追加。生成されるCrossGen2スクリプト(bash/batch)に統合。
  • jit64_3.csproj: CompositeCrossGen2TestExtraArgumentsで--parallelism:2を設定し、このテストグループのCrossGen2並列度を制限。

パフォーマンスへの影響

  • ネイティブメモリ使用量の削減によりOOM発生を抑止(win-x86での改善)
  • Composite mode時のビルド時間は増加する可能性あり(並列度制限による)
  • 非composite mode及び他のプラットフォームへの影響なし

関連Issue

なし

その他

Pull Request作成者の概要では、スコープをさらに32ビットプラットフォームのみに限定することも検討の余地があると言及されています。これはテスト用の内部実装変更であり、公開APIへの影響はありません。


#128256 [cDAC] Implement DacDbi API GetSymbolsBuffer

  • 作成者: @Copilot
  • 作成日時: 2026年05月15日 13:39:36(UTC)
  • マージ日時: 2026年05月19日 04:27:14(UTC)
  • ラベル: area-Diagnostics-cdac

概要

managed cDAC/DacDbi API の GetSymbolsBuffer メソッドを実装し、モジュールからメモリ内シンボルストリームを取得する機能を追加しました。Loader コントラクトを利用して PDB バイト情報を管理し、ダンプデバッグ時のシンボル取得をサポートします。

変更内容

  • DacDbiImpl.cs: GetSymbolsBuffer メソッドの実装(48行追加)。Loader コントラクトを使用してシンボルストリームを取得
  • IDacDbiInterface.cs: GetSymbolsBuffer インターフェース定義の追加(7行追加)
  • DacDbiImplTests.cs: DacDbiImpl.GetSymbolsBuffer の単体テスト追加(65行新規)
  • DacDbiMultiModuleDumpTests.cs: MultiModule デバッギーを使用したダンプ統合テスト追加(68行新規)
  • MultiModule/Program.cs: PDB バイト情報を含むアセンブリをメモリからロードする処理を追加(17行追加)
  • LoaderTests.cs: ILoader.TryGetSymbolStream の単体テスト追加(62行新規)
  • MockDescriptors.Loader.cs: CGrowableSymbolStream モック実装とヘルパー関数の追加(58行新規)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

本変更は内部実装(managed cDAC インフラストラクチャ)の拡張で、公開 API への破壊的変更はありません。デバッガーがメモリ内 PDB シンボル情報にアクセスする際の基盤を整備します。


#128244 improve accuracy of SslClientHelloInfo

  • 作成者: @wfurt
  • 作成日時: 2026年05月15日 04:24:53(UTC)
  • マージ日時: 2026年05月19日 14:27:40(UTC)
  • ラベル: area-System.Net.Security

概要

SslStreamのサーバー側ClientHello処理を改善し、ServerOptionsSelectionCallbackデリゲートがsupported_versions拡張機能を通じて広告されているTLSバージョン(特にTLS 1.3)を正確に受け取れるようにします。これにより、SNI選択時にクライアントがサポートするすべてのプロトコルバージョンが正しく処理されます。

変更内容

  • SslStream.IO.cs: ProcessingOptions.Versionsフラグを有効化し、ServerOptionsCallback経由でClientHelloからsupported_versions拡張機能のパース処理を実行
  • TlsFrameHelper.cs: supported_versions拡張機能の解析ロジックを調整
  • ServerAsyncAuthenticateTest.cs: ServerOptionsSelectionCallbackでTLS 1.3バージョン情報が正しく取得できることを検証する回帰テストを追加
  • TlsFrameHelperTests.cs: 既存テストの調整

パフォーマンスへの影響

影響なし

関連Issue

#128244

その他

Copilotのレビュー指摘により、TryGetSupportedVersionsFromExtensionが不正な形式のClientHelloメッセージ(ゼロ長ベクトルまたは奇数バイト数)を現在は許容しており、ユーザーコードに露出する前にバリデーションを強化すべき点が指摘されています。


#128241 [cDAC] implement EnumerateInternalFrames and GetCountOfInternalFrames

概要

デバッガーのスタックウォーク機能をcDAC(Compact DAC)で実装するPRです。レガシーなIPC構造体(DebuggerIPCE_*)を新しいDebugger_*に名前変更・再構成し、Frame::GetStubFrameType()を追加することで、GetCountOfInternalFrames/EnumerateInternalFramesの実装を可能にします。cDAC側にIStackWalkの3つの新メソッド(GetFrames、IsExceptionHandlingHelperInlinedCallFrame、GetDebuggerEvalData)を実装し、テストを伴う形で提供されます。

変更内容

  • IPC構造体の再設計: レガシーDebuggerIPCE_FuncData/JITFuncData/STRDataをDebugger_*に名前変更し、Debugger_STRDataのctx/rdをCORDB_ADDRESSポインター(呼び出し元割り当てバッファ)に変更(dacdbistructures.h)
  • Frame型判定の刷新: Frame::StubFrameType列挙型と仮想GetStubFrameType_Impl()メソッドを追加し、DacDbiInterfaceImpl::GetInternalFrameTypeをこれに基づいて書き換え(frames.h/cpp、dacdbiimplstackwalk.cpp)
  • DebuggerEval拡張: DebuggerEvalにm_pAssemblyフィールドを追加し、cDAC用に公開(debugger.h/cpp、datadescriptor.inc)
  • cDAC IStackWalk拡張: 3つの新メソッドを実装し、マネージド側でフレーム列挙を可能に(IStackWalk.cs、StackWalk_1.cs、DacDbiImpl.cs)
  • テスト・ドキュメント: 新しいモック フレーム基盤とStackWalkテストを追加、設計ドキュメントを作成(MockDescriptors.Frame.cs、StackWalkTests.cs、StackWalk.md)

パフォーマンスへの影響

影響なし。この変更は主にデバッガーのバックエンド(DAC/cDAC)のAPI再構成であり、ランタイムの本体実行パスに影響しません。

関連Issue

なし。(PR説明では単一フィールド削除とされていますが、実際はより広範な再構成です)

その他

  • 互換性: 内部デバッガー IPC 構造体の名前変更と再構成が行われていますが、パブリック API ではなく、内部実装の変更です。
  • 実装品質の懸念: レビューコメントから、dacdbiimplstackwalk.cppにpJITFuncData->enCVersionの重複割り当てが指摘されており、cleanup が必要な可能性があります。
  • PR説明と実装の不一致: PR説明は「単一フィールド削除」と記載していますが、実際は IPC 構造体の再設計、フレーム型判定ロジックの抜本改良、cDAC API 拡張を含む大規模な変更です。

#128237 Fix R2Rdump for 32bit platforms, and print disassembly for wasm even when we can't load CoreDisTools

概要

R2Rdump(Ready2Run形式のダンプツール)を32ビットプラットフォームおよびWebAssembly対応で修正するPRです。32ビット環境でのfixupオフセット識別の不具合を解決し、WebAssembly環境でCoreDisToolsを不要に読み込まないようにします。また、WasmファイルのR2Rシンボル逆アセンブリにおいてシンボリック検索機能を追加します。

変更内容

  • ReadyToRunReader.cs: インポートセクション読み込み時に、4バイトエントリサイズの場合は32ビット値として読み込むように修正(従来は常に8バイト消費していた)
  • Program.cs: Webcil イメージに対してCoreDisToolsベースのディスアセンブラー初期化をスキップ
  • TextDumper.cs: シンボリック検索機能の統合(10行追加)
  • WasmDisassembler.cs: WebAssemblyのR2Rシンボル逆アセンブリでシンボリック検索をサポート(52行追加)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • 32ビット環境での問題は長時間存在していましたが、逆アセンブリビューがfixupの視点を提供していたため重要度は低かったとのこと
  • CoreDisToolsはWebAssemblyには使用されないため、Webcil入力時の不要な読み込み試行を排除することで、wasm環境でのr2rdumpツール動作を正常化
  • 内部ツール(r2rdump)の修正であり、公開APIへの影響なし

#128214 Honor MarshalAs.IidParameterIndex for out object in source-generated COM stubs

概要

COM source-generatorが[MarshalAs(UnmanagedType.Interface)] out objectパラメータのIidParameterIndex属性を無視していた問題を修正しました。この変更により、実行時IIDを使用したQueryInterface呼び出しによって、ネイティブ呼び出し側に正しいインターフェースポインタを返すようになります。

[GeneratedComInterface]
[Guid("...")]
partial interface IActivationFactory
{
    void GetActivationFactory(
        in Guid iid,
        [MarshalAs(UnmanagedType.Interface, IidParameterIndex = 0)] out object factory);
}

変更内容

ソースジェネレータ側(内部実装):

  • MarshalAsParser.cs: IidParameterIndexの解析を追加し、サポートされる形状[MarshalAs(UnmanagedType.Interface)] out objectのみに限定
  • MarshallingAttributeInfo.cs: IID参照情報を保持するIidParameterIndexNativeMarshallingInfoを追加
  • ComInterfaceMarshallingInfoProvider.cs: COM マーシャリング情報生成時にIIDパラメータ情報を追加(公開API形状変更)
  • IidParameterIndexMarshallerResolver.cs: 新しいマーシャラーリゾルバーを追加。ComInterfaceMarshaller<object>でIUnknown*を取得後、Marshal.QueryInterfaceでIIDパラメータを使用してQI実行、結果をvoid**に書き込み、失敗時はCOMExceptionをスロー
  • マーシャリング情報パイプライン全体を通じてIIDパラメータ情報を伝播

テスト側:

  • Compiles.cs: サポート形状のコンパイル通過テストを追加
  • CompileFails.cs: 非サポート形状(ref objectなど)のコンパイル失敗テストを追加
  • GeneratedComClassTests.cs: 実行時テストでIIDが尊重されること、未サポートIIDでE_NOINTERFACEを返すこと、サポートIIDで要求されたポインタが返ることを検証
  • Diagnostics.cs: 診断メッセージテキストを更新

パフォーマンスへの影響

影響なし

関連Issue

#128214

その他

  • 要素依存関係として IID パラメータを追跡し、コード生成の順序が有効に保たれることを保証
  • 非対応形状(ref/in使用など)では既存の診断を保持し、メッセージテキストを更新してサポートされるパターンを文書化

#128170 Add missing THUMB_BRANCH24 and ARM64_BRANCH26 to Relocation.GetSize

  • 作成者: @jtschuster
  • 作成日時: 2026年05月13日 21:50:24(UTC)
  • マージ日時: 2026年05月19日 20:37:45(UTC)
  • ラベル: area-ReadyToRun

概要

ARM/ARM64アーキテクチャのR2Rイメージ生成時、Relocation.GetSizeメソッドに2つのリロケーションタイプ(THUMB_BRANCH24とARM64_BRANCH26)の処理が欠落していたため、NotSupportedExceptionが発生していた問題を修正しました。これらのリロケーションタイプはReadValue/WriteValueでは既に対応していましたが、GetSizeに追加することで、PEObjectWriterがリロケーション解決時に正しいサイズを報告できるようになります。

変更内容

  • src/coreclr/tools/Common/Compiler/DependencyAnalysis/Relocation.cs: Relocation.GetSizeにIMAGE_REL_BASED_THUMB_BRANCH24とIMAGE_REL_BASED_ARM64_BRANCH26の2つのケースを追加(各4バイト)
  • src/coreclr/tools/Common/Compiler/ObjectWriter/PEObjectWriter.cs: リロケーション解決処理の関連箇所を更新(7行追加)

パフォーマンスへの影響

影響なし

関連Issue

#128170

その他

  • 本修正はARMアーキテクチャのcoreroot構築を完全には解決しません。非同期メソッドと再開スタブ間のリロケーションがリロケーションサイズに収まらないため、follow-up PRで再開スタブを非同期メソッドの隣に配置する対応が必要です。
  • クロスプラットフォーム対応のため、ARM/ARM64向けのCompositeR2Rイメージ生成ツール(Crossgen2/CoreCLR)の修正です。

#128149 Match jit behavior when converting float/double to u1/u2

概要

CoreCLR インタープリタの float/double から u1(uint8)/u2(uint16)への変換動作を JIT コンパイラの動作と一致させるパッチです。負の値の変換時に、これまでは uint32_t を経由して飽和変換(saturation conversion)を行っていましたが、int32_t を経由する署名付き変換に変更することで、正しい値に変換されるようになります。

例: (ushort)-4567.0f は従来は 0 でしたが、修正後は 60969(-4567 の符号なし16ビット表現)に変換されます。

変更内容

  • src/coreclr/vm/interpexec.cpp: INTOP_CONV_U1_R4/R8 および INTOP_CONV_U2_R4/R8 オペコードを修正。float/double を int32_t経由で uint8_t/uint16_t に変換するよう変更(8行変更)
  • src/libraries/System.Runtime/tests/System.Runtime.Tests/System/DoubleTests.GenericMath.cs: テスト追加・修正(11行変更)
  • src/libraries/System.Runtime/tests/System.Runtime.Tests/System/SingleTests.GenericMath.cs: テスト追加・修正(11行変更)

パフォーマンスへの影響

影響なし

関連Issue

#128149

その他

  • インタープリタと JIT コンパイラの動作を統一する内部実装修正
  • System.Runtime.InteropServices.Tests.NFloatTests.NFloatTo* テストの失敗を修正
  • 公開 API への影響なし

#128067 Fix NegotiateStream stale read buffer on mid-frame read failure

  • 作成者: @rzikm
  • 作成日時: 2026年05月12日 08:24:24(UTC)
  • マージ日時: 2026年05月19日 15:17:58(UTC)
  • ラベル: area-System.Net.Security

概要

NegotiateStream.ReadAsync で、フレームボディの読み込み失敗時に内部バッファ状態が不整合のままになり、後続の Read 呼び出しが stale(ゼロ埋めされた)バッファ内容を返す不具合を修正。フレームヘッダ読み込み後、ボディ読み込み前に _readBufferCount が割り当てられていたため、ReadAllAsync で例外が発生した場合、後続の呼び出しがバッファ内の 0 を EOF と区別できずに返していた。

変更内容

  • NegotiateStream.cs: _readBufferOffset / _readBufferCount の割り当てをフレームボディ読み込みと復号化完了後に遅延。復号化ブロックをリファクタし、ローカル変数 decryptedOffset / decryptedCount を使用して成功確認後のみフィールドへコミット。
  • NegotiateStreamStreamToStreamTest.cs: 新規テスト NegotiateStream_StreamToStream_ReadFailsMidFrame_DoesNotReturnStaleBufferOnNextRead を追加。NTLM ループバックペアで認証後、フレームサイズ 100 のヘッダを送信してサーバーを切断し、クライアント第 1 回目の Read で IOException を期待、第 2 回目の Read が 0(EOF)を返すことを検証(stale データ 100 バイトが返されないことを確認)。

パフォーマンスへの影響

影響なし

関連Issue

#128067

その他

  • 修正は内部実装(NegotiateStream の状態管理)に限定。公開 API への破壊的変更なし。
  • テストは Windows のみ(NTLM ループバックの制限)。すべての NegotiateStreamStreamToStreamTest の具象バリアント(Async_Array、Async_Memory、Async_Memory_NotEncrypted、BeginEnd、Sync、Sync_NotEncrypted)で実行。

#128049 [clr-ios] Skip XSLT API tests on Apple mobile CoreCLR via ConditionalClass

  • 作成者: @kotlarmilos
  • 作成日時: 2026年05月11日 19:55:59(UTC)
  • マージ日時: 2026年05月19日 20:08:41(UTC)
  • ラベル: area-System.Xml

概要

Apple mobile + CoreCLR環境でXSLT APIテストが失敗する問題を解決するため、[ConditionalClass]属性を使用してテストをスキップする仕組みに変更しました。基底クラスXsltApiTestCaseBase2の静的コンストラクタが読み取り専用のアプリバンドルデータに書き込みを試みることで発生していた問題に対応しています。

変更内容

  • XsltApiV2.cs: 新しいXsltApiTestRequirements.IsSupported述語を導入し、XSLT APIテストのスキップロジック集約化
  • 派生テストクラス群: 既存の[ConditionalClass(...IsReflectionEmitSupported...)]と[ActiveIssue(...)]の組み合わせを、単一の[ConditionalClass(...IsSupported...)]に統一
    • 対象ファイル: Errata4.cs、OutputSettings.cs、TempFiles.cs、XslCompiledTransform.cs、XslTransformMultith.cs、XsltArgumentList.cs、XsltArgumentListMultith.cs、XsltSettings.cs
  • テスト実行時に基底クラスのコンストラクタ実行を回避し、Apple mobile CoreCLR環境での副作用を防止

パフォーマンスへの影響

影響なし

関連Issue

その他

ConditionalClass属性は派生クラスにも伝播するため、基底クラスでの条件指定だけで全派生クラスへの適用が可能です。Copilotから、既存の[ActiveIssue]属性の削除によりIssueの追跡可能性が低下する可能性を指摘されていますが、このトレードオフについての判断は提供情報に含まれていません。


#128001 [cDAC] Implement DacDbi APIs TypeHandleToExpandedTypeInfo and GetObjectExpandedTypeInfo

  • 作成者: @Copilot
  • 作成日時: 2026年05月10日 01:09:49(UTC)
  • マージ日時: 2026年05月19日 02:55:23(UTC)
  • ラベル: area-Diagnostics-cdac

概要

cDAC(Common Diagnostics Access Component)の DacDbi API を拡張し、型ハンドルまたはオブジェクトアドレスから DebuggerIPCE_ExpandedTypeData を生成する TypeHandleToExpandedTypeInfo および GetObjectExpandedTypeInfo を実装します。また、System.Object メソッドテーブルを認識する IRuntimeTypeSystem.IsObject() コントラクトヘルパーを追加し、ELEMENT_TYPE_OBJECT と ELEMENT_TYPE_CLASS を区別できるようにします。

変更内容

  • IRuntimeTypeSystem(公開API):IsObject(TypeHandle) メソッドを追加
  • RuntimeTypeSystem_1.cs(内部実装):ObjectMethodTable グローバルを読み込み、IsObject を実装
  • DacDbiImpl.cs(内部実装):TypeHandleToExpandedTypeInfo および GetObjectExpandedTypeInfo を実装。リトルエンディアンでの書き込みは Portable<T> に対応
  • ネイティブ DBI インターフェース:IDL/ヘッダを更新し、TypeHandleToExpandedTypeInfo がパラメータとして UINT64 を受け取るように変更。GetObjectExpandedTypeInfoFromID を削除
  • ネイティブ実装:デバッガ側の呼び出し元を新しい型ハンドル取得ロジックに対応
  • テスト・ドキュメント:MockDescriptors、MethodTableTests、RuntimeTypeSystemDumpTests を拡張。RuntimeTypeSystem.md を更新

パフォーマンスへの影響

影響なし

関連Issue

#128058

その他

  • デバッガランタイム API の内部変更です
  • VMPTR からの memcpy が必要となりますが、設計者は頻繁に実行されない操作のため許容としています
  • ネイティブ DAC 実装で出力構造体がゼロ初期化されるようになりました

#127838 Arm64: [PAC-RET] Jit Support

概要

Arm64プロセッサにおけるPointer Authentication (PAC)のJIT支援を実装するPRです。PAC(Armv8.3+)はReturn-Oriented Programming (ROP)攻撃を軽減するセキュリティ機能で、リターンアドレスを暗号学的に署名することで制御フローを保護します。本実装ではプロローグでpaciaspを使用してリンクレジスタ(LR)を署名し、エピローグでautiaspを使用して認証します。無効な署名はSIGILLで実行を失敗させます。デフォルトでは無効ですが、DOTNET_JitPacEnabled=1で有効化できます。

変更内容

  • src/coreclr/jit/codegenarm64.cpp: PAC対応のプロローグ/エピローグ生成コード追加
  • src/coreclr/jit/emitarm64.cpp: paciasp/autiasp命令の発行ロジック実装
  • src/coreclr/jit/unwindarm64.cpp: PAC対応のアンワインド情報生成
  • src/coreclr/jit/jitconfigvalues.h: JitPacEnabledの設定値追加
  • src/coreclr/jit/compiler.h、emit.h: PAC関連フラグと補助メソッド追加
  • src/coreclr/jit/codegenarmarch.cpp: 共通ARM64アーキテクチャコード追加
  • src/coreclr/jit/unwind.cpp: アンワインド情報更新
  • src/coreclr/inc/cfi.h: 呼び出し情報更新

パフォーマンスへの影響

パック命令(paciasp/autiasp)がプロローグ/エピローグに追加されるため、関数呼び出しのオーバーヘッド僅増の可能性があります。具体的なベンチマーク結果は提供されていません。

関連Issue

#125436

その他

  • 本PRはセキュリティ機能の実装で、破壊的変更ではありませんが、PAC有効時の動作変更を伴います
  • 本PRのみでは全テストパスが困難で、#125436の追加変更部が必要とのこと(CI状態参照推奨)
  • JIT層のみの変更で、ランタイムの他の部分への影響はありません

#127683 Fix NotifyOfCHFFilter notification by advancing stackwalk iterator if in NATIVE_MARKER_FRAME state

概要

デバッガ通知の回帰バグを修正したPull Requestです。例外処理のPass 1終了後、StackFrameIteratorの状態が古くなっており、NotifyExceptionPassStartedでFuncEvalFrame/DebuggerU2MCatchHandlerFrameの検出が失敗していました。修正では、マネージフレームから明示的フレームへの遷移時に挿入されるNATIVE_MARKER_FRAMEをスキップして次のフレームに進め、NotifyOfCHFFilter通知が正しく発火するようにしました。

変更内容

  • src/coreclr/vm/exceptionhandling.cpp:
    • NotifyExceptionPassStartedからFuncEvalFrame/DebuggerU2MCatchHandlerFrame検出を削除
    • SfiNextWorkerにPass 1での検出処理を追加し、NATIVE_MARKER_FRAME状態でスタックウォーク反復子を進める
    • 次の明示的フレームがFuncEvalFrame(ProtectValueClassFrameをスキップ)またはDebuggerU2MCatchHandlerFrameの場合にNotifyOfCHFFilterを発行

パフォーマンスへの影響

影響なし

関連Issue

#125777

その他

  • Visual Studioの内部テストで発見
  • CoreCLR例外処理とデバッガ通知メカニズムに関連(ランタイム内部実装の修正)
  • 関数評価中の例外ハンドリングにおけるデバッガ通知の信頼性向上

#127578 [android] Enable android-arm CoreCLR with softfp ABI handling

概要

Android ARM(armeabi-v7a)のCoreCALRサポートを再有効化し、softfp ABI呼び出し規約に対応させるプルリクエストです。Android ARMはfloating-point引数と戻り値をコアレジスタ/スタック経由で渡す必要があるため、ARM_SOFTFP定義を追加し、NativeAOT/Crossgen2のAndroid ARM32ビルド時にarmel ABI を適用するようにしました。また、Crossgen2とILCompilerのAndroid target引数を一元化し、--targetos:android --targetarch:armから自動的にsoftfp(armel)ABI に正規化される仕組みを実装しました。

変更内容

  • ビルド構成: eng/native/configureplatform.cmakeでAndroid ARM向けにARM_SOFTFPを設定、eng/Subsets.propsでandroid-armの制限を解除
  • CI/テスト: Android ARMをCoreCALRパイプライン、Helix、ReadyToRunテストに追加(eng/pipelines/runtime.yml、helix-queues-setup.ymlなど)
  • AOT/Crossgen2正規化: CommandLineHelpers.csに一元化されたAndroid target正規化ロジック追加。--targetos:android引数をTargetOS.Linuxに正規化し、arm アーキテクチャ時はarmel softfp ABIを適用
  • ビルド統合: ILCompilerRootCommand.cs、Crossgen2RootCommand.cs、MSBuild targets(Microsoft.NETCore.Native.targets、crossgen-corelib.projなど)を更新し、Androidターゲット処理をツール側で一元化

パフォーマンスへの影響

影響なし

関連Issue

#127500

その他

  • 物理Androidデバイス(armeabi-v7a対応)で検証済み
  • System.Runtime.Tests、System.Numerics.Vectors.Tests、System.Numerics.Tensors.Testsなどで複数テストが成功(ReadyToRun有効/無効の両方で0件の失敗)
  • 既存の--targetos:linux --targetarch:armel正規化との互換性も確認済み

#127573 [release/10.0] Redo GC heap size fix in heavily pinning scenarios

概要

.NET 10で導入されたGCヒープサイズ回帰の修正を release/10.0 ブランチに復元するバックポート。重いピンニングシナリオでのリージョンベースGCのパフォーマンス低下を改善しながら、大きなプラグの再配置時にフロントパディングが無限ループを引き起こす問題を修正しています。

変更内容

  • gc.cpp: allocate_in_condemned_generationsでリージョンサイズに近いプラグのフロントパディングをスキップし、空のリージョンへの再配置を成功させる処理を追加。ピン配置の属性化をヘルパーに再構成し、リージョン/非リージョン両パスで使用される共有ヒューリスティックdecide_on_gen1_pin_promotionを導入。リージョン計画ロジックを更新し、大規模ピンを特別扱い(gen0への降格を回避)し、decide_on_demotion_pin_survで昇格判定を制御。
  • gcpriv.h: ピン昇格/降格判定と属性化ヘルパーをサポートするGCヒープAPI/フィールドを追加。
  • テスト追加: Runtime_126043回帰テスト(テストプロジェクト+テストコード)を新規追加。

パフォーマンスへの影響

重いピンニングシナリオでのGCヒープサイズ回帰を改善。元の修正は.NET 10の本線で長期間検証済みで、今回の変更は唯一の既知の回帰(無限ループ)を解決することで、パフォーマンス向上の効果を復元しつつ安定性を確保。

関連Issue

#126043(元の回帰修正)の backport

その他

  • リスク評価: 低。回復された変更は実装前に長期間のベイク時間があり、唯一の既知回帰は本PRで対処済み。
  • 顧客報告の問題に対応したバグ修正。
  • CI テスト、ローカル回帰テスト、GC パフォーマンステストで検証済み。

#127497 [clr-ios] Enable Text.Json tests on CoreCLR Apple mobile

概要

CoreCLR Apple mobile環境において、System.Text.Json.TestsとSystem.Collections.Concurrent.Testsをテスト実行対象に復活させるPRです。プロジェクトレベルの除外設定を削除し、既知の失敗テストには[ActiveIssue]アノテーションを追加して対応しています。

変更内容

  • src/libraries/tests.proj: CoreCLR Apple mobile対象のSystem.Text.Json.TestsとSystem.Collections.Concurrent.Testsの除外設定を削除
  • src/libraries/System.Collections.Concurrent/tests/ConcurrentDictionary/ConcurrentDictionary.Generic.Tests.cs: CoreCLR Apple mobile環境で失敗する特定のConcurrentDictionaryテストに[ActiveIssue]アノテーションを追加

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

このPRはテスト実行範囲の拡大であり、CoreCLR Apple mobile(iOS/tvOS等)のテストカバレッジ向上を目的としています。既知の失敗テストは明示的にスキップされるため、テスト実行の安定性を保ちながらカバレッジを改善しています。


#126552 [RyuJit] Remove the single-IG prolog restriction

概要

RyuJITコンパイラから単一IG(Instruction Group)制限を削除し、JITコード生成の柔軟性を向上させるPRです。主な変更は:(1) IG番号の順序外比較をIG リストの走査により改善、(2) 単一IG制限の回避のためだけに使用されていた相対ジャンプ(+/- <instr count>でエンコード)を削除します。

変更内容

  • emit.cpp/emit.h: IG番号比較ロジックを簡潔化し、相対オフセットジャンプのエンコーディング関連のコードを削除
  • emitarm/emitarm64/emitxarch/emitriscv64: 各アーキテクチャ固有のジャンプ生成ロジックから相対オフセットジャンプ処理を削除
  • codegenxarch/codegenarm64など: ジャンプの宛先指定方式を相対オフセット形式から直接IG参照に変更
  • unwind.cpp: プロローグ処理の簡略化に伴う変更
  • ダンプ機能用のインフラストラクチャは当面保持

パフォーマンスへの影響

影響なし。本変更は制限解除により将来的な最適化を可能にするもので、現在のパフォーマンスには直接的な変動をもたらしません。

関連Issue

なし

その他

この変更は単一IG制限の廃止に向けた段階的な取り組みの一部です。ジャンプの相対オフセットエンコーディング関連のインフラは、ダンプ機能で現在も使用されているため当面は保持されています。


#125729 Pass Vector<T> by reference when InstructionSet_VectorT is available

概要

SVE(Scalable Vector Extension)命令セットが利用可能な場合、Vector<T>を参照渡しで扱うように変更し、128ビットHFA(Homogeneous Float Aggregate)として扱われることを防ぎます。同時にHFA認識ロジックを改善し、固定サイズ型のHFAタイプ判定を集約化した中央関数で一元管理するようにリファクタリングされています。

変更内容

  • cor.h: SVE関連の定義追加(8行追加)
  • compiler.cpp/hpp: HFA型判定ロジックの改善と統合
  • lclmorph.cpp: ローカル変数形態素解析の調整
  • targetarm64.cpp: ARM64ターゲットのHFA処理ロジック更新
  • callingconvention.h: 呼び出し規約におけるHFA判定の集約化(新規中央関数14行追加)
  • class.cpp: HFA認識ロジックの改善と整理(36行削除、30行追加)
  • codeman.h: コード管理関連の定義追加(8行追加)
  • methodtable.h/typehandle.h/typehandle.cpp: 型情報処理の拡張

パフォーマンスへの影響

直接的なパフォーマンス数値は提供されていません。SVE対応により、スケーラブルベクトル長を活用できるようになることで、将来的にベクトル演算の効率化が期待されます。

関連Issue

#125729

その他

  • 互換性: SVE命令セット利用時のABI変更に関連するため、ARM64プラットフォーム上で型のメモリレイアウトに影響します
  • スコープ: 主にARM64アーキテクチャとSVE拡張機能に限定された変更です
  • HFA型判定の集約化により、コード保守性が向上し、将来的なHFA処理の追加カスタマイズが容易になります

#123252 Use dispatch helper for calling interface methods

概要

インターフェース メソッド ディスパッチの実装を、キャッシュベースのセルから汎用のディスパッチ ヘルパー呼び出しに移行します。NativeAOT環境において、インターフェース ディスパッチ セルを2ポインタ構造(キャッシュされたMethodTable+ターゲットメソッドアドレス)に統一し、メタデータ(インターフェース型とスロット情報)をアウトオブライン化します。初回のディスパッチでは遅延解決ヘルパー(RhpResolveInterfaceMethodFast)が呼ばれ、セル内に結果をキャッシュします。異なるthisでのディスパッチはグローバルハッシュテーブルにキャッシュされます。

変更内容

  • JIT フラグ追加: CORJIT_FLAG_USE_DISPATCH_HELPERS フラグを新規追加し、ディスパッチ ヘルパーの利用を制御
  • ヘルパー関数: CORINFO_HELP_INTERFACEDISPATCH_FOR_SLOT ヘルパーを新規定義、JIT から呼び出し
  • ディスパッチ セル レイアウト変更: 従来の複雑な構造から、固定の2ポインタ構造(キャッシュMT+ターゲット)に統一。インターフェース+スロット情報は新しい ReadyToRun セクション(#209、#210)に格納
  • レガシー コード削除: 旧インターフェース ディスパッチ機構(ResolveHelperFrame、キャッシュ同期機構等)を削除
  • ランタイム ヘルパー実装: x64/ARM64 Windows/Unix、ARM、i386、RISC-V、LoongArch64 向けの RhpResolveInterfaceMethodFast 実装を追加、グローバル ハッシュテーブルベースの多形キャッシュに対応
  • 管理コード更新: CachedInterfaceDispatch.cs を拡張し、新セル形式のメタデータ検索・キャッシング・登録ロジックを実装

パフォーマンスへの影響

  • メモリ:ディスパッチ セルを.bss セクションに移行することで、初期化時メモリ削減
  • 実行速度:単形キャッシュ(初回ヒット)時は、セル内ポインタ キャッシュから直接メソッドをロード、従来の仲介ルーチンを排除し最小化
  • 多形ケース:グローバル ハッシュテーブル(キー:this MethodTable + セル アドレス)による高速ハッシュ・比較、メモリ接触削減設計
  • 具体的な数値は記載なし

関連Issue

なし

その他

  • 互換性:公開API(CORJIT_FLAG_USE_DISPATCH_HELPERS等)の追加だが、既存の VSD 呼び出しシーケンスを新ヘルパー経由に切り替える(ラウンドトリップ互換性あり)
  • 将来の改善:セル形状が固定化されたため、単形ケースをインライン化可能。ジェネリック仮想メソッド(GVM)ディスパッチへの拡

目次