Pull Request on 2026年06月12日

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

注意点

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


目次

  1. #129338 Some X25519 fixes for OpenSSL key handling
  2. #129330 Fix if that should have been an ifdef
  3. #129309 JIT: extend loop cloning for span+stride>1 and ±const limits
  4. #129306 JIT/wasm: fix quadratic cost in fgWasmEhFlow
  5. #129303 JIT: tighten IV range from "i != bound" assertions in rangecheck
  6. #129271 Fix Array::GetDirectPointerToNonObjectElements DAC regression
  7. #129258 Add dnx shim to dotnet-host package
  8. #129253 JIT: Clean up range check overflow caching and bounds check special cases
  9. #129249 Add handling of RethrowAfterCatch exception in a few places
  10. #129248 JIT: encapsulate all fields in GenTreeIntCon
  11. #129243 [browser][coreCLR] workaround Wasm.Build.Tests.IcuTests.FullIcuFromRuntimePackWithInvariant
  12. #129218 Add async DataAnnotations bridge for Microsoft.Extensions.Options
  13. #129206 JIT: Allow optNarrowTree CAST case to match ULONG and LONG equivalently
  14. #129200 [cDAC]: Implement GetTypedByRefInfo, GetStringData, GetArrayData, GetBasicObjectInfo
  15. #129166 FileStream.Unix: prevent open to cause setting the controlling terminal.
  16. #129158 Fix Arraypool rent without try/finally block
  17. #129150 [release/9.0-staging] Update dependencies from dotnet/cecil
  18. #129140 Add Wasm32 ISA and PackedSimd ISA
  19. #129117 [release/10.0] Update dependencies from dotnet/xharness
  20. #129116 [release/9.0-staging] Update dependencies from dotnet/xharness
  21. #129083 Make Condition to not use ConditionalWeakTable
  22. #129029 [ci-scan] Fix crossgen2_comparison.py Python 3.14 asyncio compatibility
  23. #129016 Compute all checksums before emitting into image stream
  24. #128952 [release/10.0] Fix iossimulator build with XCode 26.4
  25. #128945 Localized file check-in by OneLocBuild Task: Build definition ID 679: Build ID 2998817
  26. #128927 Privatize NativeAOT libunwind symbols
  27. #128420 Convert corehost hostmisc trace and fx_ver to C
  28. #128224 [release/9.0] Update dependencies from dotnet/emsdk
  29. #127493 Fix race condition in System.Threading.Overlapped tests causing IOException on Windows ARM64
  30. #126845 Don't use callbacks when performing sync IO with async handles
  31. #126751 Add missing meta-packages and binary-free packages to PackageOverrides.txt
  32. #126324 [browser][coreCLR] event pipe and browser profiler
  33. #123138 arm64: Add support for BFI and BFX instruction

#129338 Some X25519 fixes for OpenSSL key handling

  • 作成者: @vcsjones
  • 作成日時: 2026年06月12日 16:39:16(UTC)
  • マージ日時: 2026年06月12日 19:40:36(UTC)
  • ラベル: area-System.Security

概要

X25519のOpenSSL実装における2つの重要な修正。

  1. OpenSSL 1.1.1での秘密鍵検出ロジックを修正。従来のNULLバッファを使用した検出方法がOpenSSL 1.1.1で誤った結果を返すため、実サイズのバッファで検出し、その後メモリをクリア(cleanse)する実装に変更。

  2. X25519DiffieHellmanOpenSsl.DeriveRawSecretAgreementCoreで_hasPrivateチェックを廃止。外部ハンドルから得られたキーの場合、秘密鍵のエクスポート可否は不明なため、OpenSSLプロバイダーに検証を委ねる設計に変更。PKCS#8および秘密鍵エクスポート時のチェックは継続。

変更内容

  • pal_evp_pkey_x25519.c: OpenSSL 1.1.1での秘密鍵検出の堅牢性向上。正しいサイズのバッファを使用した検出とメモリクリアの実装追加
  • X25519DiffieHellmanOpenSsl.OpenSsl.cs: DeriveRawSecretAgreementCoreから秘密鍵エクスポート可能性のチェックを削除。エクスポートAPI時の_hasExportablePrivateチェックは保持
  • X25519DiffieHellmanBaseTests.cs: 公開鍵のみでの派生テストを更新。OpenSSL固有のCryptographicExceptionサブクラスを許容

パフォーマンスへの影響

秘密鍵検出時にバッファのメモリクリア処理が追加されるため、若干のオーバーヘッドが存在する可能性があります。ただしセキュリティ上必要な処理であり、パフォーマンス測定値は提供されていません。

関連Issue

なし

その他

  • 互換性への影響: OpenSSL 1.1.1での動作改善により、より正確なエラーメッセージが得られるようになります(機能的な変更ではなく、エラー報告の改善)
  • セキュリティ: メモリクリア処理の追加により、秘密鍵検出後のメモリ安全性が向上しています

#129330 Fix if that should have been an ifdef

  • 作成者: @vcsjones
  • 作成日時: 2026年06月12日 14:41:53(UTC)
  • マージ日時: 2026年06月12日 18:06:51(UTC)
  • ラベル: area-System.Security

概要

ネイティブ暗号化OpenSSL相互運用層のプリプロセッサガーディングを修正。#ifを#ifdefに変更して、未定義のFEATURE_DISTRO_AGNOSTIC_SSLマクロへの参照によるコンパイルエラーを防止します。また、末尾の不要な空白行を削除。

変更内容

  • src/native/libs/System.Security.Cryptography.Native/pal_ecc_import_export.c
    • #if FEATURE_DISTRO_AGNOSTIC_SSLを#ifdef FEATURE_DISTRO_AGNOSTIC_SSLに変更(OpenSSL 1.1フォールバックゲート)
    • CryptoNative_EvpPKeyEcHasExplicitEncoding内の末尾空白行を削除

パフォーマンスへの影響

影響なし

関連Issue

#129329

その他

  • この変更はネイティブC実装部分の修正であり、マネージドコードAPIへの影響なし
  • プリプロセッサディレクティブの修正により、特定の環境でのビルド失敗が解決される

#129309 JIT: extend loop cloning for span+stride>1 and ±const limits

概要

JIT ループクローニングを拡張し、ストライド > 1 の Span<T> ループの最適化を可能にします。また、ループリミットから定数オフセットを分離する機能を追加し、for (int i = 0; i < span.Length - K; i += K) のようなパターンのクローニング対象化を実現します。ストライド > 1 の増加ループには limit <= INT_MAX - s + 1 の実行時オーバーフロー保護ガードを追加します。

// クローニング可能になったループパターン例
for (int i = 0; i < span.Length - K; i += K) { ... }
for (int i = 0; i < span.Length; i += 2) { ... }
for (int i = 0; i < span.Length; i += 3) { ... }

