#122780 Consolidate classlibnative directory into vm
src/coreclr/classlibnativeディレクトリをすべてsrc/coreclr/vmに統合するリファクタリング。classlibnativeに残されていたコードが少なかったため、ディレクトリ構造を簡潔にして保守性を向上させる変更。同時に不要な死コードも削除。
dotnet/runtimeにマージされたPull RequestをAIで日本語要約
このページは、dotnet/runtimeリポジトリにマージされたPull Requestを自動的に収集し、その内容をAIが要約した内容を表示しています。そのため、必ずしも正確な要約ではない場合があります。
この月にマージされた 53 件を新しい日から順に並べています。タイトルをクリックするとその日のページの該当箇所へ移動します。Bot が作成した 24 件はタイトルのみにして、各日の最後にまとめています。
src/coreclr/classlibnativeディレクトリをすべてsrc/coreclr/vmに統合するリファクタリング。classlibnativeに残されていたコードが少なかったため、ディレクトリ構造を簡潔にして保守性を向上させる変更。同時に不要な死コードも削除。
ICU v78への対応により、IDN(国際化ドメイン名)の処理とJapaneseCalendarの明治時代開始日が変更されました。明治時代の開始日が1868-09-08から1868-10-23に更新され、IDN処理も新しい仕様に準拠するようになります。これはグローバライゼーション関連の破壊的変更となり、該当APIを使用するアプリケーションでは動作検証が必要です。
System.DirectoryServices.AccountManagementのSAMStoreCtx.csにおいて、Principalインスタンス生成時に_sidが初期化されていない場合、principalSidがnullになる可能性があった。Linux Verification Center(SVACE)によって検出されたNullReferenceException(NRE)の潜在的な脆弱性を修正し、652行目のnullチェックを追加してこの問題を解決している。
System.Security.Cryptography.Native ライブラリの X.509 処理において、メモリ不足エラー時にファイルディスクリプタがリークしていた問題を修正します。opendir()で開かれたディレクトリストリームが、メモリ割り当て失敗時に適切にクローズされていませんでした。Linux Verification Center の静的解析ツール SVACE により検出されました。
このPRはLoongArch64(LA64)アーキテクチャ向けのTLS(スレッドローカルストレージ)リゾルバーコードの検証を行うもので、PR#108419の対応をLoongArch64に適用しています。TLS Descriptorリロケーションタイプ(R_LARCH_TLS_DESC6)を有効にするため、コンパイルパラメータ-mtls-dialect=descを追加しています。
このPRは、メタデータ管理の責務分離を目的として、ストレージプール関連のコード(stgpool)をVM内部から独立したメタデータサブシステムに移動しました。メモリストリーム機能を独立したmemorystreams.*に抽出し、VMのメタデータ内部実装への依存性を排除しています。
WebAssemblyのブラウザランタイムにおいて、メインメソッドの実行制御とユニットテスト用のインフラストラクチャを強化するPRです。dotnet.runMainAndExit()とdotnet.runMain()の新APIを追加し、dotnet.run()の動作を変更(CoreCLRではランタイムを生存させる)。診断機能(dotnet.diagnostics.js)を追加し、スタックトレースの記号化、終了処理、コンソール転送などのテスト支援機能を実装しました。
WebAssemblyブラウザアプリケーション関連のHTMLファイルにダミーアイコンとテンプレートアイコンを追加するPR。テストログに出現していた404エラー(アイコンファイル不在)を解消することが目的。ダミーアイコンは最小限のPNG形式で、デフォルトWASMテンプレートには実際のdotnetアイコンを使用。
マシンが高負荷状態にある場合、QueueUserAPC2 APIが失敗する可能性があります。本PRではこの失敗を適切に処理するため、スレッド一時停止時のQueueUserAPC2エラーハンドリングを改善しました。失敗時には他の機構(hijackingなど)による一時停止の試行に頼り、APIの失敗を無視する戦略を採用しています。
dotnet/runtimeのビルドパイプラインにおいて、ログアーティファクトの収集対象にCMakeConfigureLog.yamlファイルを追加するPRです。従来はbinlogファイルのみ収集していましたが、CMakeの構成結果を含めることで、ビルド時の内部検査結果の追跡が容易になります。global-build-job.ymlに変更を加え、artifacts/objフォルダが存在する場合のみこのファイルをコピーするよう条件付きで実装されています。
デバッグビルドで発生していたコード分析エラー(IDE0036)を修正するPR。System.Threading.Interlocked.CoreCLR.csの149行目でmodifiersの順序が正しくなかったため、修飾子の順序を統一してビルドエラーを解決しました。
ロック(Monitor)のアップグレード処理におけるGCホール問題を修正するPR。NativeAOTで使用されているポインタオーバーロード版のCompareExchangeをCoreClrに適用し、ARM32プラットフォームで完全に形成されたrefが報告されることによるクラッシュを防止。
P/Invoke(DllImport)メソッドとデリゲートのInvokeメソッドに対して、asyncメソッドフラグが設定されるシナリオを防ぐための改善。Roslynはこれらのメソッドにasyncマークを付けないため、不正な組み合わせの検出と エラーハンドリングを強化しました。例えば以下のような不正なコードはロード時に失敗します:
[DllImport("kernel32.dll")]
private static extern Task QueryPerformanceFrequency(out long frequency);
CoreCLR PAL(Platform Abstraction Layer)内の未使用コードをクリーンアップするPRです。主にセキュアCRT関連の実装ファイルと、使用されていない文字列操作関数を削除しています。コードベースの保守性向上を目的とした整理です。
eng/build.ps1のbootstrapビルド後に終了コードチェックを追加するPR。従来はbootstrapビルドの失敗が無視され、その後のアーティファクト削除とメインビルドが実行されていました。この修正により、bootstrap失敗時は即座にビルドが停止し、開発者に明確なエラーメッセージが表示されます。
if ($lastExitCode -ne 0) {
Write-Error "Bootstrap build failed. Stopping build."
exit 1
}
GC情報ダンパーとデコーダーから廃止されたオフセット調整を削除するクリーンアップPRです。gcinfodumper.cppとgcinfodecoder.cppの2ファイルから不要なオフセット調整処理を削除し、コードを簡潔化しています。
WindowsでのタイマーAPI実装をGetTickCount64からQueryUnbiasedInterruptTimeに変更し、スリープ・休止時間を除外してタイマー応答性を向上させます。これにより、Windows上のEnvironment.TickCount64の動作がUnix系プラットフォーム(Linux/macOS)と一貫性を持つようになり、アプリケーションがタイマー精度を向上させるためのオプト設定(例:timeBeginPeriod)に対応可能になります。
LoongArch64プラットフォームにおいて、プロファイラーテスト(slowpatheltenter.sh)でFp32x2StructFuncがランダムに失敗する問題を修正したPRです。struct{single, single}型の引数を処理する際に、ProfileArgIterator::GetNextArgAddr()でバッファアドレスを正しく返すように改善しました。500回のテスト実行で確認されています。
Native AOT コンパイルで runtime-async が有効な場合、MethodBase.GetCurrentMethod()が非同期メソッド内で正常に動作するように修正しました。以下のコードが正常に実行されるようになります。
static async Task MyAsyncMethod()
{
MethodBase currentMethod = MethodBase.GetCurrentMethod();
Console.WriteLine($"Current method: {currentMethod?.Name}");
await Task.Delay(100);
}
FrozenDictionary/FrozenSetの作成時に、極めて大きな文字列(Array.MaxLengthに近いサイズ)を使用した場合にLengthBucketsの計算でinteger overflowが発生し、負の値がArrayPool<T>.Shared.Rentに渡されてArgumentOutOfRangeExceptionが発生していた問題を修正しました。オーバーフロー検出を追加してバケット作成を防止します。
Native AOT対応のARM64プラットフォームにおいて、CFG(Control Flow Guard)テスティングを追加するPull Requestです。従来はx64でのCFGテストが実施されていましたが、ARM64プラットフォームでも同等のテストカバレッジを確保することで、ネイティブコンパイル時のセキュリティ機能の品質向上を目指しています。
Native AOTのreproプロジェクトをPull Request #122227の変更に合わせて更新したマイナーな修正です。repro.csprojファイルの1行が変更されており、プロジェクト設定の同期が目的と考えられます。
.NET Nativeの呼び出し規約変換から残されていた冗長なRhpUniversalTransition関数を削除するPR。テールコール用途のUniversal Transitionのみが必要であるため、汎用版を削除して余分なコードを整理します。複数のアーキテクチャ(x64、ARM、ARM64、i386、LoongArch64、RISC-V)とNativeAOTランタイムに関連する変更が含まれています。
マネージド型システムAPIをUTF-8ベースに移行し、文字列割り当てを削減するメモリ最適化を実施。複数のコンパイラツールチェーン関連ファイルで、名前マングリング・メタデータ処理・IL生成などの処理をUTF-8操作に統一し、不要な文字列アロケーションを削減。
x64プラットフォームでランタイム非同期実行時のハイジャッキング処理を修正するPRです。GC割り込み時に継続レジスタ(continuation register)を適切に保存・復元することで、非同期GCが正常に動作するようにします。これはNative AOTランタイムがJIT/VM側の非同期GC対応に合わせるための変更です。
async メソッド内のラムダ式に対するデータフロー分析のバグを修正するPull Requestです。#122450と同様の修正パターンに従っており、ILLink と Roslyn analyzer で共有されているコードに async バリアントを理解させるのではなく、実装レベルでの対応を施しています。
Utf8String型の暗黙的な文字列変換演算子を削除するPR。複数のファイルで暗黙的な変換が明示的な文字列またはバイト配列コンストラクタに置き換えられています。これにより不要なメモリ割り当てを防ぎ、コード内のメモリ割り当てをより明示的にします。
Issue #122479のランタイム障害に対する一時的な回避策として、Thread.ClearWaitSleepJoinState()メソッドにNoInliningとNoOptimization属性を追加しました。コンパイラの最適化によって引き起こされるスレッド待機/スリープ/結合状態遷移の問題を防ぐための最小限の変更です。
[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)]
private static void ClearWaitSleepJoinState()
UInt128からdouble への変換において、2^104以上の値で発生していた精度問題を修正しました。この問題はInt128にも同様に存在していたため、両方の型で修正が適用されています。変換ロジックの微調整により、大きな値の浮動小数点変換精度が向上します。