C++Builderでスレッド(std :: threadなど)を作成するアプリケーションをWindows 64-bit向けにビルドすると、一部のWin64マシンにおいてアクセス違反が発生するスレッドローカルストレージの問題を修正するパッチをリリースしました。

このパッチはQuality Portalで報告された次の問題を解決します。

RSP-27180 64-bit builds crash with threads

この問題はC/C++ RTLのアセンブリコード内でWin64 32バイトのshadow spaceを設定してTLS(スレッドローカルストレージ)データをクリーンアップする際に生じたエラーと、HeapFreeメソッドの呼び出しに対して末尾呼び出し最適化(tail-call optimization)を適用するコンパイラとの組み合わせにより発生します。

言い換えると、bcc64コンパイラによって最適化されたHeapFreeの呼び出し元で、shadow spaceを誤って設定するコードが適用されていたことによって、
異なるWindowsビルドに依存する一部のマシンでは、HeapFreeはshadow spaceを使用するため、TLSをクリーンアップする際にアクセス違反が発生しました。

このパッチでは、呼び出し元でshadow spaceを正しく設定し、アクセス違反が発生しなくなるように修正しております。

なお、このケースはbcc64コンパイラ固有の問題で、bcc32/bcc32cなどの32ビットコンパイラを利用してビルドしたアプリケーションに対しては、パッチの適用の有無によらず関わらず、特に影響はありません。

パッチはこちらから入手できます。
https://cc.embarcadero.com/item/30909

パッチの適用手順は、以下の通りです

  1. RAD Studioを終了します。
  2. RAD Studioのメインフォルダ(通常はC:\Program Files (x86)\Embarcadero\Studio\20.0)より以下のファイルをバックアップします。
    ・lib\win64\debug\c0d64.o
    ・lib\win64\debug\c0fmx64.o
    ・lib\win64\debug\c0pkg64.o
    ・lib\win64\debug\c0w64.o
    ・lib\win64\debug\c0x64.o
    ・lib\win64\release\c0d64.o
    ・lib\win64\release\c0fmx64.o
    ・lib\win64\release\c0pkg64.o
    ・lib\win64\release\c0w64.o
    ・lib\win64\release\c0x64.o
    ・source\cpprtl\Source\startup\c0nt64.nasm
    ・bin64\cc64260.dll
    ・bin64\cc64260.map
    ・bin64\cc64260mt.dll
    ・bin64\cc64260mt.map
  3. ダウンロードした CB1033_TLS_Library_Patch.zip ファイルを解凍します。
  4. 展開されたファイルセットをRAD Studioのメインフォルダに上書きコピーします。
  5. RAD Studioを起動します。

※Delphi / C++Builder / RAD Studio 10.3.3 向けのパッチはリリース順に適用する必要があります。
リリース済みのパッチリストは下記記事をお読みください。
RAD Studio / Delphi / C++Builder 10.3.3 パッチリスト

Reduce development time and get to market faster with RAD Studio, Delphi, or C++Builder. Design. Code. Compile. Deploy.

Start Free Trial   Free Delphi Community Edition   Free C++Builder Community Edition   Upgrade Today