変更内容

  • compiler.h: NaturalLoopIterInfo に LimitOffset フィールドと LimitBase() メソッドを追加
  • flowgraph.cpp: リミット値から定数オフセットを抽出する処理を実装、LimitBase() メソッド実装、デバッグ出力機能追加
  • loopcloning.h: LC_Ident に offset フィールドを追加し、等価性判定・出力・コンストラクタを更新
  • loopcloning.cpp: LC_Ident オフセットの具体化、ストライド > 1 のスパンクローニング対応(オーバーフロー保護ガード付き)、リミットオフセット処理を条件生成に統合
  • テスト: SpanNonUnitStride.cs(ストライド 2/3 のスパンループテスト)および OffsetLimit.cs(Length - K や SIMD カウントオフセットテスト)を新規追加

パフォーマンスへの影響

ストライド > 1 のスパンループおよびオフセット付きリミットを持つループが新たにクローニン対象となることで、これらのループに対する最適化機会が増加します。オーバーフロー保護ガードの追加による実行時コストは最小限に留まるよう設計されています。

関連Issue

なし

その他

本変更は内部的な JIT 最適化拡張であり、公開 API への影響はありません。ランタイムのコンパイル段階での最適化パス(ループクローニング)の改善です。


#129306 JIT/wasm: fix quadratic cost in fgWasmEhFlow

概要

Wasm EH(例外処理)フローの変換処理における2つのO(N²)パターンを排除し、スケーラビリティを改善しました。数千の相互保護キャッチを共有する単一のdispatching tryを持つメソッド(例:b28158.il、約16,700キャッチ)で顕著なパフォーマンス低下が発生していた問題に対応します。

変更内容

src/coreclr/jit/fgwasm.cpp

  • bbFindInnermostCommonTryRegion()の呼び出しを削除し、継続がdispatching try内にあるかの判定をbbInTryRegions()の直接呼び出しに置き換え(O(compHndBBtabCount)スキャンの回避)
  • fgAddRefPut(continuation, switchBlock)の重複呼び出しを排除。ユニークなswitchBlock -> continuationエッジをmapで追跡し、重複ケースに対してはdupCount/bbRefsを手動で更新
  • memoizeされたエッジをswitch文のユニークな後続配列(succs[])構築時に再利用

パフォーマンスへの影響

改善により、大規模な相互保護キャッチセットを持つメソッドにおけるコンパイル時間の大幅な削減が期待されます。O(N²)パターンの除去により、キャッチ数に対する処理時間が線形に近づきます。

関連Issue

#129264

その他

なし


#129303 JIT: tighten IV range from "i != bound" assertions in rangecheck

概要

JITのループ境界チェック削除(BCE)を拡張し、i != bound形式のループ条件から生成されるアサーション(equality/inequality assertions)を活用して、ループクローニングの対象外となるループでも範囲チェックを削除できるようにします。optCreateJTrueBoundsAssertionを拡張してチェック済み境界に対するEQ/NE比較のアサーションを生成し、RangeCheck::MergeAssertionでそれらを使用して変数の範囲を厳密化します。

変更内容

  • src/coreclr/jit/assertionprop.cpp: optCreateJTrueBoundsAssertionを拡張し、チェック済み境界に対するEQ/NE比較からCompareCheckedBoundアサーションを生成。定数との等値比較は既存のLCLVAR基盤パスに委譲。デバッグアサーション検証を緩和し、順序関係だけでなく等値/不等式のアサーションも許可。

  • src/coreclr/jit/rangecheck.cpp: RangeCheck::MergeEdgeAssertionsWorkerを拡張し、X != bound(既存の限界が正確にboundと一致する場合)およびX == boundアサーションを使用して範囲を厳密化。

パフォーマンスへの影響

影響なし(ベンチマーク結果未記載)。本変更は範囲チェック削除機会を増やすことで間接的にパフォーマンス向上につながる可能性がありますが、具体的な数値は提供されていません。

関連Issue

#84697

その他

  • 本変更は「JIT: clone i != arr.Length loops to eliminate bounds checks」のフォローアップ
  • ループクローニングヒューリスティックが拒否するループ(例:副作用のある呼び出しを含むループ)でもNE-ループBCEを有効化
  • 内部実装の変更であり、公開APIへの影響なし

#129271 Fix Array::GetDirectPointerToNonObjectElements DAC regression

概要

DAC(デバッガ向けデータアクセス)モードで Array::GetDirectPointerToNonObjectElements() が誤ったアドレスを返していた回帰を修正します。DAC モードでは m_Array がホストアドレスを返しますが、PTR_KIND はターゲットアドレスを必要とします。PR #128961 による変更でこの問題が発生し、デバッガによる例外スタックトレース・ConditionalWeakTable・スタックフレームヘルパー配列の検査が破損していました。

変更内容

  • src/coreclr/vm/object.h: Array<KIND>::GetDirectPointerToNonObjectElements() の戻り値を PTR_KIND(m_Array) から PTR_KIND(GetDataPtr()) に変更。GetDataPtr() は dac_cast<PTR_BYTE>(this) + offset でターゲットアドレスを正しく計算します。

パフォーマンスへの影響

影響なし

関連Issue

#129271、#128961

その他

この修正はDAC機能に依存するデバッガの動作復旧に必須です。プリミティブ型配列のデータポインタを正しく返す必要があります。


#129258 Add dnx shim to dotnet-host package

  • 作成者: @mthalman
  • 作成日時: 2026年06月10日 19:33:53(UTC)
  • マージ日時: 2026年06月12日 02:03:57(UTC)
  • ラベル: area-Setup

概要

.NET分布パッケージングガイドラインに従い、dnxディスパッチャースクリプトをdotnet-hostパッケージに移行します。従来はdotnet/sdkのLinux SDKパッケージから配布されていたため、Canonicalのdotnet-hostパッケージがインストールされた環境でdpkgファイル競合が発生していました。このPRは対応するdotnet/sdkの変更と共に配布される必要があります。

変更内容

  • src/installer/pkg/sfx/installers/dnx(新規): Unix環境用のdnxシェルディスパッチャースクリプト(25行)。自身のインストール位置を解決し、最新インストール済みSDKのエントリーポイントに処理を委譲します。
  • src/installer/pkg/sfx/installers/dotnet-host.proj: ホストパッケージ出力にdnxを公開し、/usr/bin/dnxシンボリックリンク(../share/dotnet/dnxへ解決)を追加。実行可能権限設定(chmod)ステップを追加します。

パフォーマンスへの影響

影響なし

関連Issue

#53834(dotnet/sdk) #54687(dotnet/sdk)

その他

このPRは対応するdotnet/sdk PR #54688(dotnet-sdkパッケージからdnxを削除)と共に配布される必要があります。SDK 54687の修正も適用されています。


