6.10. コンパイラーおよび開発ツール
GCC Toolset 13: GCC がベクトル化を有効にした IBM POWER9 (リトルエンディアン) で、コードを正しくコンパイルするようになる
以前は、ベクトル化を有効にして IBM POWER9 (リトルエンディアン) でコードをコンパイルすると、GCC コンパイラーによって誤ったコードが生成されました。エクスパンダー内の Register Transfer Language (RTL) パターンが修正され、コードが正しくコンパイルされるようになりました。
Jira:RHEL-45190[1]
glibc
ダイナミックリンカーは、カスタム malloc
実装からの TLS アクセスを使用するアプリケーションによる再入可能 malloc
呼び出しを阻止する
一部のアプリケーションでは、初期実行 TLS の代わりにグローバル動的スレッドローカルストレージ (TLS) を使用するカスタム malloc
動的メモリー割り当て実装が提供されます。この更新前は、グローバル動的 TLS を使用するバンドルされた malloc
呼び出しを持つアプリケーションでは、アプリケーションの malloc
サブシステムへのリエントラント呼び出しが発生する可能性がありました。その結果、スタックの枯渇または内部データ構造の予期しない状態により、アプリケーションの malloc
呼び出しがクラッシュしました。この更新により、glibc
動的リンカーはカスタム malloc
実装からの TLS アクセスを検出するようになりました。malloc
呼び出し中に TLS アクセスが検出されると、TLS 処理中のそれ以降の呼び出しはスキップされ、再入可能な malloc
呼び出しは防止されます。
TLS データは、ELF コンストラクターからの dlopen()
への呼び出しによって上書きされなくなる
以前は、dlopen()
関数が ELF コンストラクターから呼び出される特定のケースでは、glibc
ダイナミックリンカーはスレッドローカルストレージ (TLS) の初期化ステータスを正しく追跡していませんでした。その結果、TLS データはアプリケーションによって変更された後、元の値に戻されました。この更新により、ダイナミックリンカーは個別のフラグを使用して、各共有オブジェクトの TLS 初期化を追跡します。その結果、ELF コンストラクターからの dlopen()
関数の呼び出しによって TLS データが予期せず上書きされることがなくなりました。
Perftools が LTO デバッグ情報の処理に失敗しなくなる
以前は、binutils
コレクションの Binary File Descriptor (BFD) ライブラリー (バイナリーファイルからデバッグ情報を読み取るためにパフォーマンスツールによって使用されるライブラリー) が、リンク時最適化 (LTO) が有効な GCC コンパイラーによって生成されたデバッグ情報を処理できませんでした。その結果、LTO デバッグ情報を含むファイルを調べるときに、perftools がエラーメッセージを表示し、正しく実行できませんでした。BFD ライブラリーが更新され、LTO が有効なコンパイル中に生成されたデバッグ情報を処理するようになりました。また、影響を受ける perftools がそのようなデバッグ情報を正常に処理するようになりました。
Jira:RHEL-43758[1]