Have an amazing solution built in RAD Studio? Let us know. Looking for discounts? Visit our Special Offers page!
C++アップデート

C++Builder 10.3.3スレッドとTLSパッチ

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 パッチリスト
Kai 1.1 Now Available! Kai 1.1 Now Available! What's Coming in RAD Studio 13.2 Florence

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

Start Free Trial   Upgrade Today

   Free Delphi Community Edition   Free C++Builder Community Edition

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.

IN THE ARTICLES