#129253 JIT: Clean up range check overflow caching and bounds check special cases

  • 作成者: @EgorBo
  • 作成日時: 2026年06月10日 17:52:27(UTC)
  • マージ日時: 2026年06月12日 10:49:59(UTC)
  • ラベル: area-CodeGen-coreclr

概要

JITコンパイラの範囲チェック最適化を整理するリファクタリングです。ノード単位のOverflowMapキャッシュを削除し、Winden()呼び出しをTryGetRangeに統合することで処理を簡潔化します。また、a[a.Length - cns]とa[X u% a.Length]のバウンズチェック高速パスをRangeCheck::OptimizeRangeCheckからoptAssertionProp_BndsChkに移動し、GetRangeWorkerの不正な使用に関する正確性の問題を解決します。

変更内容

  • rangecheck.cpp: 範囲チェック最適化ロジックを簡潔化。バウンズチェック高速パスをoptAssertionProp_BndsChkに移動(-101行の削減)
  • rangecheck.h: ノード単位のOverflowMap関連メンバーを削除(-8行)
  • assertionprop.cpp: バウンズチェック特殊ケース処理を集約追加(+35行)

パフォーマンスへの影響

作成者の説明により、削除されたOverflowMapはスループット改善をもたらしていないため、影響なしと考えられます。むしろコード簡潔化による保守性向上が期待されます。

関連Issue

なし

その他

  • AI補助で実装されたPRです
  • GetRangeWorkerの正確性問題(DoesOverflowチェックなしで使用される場合がある)を修正しています
  • Winden()呼び出しをTryGetRangeに統合することで、将来的にassertpropからの呼び出しが可能になる設計改善が含まれます

#129249 Add handling of RethrowAfterCatch exception in a few places

概要

#128728後の回帰修正。インタープリタモード1でRethrowAfterCatchExceptionがJITフレームを通過する際に処理されず、terminate called after throwing an instance of 'ResumeAfterCatchException'エラーで失敗していた問題に対応。インタープリタ実行ループに例外を適切に伝播させるため、マネージド・ネイティブ境界でRethrowAfterCatchExceptionをキャッチして再スローする処理を追加。

変更内容

  • src/coreclr/vm/dllimport.cpp: マネージド・ネイティブ相互運用層でRethrowAfterCatchExceptionのハンドリング追加(+2行)
  • src/coreclr/vm/gchelpers.cpp: GC支援関数内で例外伝播処理追加(+4行)
  • src/coreclr/vm/jithelpers.cpp: JIT支援関数内で例外ハンドリング追加(+4行)
  • src/coreclr/vm/prestub.cpp: プリスタブ処理で例外伝播対応(+4行)
  • src/coreclr/vm/threads.cpp: スレッド管理関数内で例外処理強化(+7/-2行)
  • src/coreclr/vm/threadsuspend.cpp: スレッド中断処理で例外ハンドリング追加(+2行)
  • src/coreclr/vm/virtualcallstub.cpp: 仮想呼び出しスタブで例外伝播処理追加(+10行)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

この修正は内部実装(ランタイムVM層)の変更であり、公開APIには影響しない。インタープリタ実行エンジンの例外ハンドリング改善であり、interp mode 1でのインタープリタライブラリテストの安定性向上を目的とする。


#129248 JIT: encapsulate all fields in GenTreeIntCon

  • 作成者: @Copilot
  • 作成日時: 2026年06月10日 17:34:04(UTC)
  • マージ日時: 2026年06月12日 10:31:11(UTC)
  • ラベル: area-CodeGen-coreclr

概要

JIT コンパイラの GenTreeIntCon ノード(整数定数を表す AST ノード)の全フィールドを private に変更し、アクセサメソッドを介してすべての読み取り/書き込みをルーティングします。これにより、定数ノードの変更を一元的に追跡/デバッグできるようになります。動作上の変更はなし。

変更内容

  • gentree.h: gtIconVal、gtCompileTimeHandle、gtFieldSeq、DEBUG-only の gtTargetHandle を private 化。既存の IconValue()/SetIconValue() との互換性維持のため GenTreeIntConCommon を friend 指定。新規アクセサ GetCompileTimeHandle()/SetCompileTimeHandle()、GetFieldSeq()/SetFieldSeq()、DEBUG-only GetTargetHandle()/SetTargetHandle() を追加。

  • 38 の JIT ソースファイル: 直接フィールドアクセスをすべて対応するアクセサメソッドに置き換え(例:node->AsIntCon()->gtIconVal → node->AsIntCon()->IconValue())。DEBUG-only アクセスは INDEBUG() マクロで保護。

  • フォーマット修正: assertionprop.cpp、gentree.cpp、lower.cpp など複数ファイルの末尾空白・行折り返し・インデント調整。

パフォーマンスへの影響

影響なし。機械的な置き換えであり、インラインされるアクセサメソッドのため実行時オーバーヘッドはなし。

関連Issue

なし

その他

  • natvis ファイル(clrjit.natvis)は意図的に private メンバを直接参照している点に注意。
  • x64、arm64、arm、riscv64、loongarch64 の checked/DEBUG 構成でのコンパイル検証済み。
  • 詳細な置き換え例:
// Before
ssize_t v = node->AsIntCon()->gtIconVal;
node->AsIntCon()->gtFieldSeq = nullptr;

// After
ssize_t v = node->AsIntCon()->IconValue();
node->AsIntCon()->SetFieldSeq(nullptr);

#129243 [browser][coreCLR] workaround Wasm.Build.Tests.IcuTests.FullIcuFromRuntimePackWithInvariant

概要

WebAssembly(WASM)ビルドにおいて、InvariantGlobalization=trueが設定されている場合でも、CoreCLRのランタイムパックから国際化(ICU)関連の静的アーカイブを常にリンクするようにしました。これにより、生成されるGlobalizationNative_* P/Invoke参照のリンク時の未定義シンボルエラーを回避します。

変更内容

  • src/mono/browser/build/BrowserWasmApp.CoreCLR.targets
    • libSystem.Globalization.Native.aとICUアーカイブ入力からCondition="'$(InvariantGlobalization)' != 'true'"の条件分岐を削除
    • これらのライブラリは常にCoreCLR WASMリンクステップに含まれるように変更

パフォーマンスへの影響

InvariantGlobalization=true設定時でも国際化関連ライブラリがリンクされるため、生成されるWASM出力のサイズが増加する可能性があります。

関連Issue

#129242(このPRで対応) #126946(テスト失敗の原因となったPR)

その他

このPRはテストWasm.Build.Tests.IcuTests.FullIcuFromRuntimePackWithInvariantの失敗に対する回避策(workaround)です。


#129218 Add async DataAnnotations bridge for Microsoft.Extensions.Options

概要

Microsoft.Extensions.Options.DataAnnotations ブリッジに非同期検証サポートを追加し、DataAnnotationValidateOptions<TOptions> が .NET 11+ で async オプション検証パイプラインに参加できるようにします。ValidateAsync メソッドは同期の Validate() と同じ再帰的な処理を行いつつ、Validator.TryValidateObjectAsync を使用して同期属性と AsyncValidationAttribute の両方を評価します。

変更内容

  • DataAnnotationValidateOptions.cs: .NET 11+ で IAsyncValidateOptions<TOptions> インターフェースを実装(#if NET11_0_OR_GREATER でガード)
  • DataAnnotationValidateOptions.Async.cs (新規): 再帰的な DataAnnotations 非同期検証処理の実装。[ValidateObjectMembers] と [ValidateEnumeratedItems] 属性をサポート
  • OptionsBuilderDataAnnotationsExtensions.cs: ValidateDataAnnotations() を更新し、.NET 11+ で同じバリデータインスタンスを IValidateOptions<T> と IAsyncValidateOptions<T> の両方に登録
  • ref アセンブリ: Microsoft.Extensions.Options.DataAnnotations.Async.cs を新規追加、csproj を更新
  • テスト: ValidateAsync の成功・失敗、名前マッチング、null オプション、IAsyncStartupValidator 統合、キャンセレーショントークン対応をカバー

パフォーマンスへの影響

影響なし

関連Issue

#129056、#128882

その他

  • ValidateAsync は ref/out パラメータを使用できない非同期メソッドの制限に対応するため、タプル戻り値 (bool success, List<string>? errors) を採用
  • .NET 11+ API である Validator.TryValidateObjectAsync と IAsyncValidateOptions<T> に限定(#if NET11_0_OR_GREATER)
  • #128788(async Options パイプライン)と #128656(AsyncValidationAttribute/Validator.TryValidateObjectAsync)の後続実装
  • Source generator サポート([OptionsValidator] による ValidateAsync() 生成)は #128882 で追跡

#129206 JIT: Allow optNarrowTree CAST case to match ULONG and LONG equivalently

概要

JITコンパイラのoptNarrowTreeCAST最適化ケースを修正し、ULONGとLONG型を同等に扱えるようにしました。これにより、キャスト操作の最適化がより広い範囲の整数型に対して正しく機能するようになります。

変更内容

  • src/coreclr/jit/optimizer.cpp: optNarrowTreeのCAST処理ロジックを修正(+15/-2)。ULONG型とLONG型の等価性判定を改善し、最適化の対象となる型の範囲を拡張。
  • src/tests/JIT/opt/InstructionCombining/: テストケースの調整
    • Casts.cs: テストケース更新(+1/-1)
    • Cmn.cs: テスト期待値修正(+1/-2)
    • Mvn.cs: 新しいテストケース追加(+12/-0)
    • Neg.cs: テスト期待値修正(+1/-2)

パフォーマンスへの影響

影響なし(最適化ロジックの修正であり、パフォーマンス改善またはデグラデーションの具体的情報は提供されていません)

関連Issue

#111888

その他

JIT内部実装(optimizer.cpp)の修正であり、公開APIへの影響はありません。命令結合(Instruction Combining)の最適化フェーズに関連する変更です。


#129200 [cDAC]: Implement GetTypedByRefInfo, GetStringData, GetArrayData, GetBasicObjectInfo

  • 作成者: @rcj1
  • 作成日時: 2026年06月09日 23:30:05(UTC)
  • マージ日時: 2026年06月12日 13:06:06(UTC)
  • ラベル: area-Diagnostics-cdac

概要

cDACコントラクトと従来のDAC/DBIブリッジを拡張し、オブジェクトとTypedByRefの検査APIをサポートしました。新しいAPI GetStringData()、GetSize()、GetTypedByRefInfo() を追加し、デバッガ側のオブジェクトデータ構造を DebuggerIPCE_ObjectData から DacDbiObjectData にリファクタリングしました。

void GetStringData(TargetPointer address, out uint length, out uint offsetToFirstChar);
ulong GetSize(TargetPointer address);
TypedByRefInfo GetTypedByRefInfo(TargetPointer typedByRef);

変更内容

  • cDACコントラクト追加

    • IObject に GetStringData() と GetSize() メソッドを追加(Object_1.cs)
    • IRuntimeTypeSystem に GetTypedByRefInfo() メソッドと TypedByRefInfo データ型を追加(RuntimeTypeSystem_1.cs)
    • 新しい TypedByRef データディスクリプタを実装(TypedByRef.cs)
  • DAC/DBIブリッジの実装更新

    • 管理されたDAC/DBI実装で新しいAPIに対応(DacDbiImpl.cs)
    • DebuggerIPCE_ObjectData を削除し、新しい DacDbiObjectData と DacDbiArrayInfo 構造体を導入(dacdbistructures.h)
    • IDL署名と出力パラメータを更新(dacdbi.idl)
  • デバッガ統合の更新

    • デバッガ側のオブジェクトデータ処理を新しい署名に対応(divalue.cpp、process.cpp、rspriv.h)
  • 単体テスト追加

    • GetStringData() と GetSize() の単体テストを追加(ObjectTests.cs、MethodTableTests.cs)
    • 文字列長/オフセットと固定サイズ/可変サイズオブジェクトの動作をアーキテクチャ横断で検証

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

このPRは公開API(IObject、IRuntimeTypeSystemコントラクト)を拡張するものです。デバッガの内部実装であるDAC/DBIインターフェースの構造体と署名が変更されています。DebuggerIPCE_ObjectData は削除されたため、この構造体に依存する既存のコードは DacDbiObjectData への移行が必要です。


#129166 FileStream.Unix: prevent open to cause setting the controlling terminal.

  • 作成者: @tmds
  • 作成日時: 2026年06月09日 12:58:15(UTC)
  • マージ日時: 2026年06月12日 08:40:49(UTC)
  • ラベル: area-System.IO

概要

Unix環境のFileStreamにおいて、ターミナルデバイス(シリアルポートなど)をオープンする際にO_NOCTTYフラグを追加し、デバイスがプロセスの制御ターミナルになることを防ぎます。このフラグがない場合、制御ターミナルを持たないプロセスでターミナルデバイスをオープンするとそれが制御ターミナルになり、デバイスが切断されたときに予期しないSIGHUPシグナルが送信されてプロセスが異常終了する問題が発生していました。

変更内容

  • src/native/libs/System.Native/pal_io.c: SystemNative_OpenシムにO_NOCTTYフラグを追加(+3行)。Unix上でのopen(2)呼び出しに常にこのフラグを含める。

パフォーマンスへの影響

影響なし

関連Issue

#129156

その他

  • この変更はFile/FileStreamおよび他のInterop.Sys.Open呼び出しサイト全体に適用されます。
  • POSIX標準のO_NOCTTYフラグを活用した低レベルの修正で、Unix/Linuxシステムにおける安定性向上を目的としています。

#129158 Fix Arraypool rent without try/finally block

概要

System.Formats.Tarライブラリにおいて、ArrayPoolから借り受けたバッファがtry/finallyブロックで確実に返却されるように修正しました。これにより、例外発生時にもバッファリークが発生しないようになります。

変更内容

  • TarHeader.Read.cs: ArrayPool借用時の例外安全性を向上。try/finallyブロックでバッファ返却を保証(+62/-37)
  • TarHeader.Write.cs: 同様にArrayPool借用箇所をtry/finallyで保護(+55/-45)
  • TarHelpers.cs: ヘルパーメソッドのバッファ管理をtry/finallyで保護(+47/-23)
  • TarWriter.cs: ライター内のArrayPool使用箇所を例外安全化(+29/-19)

パフォーマンスへの影響

影響なし(try/finallyブロック追加による構造的な最適化)

関連Issue

#129158

その他

本修正は例外安全性の向上に関するものであり、公開APIの動作は変わりません。ArrayPoolから借用したバッファが適切に返却されることで、メモリリークを防止します。


#129150 [release/9.0-staging] Update dependencies from dotnet/cecil

概要

dotnet/cecilの依存関係を更新するPull Requestです。Microsoft.SourceBuild.Intermediate.cecilおよびMicrosoft.DotNet.Cecilを、バージョン0.11.5-alpha.26281.4から0.11.5-alpha.26307.3に更新しています。

変更内容

  • eng/Version.Details.xml: dotnet/cecilの依存関係メタデータを更新(+4/-4行)
  • eng/Versions.props: バージョン定義を更新(+1/-1行)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

このPRはdotnet-maestro[bot]による自動依存関係更新です。release/9.0-stagingブランチへの更新となります。


#129140 Add Wasm32 ISA and PackedSimd ISA

概要

WebAssembly 32ビット(Wasm32)アーキテクチャに対するISA定義を追加し、WasmBase、PackedSimd、Vector128の3つのISAを導入します。現段階ではSIMDサポート機能の実装はまだ行われず、将来のSIMD対応作業への基盤整備です。JIT/EEインターフェースの仕様変更に伴いGUIDが更新されています。

変更内容

  • InstructionSetGenerator.cs: Wasm32をWASMにマッピングしネイティブガード生成時にTARGET_WASMを使用
  • InstructionSetDesc.txt: Wasm32 ISA定義と暗示チェーンを追加、R2Rビット91–92を予約
  • CorInfoInstructionSet.cs: Wasm32 ISA列挙型と暗示/検索ロジックを管理JITインターフェースに追加
  • ReadyToRunInstructionSet.cs: WasmBase=91およびPackedSimd=92をマネージドR2R列挙型に追加
  • readytoruninstructionset.h: ネイティブR2R列挙型にREADYTORUN_INSTRUCTION_WasmBase=91と..._PackedSimd=92を追加
  • ReadyToRunInstructionSetHelper.cs: Wasm32命令セットをR2R命令セットにマッピング(Vector128は非R2R)
  • corinfoinstructionset.h: TARGET_WASM ISA ID、検証、文字列変換、R2Rマッピングを追加
  • jiteeversionguid.h: ISA契約変更を反映してJIT/EEインターフェースGUIDを更新

パフォーマンスへの影響

影響なし(基盤整備のため、実装による機能向上はまだ行われていません)

関連Issue

なし

その他

このPRは、将来のWasm32 SIMD機能実装のための準備作業です。JIT/EEインターフェースGUID変更に伴い、相互運用性に関連するバージョン管理が必要です。


#129117 [release/10.0] Update dependencies from dotnet/xharness

概要

dotnet/xharnessの依存関係を更新するプルリクエストです。Microsoft.DotNet.XHarness関連パッケージを11.0.0-prerelease.26279.1から11.0.0-prerelease.26301.2にアップデートします。

変更内容

  • .config/dotnet-tools.json: ツール設定の更新(+1/-1)
  • eng/Version.Details.props: バージョン詳細プロパティの更新(+3/-3)
  • eng/Version.Details.xml: バージョン詳細XMLの更新(+6/-6)

更新対象パッケージ:

  • Microsoft.DotNet.XHarness.CLI
  • Microsoft.DotNet.XHarness.TestRunners.Common
  • Microsoft.DotNet.XHarness.TestRunners.Xunit

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • このプルリクエストはdotnet-maestro[bot]による自動更新です
  • release/10.0ブランチへのアップデートです
  • xharnessのコミット: fa7fbebf9168e8858971f9d0c71b2b08f2f7b106(mainブランチ)
  • 更新日時: 2026年6月1日11:40:40 UTC

#129116 [release/9.0-staging] Update dependencies from dotnet/xharness

概要

dotnet/xharnessからの依存パッケージを更新するPull Requestです。Microsoft.DotNet.XHarness関連のパッケージを11.0.0-prerelease.26279.1から11.0.0-prerelease.26301.2にバージョンアップしています。

変更内容

  • .config/dotnet-tools.json: XHarnessツール参照の更新(+1/-1)
  • eng/Version.Details.xml: Microsoft.DotNet.XHarness.CLI、Microsoft.DotNet.XHarness.TestRunners.Common、Microsoft.DotNet.XHarness.TestRunners.Xunitのバージョン情報更新(+6/-6)
  • eng/Versions.props: バージョン定義の更新(+3/-3)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

このPRはdotnet-maestro[bot]による自動依存関係更新です。release/9.0-stagingブランチへの更新で、xharnessのコミット fa7fbebf9168e8858971f9d0c71b2b08f2f7b106(2026年6月1日)を反映しています。


#129083 Make Condition to not use ConditionalWeakTable

概要

Monitor.Wait/Pulse/PulseAllの実装をConditionalWeakTableから削除し、LockにConditionを直接関連付けることで最適化するもの。ManualResetEventSlimがMonitor.Waitを使用して実装されており、Task待機シナリオで頻繁に使用される際の問題を解決します。主な課題は、ConditionalWeakTableの使用により:

  • 従属ハンドルがGC回の全体に影響を与える
  • テーブル全体のロック取得がコア数が多い環境で競合する

可能な限りConditionalWeakTableを避け、Lock内にConditionを直接格納する設計に変更。

変更内容

  • Monitor.cs: Wait/Pulse/PulseAllをSync blockのLock経由で処理(グローバルテーブルを削除)
  • Lock.cs: _waitEventOrConditionユニオンフィールドを追加し、内部Wait/Pulse/PulseAll機能を実装
  • Condition.cs: ウェイター管理とシグナリング戦略をリファクタリング、Lock用のウェイトイベントストレージを追加
  • ManualResetEventSlim.cs: 内部ロックをLockに変更、シグナル状態とウェイター数処理を書き直し
  • corelib.h: バインダーフィールドからMonitor.s_conditionTableを削除、Lock._waitEventOrConditionを追加
  • dacdbiimpl.cpp: モニター待機列挙処理をSync blockのLockフィールド経由で検出に変更

パフォーマンスへの影響

  • GC負荷削減: 従属ハンドルの生成を排除(#79062関連)
  • ロック競合削減: テーブル全体ロック取得の廃止により、コア数が多い環境での競合を緩和
  • メモリ効率向上: グローバルテーブルを削除(具体的なベンチマーク結果は提供されていない)

関連Issue

#129083、#79062

その他

  • Wait/Pulse/PulseAll機能はLockで内部的にのみ有効化(将来的に公開APIとして公開する可能性あり)
  • 診断コード(DAC/DBI)も更新し、Monitorの静的テーブル経由ではなくLock経由でモニターウェイターを検出

#129029 [ci-scan] Fix crossgen2_comparison.py Python 3.14 asyncio compatibility

概要

Python 3.14でasyncioの非推奨な暗黙的なイベントループ作成が削除されたことによるRuntimeErrorをmacOS Helix環境で修正します。crossgen2_comparison.pyスクリプトで、従来のasyncio.get_event_loop()パターンをasyncio.run()に置き換えています。

変更内容

  • src/tests/Common/scripts/crossgen2_comparison.py: AsyncSubprocessHelper.run_to_completion()メソッド内のイベントループ管理を更新
    • 廃止予定パターン:asyncio.get_event_loop() → loop.run_until_complete() → loop.close()
    • 新パターン:asyncio.run()に統一(+1/-3行)
    • asyncio.run()はPython 3.7以降で利用可能であり、イベントループポリシー(__init__で設定されるWindowsProactorEventLoopPolicyなど)を正しく尊重します

パフォーマンスへの影響

影響なし

関連Issue

#129211

その他

  • 影響を受けるパイプライン: runtime-coreclr crossgen2 outerloop (def 134) — osx-arm64 Helix agent
  • 原因: Python 3.14でmainスレッドから実行中ループなしでasyncio.get_event_loop()呼び出し時の暗黙的なイベントループ作成が削除された
  • 互換性: APIマイグレーションであり、セマンティクスは同一です。既存のクロスジェン2比較テストで動作検証済み

#129016 Compute all checksums before emitting into image stream

  • 作成者: @jtschuster
  • 作成日時: 2026年06月04日 21:31:39(UTC)
  • マージ日時: 2026年06月12日 10:32:33(UTC)
  • ラベル: area-ReadyToRun

概要

CoreCLR AOT ツール(crossgen2/ilc)のイメージ生成時に、メモリ上の完全なイメージコピーを作成する代わりに、既存のストリームを使用してチェックサムを計算してから最終イメージにチェックサム reloc を出力するように改善しました。これにより大規模なメモリ割り当てを回避し、32ビット CI で発生していた OOM(メモリ不足)を防ぎます。

変更内容

  • ISymbolNode.cs: チェックサム計算に関するシンボルノードインターフェイスを更新(+9/-1)
  • ObjectWriter.cs: オブジェクトライターの実装を修正し、ストリームベースのチェックサム計算を統合(+16/-9)
  • PEObjectWriter.cs: PE オブジェクトライター内でチェックサム計算処理を変更(+13/-6)
  • DebugDirectoryEntryNode.cs: デバッグディレクトリエントリノードでのチェックサム処理を調整(+5/-3)

パフォーマンスへの影響

メモリ割り当て削減による改善:

  • イメージ生成時のメモリ使用量を削減(完全なメモリコピーを回避)
  • 32ビット環境での OOM(メモリ不足エラー)の発生頻度を低減
  • ストリームベースの処理により、特に大規模アセンブリのコンパイル時にメモリ圧力を緩和

関連Issue

なし

その他

本プルリクエストは GitHub Copilot の支援を受けて作成されました。


#128952 [release/10.0] Fix iossimulator build with XCode 26.4

概要

Xcode 26.4との互換性を確保するため、iOS Simulator ビルドにおける型キャストの問題を修正しました。この修正は #128893 の release/10.0 ブランチへのバックポートです。

変更内容

  • pal_calendarData.m: 1行の変更(キャスト追加)
  • pal_collation.m: 14行の変更(複数のキャスト追加)
  • pal_x509_ios.c: 2行の変更(キャスト追加)

いずれも System.Globalization.Native および System.Security.Cryptography.Native.Apple ライブラリの内部実装の修正で、公開APIに影響はありません。

パフォーマンスへの影響

影響なし。型キャスト追加のみのため、パフォーマンスに変化なし。

関連Issue

#128893(オリジナルのPull Request)

その他

  • 内部で検出された問題で、カスタマーレポートではありません
  • 回帰なし
  • リスク評価:Low(キャスト追加のみ)
  • CI テスト済み

#128945 Localized file check-in by OneLocBuild Task: Build definition ID 679: Build ID 2998817

概要

OneLocBuildタスクによる自動チェックインPRです。System.Text.Json.genのリソースファイル(.xlf形式)の多言語翻訳内容を更新します。翻訳パイプラインから返却された翻訳ファイルを一括チェックインする定期的なメンテナンスです。

変更内容

  • System.Text.Json/gen/Resources/xlf配下の多言語リソースファイルを更新
    • Strings.cs.xlf(マスターファイル)
    • Strings.de.xlf(ドイツ語)
    • Strings.es.xlf(スペイン語)
    • Strings.fr.xlf(フランス語)
    • Strings.it.xlf(イタリア語)
    • Strings.ja.xlf(日本語)
    • Strings.ko.xlf(韓国語)
    • Strings.pl.xlf(ポーランド語)
    • Strings.pt-BR.xlf(ポルトガル語(ブラジル))
    • Strings.ru.xlf(ロシア語)
    • Strings.tr.xlf(トルコ語)
    • Strings.zh-Hans.xlf(簡体字中国語)
    • Strings.zh-Hant.xlf(繁体字中国語)
  • 各ファイルで同じ規模の変更(+7/-7)

パフォーマンスへの影響

影響なし。リソースファイルのメンテナンスのため、ランタイムのパフォーマンスに変更なし。

関連Issue

なし

その他

翻訳に問題がある場合は、https://aka.ms/icxLocBug でバグを報告してください。OneLocBuild処理の詳細は https://aka.ms/onelocbuild を参照。


#128927 Privatize NativeAOT libunwind symbols

  • 作成者: @sbomer
  • 作成日時: 2026年06月03日 00:36:51(UTC)
  • マージ日時: 2026年06月12日 00:20:56(UTC)
  • ラベル: area-NativeAOT-coreclr

概要

NativeAOT ランタイムにおいて、libunwind シンボルの衝突を防ぐため、in-tree llvm-libunwind ソースを単一の再配置可能オブジェクトにビルドし、その定義されたグローバルシンボルをローカライズ(非公開化)する変更です。これにより、外部 libunwind とのリンク時の競合を回避します。

変更内容

  • src/coreclr/nativeaot/Runtime/CMakeLists.txt: libunwind と unwinding ヘルパーを非Unix ターゲットおよび Apple/WASM では除外した条件付きパスを追加
  • src/coreclr/nativeaot/Runtime/Full/CMakeLists.txt:
    • Runtime.PrivateLibunwind.o を再配置可能リンク (ld -r) でビルドし、objcopy --localize-symbols でシンボルを非公開化
    • Runtime.WorkstationGC と Runtime.ServerGC に此オブジェクトをリンク(Unix NativeAOT ビルド)
    • シンボルリスト生成用 CMake スクリプト GeneratePrivateLibunwindSymbols.cmake を新規追加

パフォーマンスへの影響

影響なし

関連Issue

#121172

その他

前回のアプローチ(ifdef 使用)では、除外されたシンボルが libgcc から解決される問題が発生していました(#128830参照)。本変更は再配置可能リンクによってシンボルを早期に解決し、その後ローカライズすることで、そうした脆弱性を回避しています。


#128420 Convert corehost hostmisc trace and fx_ver to C

  • 作成者: @Copilot
  • 作成日時: 2026年05月20日 23:41:08(UTC)
  • マージ日時: 2026年06月12日 22:24:45(UTC)
  • ラベル: area-Host

概要

corehost の C++ から C への移行の一環として、hostmisc の trace と fx_ver モジュールを C に変換し、PAL/utils を C から呼び出し可能な形に再編成しました。trace.cpp を trace.c に置き換え、SemVer パーサーを C 実装に移行しながら、既存の C++ 呼び出し元向けのインライン互換層を提供します。CMake の更新で minipal を host バイナリにリンクしています。

変更内容

  • trace: hostmisc/trace.cpp → hostmisc/trace.c に置き換え、C API(trace_*)と C++ インライン forwarders(trace::)を提供
  • fx_ver: SemVer パーサーを hostmisc/fx_ver.{c,h} に C 実装として移動、fxr/fx_ver.cpp は C 実装のラッパーに簡素化
  • pal/utils: pal.h/utils.h を C 互換セクションと C++ セクション(#ifdef __cplusplus)に再編成、対応する .c ファイルを追加して C から呼び出し可能に
  • ビルド: minipal/minipal_objects を host バイナリおよび静的ライブラリにリンク

パフォーマンスへの影響

バイナリサイズが削減:

  • Windows x64: apphost.exe −6.27%、dotnet.exe −9.28%、nethost.dll −13.43%
  • Linux x64: apphost −3.69%、dotnet −4.34%、libnethost.so −3.96%

静的ライブラリ(.a/.lib)は minipal_objects 追加により若干増加しますが、リンク時の不要コード削除で対応可能です。

関連Issue

#126367

その他

  • apphost と nethost の完全な C 化については今後の段階で実施予定
  • hostfxr/hostpolicy の C API 移行は将来検討(利用方法がより複雑なため)
  • 既存の C++ 呼び出し元との互換性維持のため、C++ ラッパー層を残して段階的な移行を可能に

#128224 [release/9.0] Update dependencies from dotnet/emsdk

概要

dotnet/emsdkリポジトリの依存関係を更新するPull Request。Emscripten Workloadに関連するNuGetパッケージを9.0.17から9.0.18へアップグレードします。release/9.0ブランチ向けの依存更新です。

変更内容

  • NuGet.config: パッケージソース設定を1行更新
  • eng/Version.Details.xml: 以下の3つのパッケージバージョンを更新
    • Microsoft.SourceBuild.Intermediate.emsdk(9.0.17-servicing.26258.3 → 9.0.18-servicing.26310.2)
    • Microsoft.NET.Workload.Emscripten.Current.Manifest-9.0.100.Transport(9.0.17-servicing.26258.3 → 9.0.18-servicing.26310.2)
    • Microsoft.NET.Workload.Emscripten.Current.Manifest-9.0.100(9.0.17 → 9.0.18)
  • eng/Versions.props: バージョン定義を2行更新

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • 自動依存更新ツール(dotnet-maestro[bot])により作成
  • Emscriptenは.NETのWebAssembly(WASM)開発向けWorkloadの重要コンポーネント
  • 内部実装変更の可能性があるため、関連するWASM開発での互換性確認を推奨

#127493 Fix race condition in System.Threading.Overlapped tests causing IOException on Windows ARM64

  • 作成者: @Copilot
  • 作成日時: 2026年04月28日 06:10:18(UTC)
  • マージ日時: 2026年06月12日 01:34:49(UTC)
  • ラベル: area-System.Threading

概要

Windows ARM64でのPGOストレステスト中にPackPosTestとPackPosTest1でレース条件が発生し、IO完了コールバック内のEventWaitHandle.Set()でIOException: The handle is invalidが間欠的に発生していた問題を修正します。

GCがアンマネージドポインタを追跡できないため、helper.Wait()から戻った後にJITがhelperをデッドと判定し、ファイナライザが2番目のコールバック実行前にManualResetEventハンドルをクローズしていました。修正ではhelper.Wait()後にGC.KeepAlive(helper)を追加し、マネージドライフタイムをコールバックチェーン全体に延長します。

Assert.True(ThreadPool.UnsafeQueueNativeOverlapped(nativeOverlapped));
Assert.True(helper.Wait());
GC.KeepAlive(helper);  // prevent finalization before second IOCP callback fires

変更内容

  • src/libraries/System.Threading.Overlapped/tests/OverlappedTests.cs: PackPosTestとPackPosTest1の両メソッドで、helper.Wait()呼び出し後にGC.KeepAlive(helper)を追加(+2行)

パフォーマンスへの影響

影響なし(テストコードのレース条件修正のため)

関連Issue

#127366

その他

  • この不具合はテスト作成時からの潜在的な問題でしたが、Windows ARM64上でのdefaultpgoストレステストの実行タイミング下でのみ表面化しました
  • System.Threading.Overlappedライブラリの公開API自体の変更ではなく、テストコードのみの修正です

#126845 Don't use callbacks when performing sync IO with async handles

概要

非同期ファイルハンドル(FILE_FLAG_OVERLAPPED)での同期I/O実行時、RandomAccess.Windows.csのIOCP(I/O Completion Port)コールバック経由のアプローチを廃止。OVERLAPPED構造体のhEvent低位ビットを設定してIOCP完了キューイングを抑制し、シンプルなManualResetEventベースのアプローチに変更。これにより複雑性と割り当てが削減され、エラーハンドリングと例外待機パスの正確性が向上し、同期オーバー非同期パスのハンドル生存期間安全性が強化される。

変更内容

  • RandomAccess.Windows.cs: ThreadPoolBoundHandleを使用したNativeOverlapped割り当てとコールバック/参照カウンティング機構を削除。NativeMemory.AllocZeroedとManualResetEventに置き換え。OVERLAPPED.hEventにeventHandle | 1を設定してIOCP完了ポート通知を抑制。不要になったコールバック関連コード(s_callback、コールバック割り当て機構、CallbackResetEventクラス)を削除。
  • SafeFileHandle.OverlappedValueTaskSource.Windows.cs: OverlappedValueTaskSourceの追加定義(28行追加)
  • Mixed.Windows.cs: 同期/非同期混合I/Oシナリオのテスト追加(76行追加)

パフォーマンスへの影響

  • メモリ割り当て削減:ThreadPoolBoundHandle割り当ておよびコールバック関連オブジェクトが不要化
  • IOCP完全キューイング回避による処理削減
  • マネージド待機動作の保全

関連Issue

#126845

その他

  • 内部実装の変更で、公開API互換性への影響なし
  • エラーハンドリングと例外待機パスの正確性向上は非推奨機構の廃止による副次効果

#126751 Add missing meta-packages and binary-free packages to PackageOverrides.txt

  • 作成者: @Copilot
  • 作成日時: 2026年04月10日 16:02:47(UTC)
  • マージ日時: 2026年06月12日 07:38:50(UTC)
  • ラベル: area-Setup

概要

PackageOverrides.txtに欠落していたメタパッケージ、RIDセレクタパッケージ、ネイティブのみのパッケージを追加します。このファイルは共有フレームワークのNuGet枝刈りデータを定義します。旧TFM(netcoreapp1.0/1.1、netstandard1.6/2.0)の依存関係グラフに含まれるが、マネージドバイナリを持たないパッケージ27個を新たに登録します。

変更内容

  • src/installer/pkg/sfx/Microsoft.NETCore.App/PackageOverrides.txt
    • メタパッケージ:NETStandard.Library|2.0.3、Microsoft.NETCore.App|2.2.8、Microsoft.NETCore.Platforms|7.0.4、Microsoft.NETCore.Targets|5.0.0、ランタイムコンポーネント用RIDセレクタ、ホスト配布用メタパッケージを追加
    • 汎用runtime.native.*ルートパッケージ(RIDセレクタ):runtime.native.Systemおよびシステムコンポーネント関連のパッケージを追加
    • プラットフォーム固有エントリ:debian.9、fedora.27/28、opensuse.42.3、ubuntu.18.04向けのSystem.Security.Cryptography関連パッケージを追加(+82/-55行)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

本変更は内部実装(NuGetメタデータ)の更新であり、公開APIへの影響はありません。以前のTFMとの互換性維持のための基盤整備です。


#126324 [browser][coreCLR] event pipe and browser profiler

概要

このPRは、単一スレッドのブラウザ/WASI環境でのCoreeCLRインタープリタに対して、2つのWASMプロファイリング機能を追加します:

  1. EventPipe CPU サンプリングプロファイラー — dotnet-traceや JS collectCpuSamples APIで利用可能な.nettrace形式のCPUサンプルを生成する協調型シングルスレッドサンプリングプロファイラー
  2. ブラウザDevTools プロファイラー — performance.measure()呼び出しを発行し、ブラウザのパフォーマンスタブでマネージドメソッド実行がネストされたフレームチャートとして表示される

両機能はDOTNET_WasmPerformanceInstrumentationメソッドセットフィルタで選択可能で、既存のWasmPerformanceInstrumentation MSBuildプロパティ(CoreCLR互換構文)を通じて有効化されます。

変更内容

  • インタープリタ新オペコード追加 (intops.def):

    • INTOP_PROF_SAMPLEPOINT — メソッド入口とループバックエッジで発行、EventPipeサンプリングプロファイラーを駆動
    • INTOP_PROF_ENTER/INTOP_PROF_LEAVE — メソッド入出口で発行、ブラウザDevToolsプロファイラーを駆動
  • EventPipe CPU サンプリング実装 (ep-rt-coreclr-wasm-sampling.cpp):

    • インタープリタのサンプルポイント呼び出し時に動作
    • スキップカウンター機構でサンプリング間隔を適応的に計算
    • マネージドスタックを走査してサンプルプロファイルイベントを記録
  • ブラウザDevTools プロファイラー実装 (browserprofiler.cpp):

    • メソッド入出時刻をシャドウスタックで管理
    • performance.measure()呼び出しでブラウザパフォーマンスチャートに表示
    • レート制限付き適応的スキップカウンター
  • MSBuild統合 (BrowserWasmApp.CoreCLR.targets等):

    • WasmPerformanceInstrumentationプロパティをCoreeCLR環境変数に変換
    • allワイルドカード*へマッピング、ネイティブビルド強制化
  • テスト更新 (EventPipeDiagnosticsTests.cs):

    • 既存Mono AOT専用テストを分割、CoreeCLRでも実行可能に
    • Wasm.Build.Tests.Blazor.EventPipeDiagnosticsTestsをテストシナリオに追加

パフォーマンスへの影響

  • スキップカウンター機構により、各サンプルポイントでのオーバーヘッドを最小化
  • 指数移動平均を用いた適応的な再計算で、望ましいサンプリング間隔に対応
  • ブラウザプロファイラーのレート制限で、過度なperformance.measure()呼び出しを抑制
  • マルチスレッドビルドではコールバックはno-opのままで、既存スレッド型プロファイラーが使用される

関連Issue

[#128745](https://github.com/dotnet


#123138 arm64: Add support for BFI and BFX instruction

概要

ARM64アーキテクチャにおいて、ビット領域の挿入・抽出を効率化するBFI(Bit Field Insert)およびBFX(Bit Field Extract)命令のサポートを追加しました。JITコンパイラの最適化レイヤーで、ビットパッキング・アンパッキングパターンを認識して、これらの専用命令に変換します。

BFI使用例:

return (a & 0xf) | ((b & 0x3) << 4);  // 複数値を整数に詰め込む

BFX使用例:

return (x >> 5) & 0x1F;  // 連続ビット範囲を抽出

変更内容

  • JITコンパイラの最適化(lower.cpp):BFIおよびBFXのパターンマッチング・ノード変換ロジックを実装(87行追加)
  • 命令定義(gentree.h, gentree.cpp):新しいGT_BFI、GT_BFXノード型を定義(55行追加)
  • ARM64コード生成(codegenarm64.cpp):BFI/BFX命令のコード生成処理を実装(31行追加)
  • レジスタ割り当て(lsraarm64.cpp):BFI/BFX命令のレジスタ確保戦略を定義(8行追加)
  • テスト(Bfx.cs/csproj):BFXおよび関連パターンの統合テストを追加(493行)

パフォーマンスへの影響

命令削減によるコードサイズと実行速度の改善が期待されます。BFIはOR + AND + LSHの3命令を1命令に、BFXはAND + RSHの2命令を1命令に短縮します。具体的なベンチマーク結果は提供されていません。

関連Issue

なし

その他

このPRは内部実装(JITコンパイラの最適化)の追加であり、公開APIの変更ではありません。ARM64アーキテクチャのみへの影響となります。


目次