5.4.9. コンパイラーおよび開発ツール
DT_FILTER を使用する共有ライブラリーの読み込み中に glibc 動的ローダーが失敗しなくなりました。
この更新以前は、共有オブジェクトの動的ローダー実装にフィルターとして不具合があると、フィルターを使用する共有ライブラリーがロードされ、コンストラクターを持つ際に動的ローダーが失敗していました。今回のリリースにより、フィルターの動的ローダー実装 (DT_FILTER) が修正され、このような共有ライブラリーを正しく処理できるようになりました。その結果、上述のシナリオで動的ローダーが想定どおりに機能するようになりました。
glibc が、getmntent() リストから擬似マウントを削除可能
カーネルには、ユーザー空間に公開されるテーブルの automount 疑似エントリーが含まれます。そのため、getmntent() API を使用するプログラムは、通常のマウントとこの擬似マウントの両方をリストに表示されるようになりました。擬似マウントは、実際のマウントには対応せず、有効な情報も含まれます。
今回の更新で、mount エントリーに automount(8) 設定にある ignore マウントオプションがあると、glibc ライブラリーでこの擬似マウントが getmntent() リストから削除されるようになりました。以前の動作を想定するプログラムでは、異なる API を使用する必要があります。
(BZ#1743445)
movv1qi パターンにより、IBM Z の自動ベクターコードに誤コンパイルが発生しなくなりました。
この更新以前は、movv1qi パターンに対して誤った負荷命令が生成されていました。これにより、自動アクターのフィルターが有効になっていると、IBM Z システムで不適切なコンパイルが実行される可能性がありました。今回の更新で movv1qi パターンが修正され、コードコンパイルおよび実行が正常に実行されるようになりました。
(BZ#1784758)
PAPI_event_name_to_code() が複数のスレッドで適切に動作するようになりました。
この更新以前は、PAPI 内部コードがスレッドの調整を正しく処理しませんでした。したがって、複数のスレッドが PAPI_event_name_to_code() 操作を使用すると、競合状態が発生し、操作に失敗していました。今回の更新で、PAPI 内部コードで複数のスレッドの処理が強化されます。その結果、PAPI_event_name_to_code() 操作を使用したマルチスレッドコードが正しく機能するようになりました。
(BZ#1807346)
IBM Power Systems の glibc math 関数のパフォーマンスを改善
以前は、glibc math 関数は、IBM Power Systems で不要な浮動小数点のステータスの更新とシステムコールを実行していたため、パフォーマンスに悪影響を及ぼしていました。今回の更新で、不要な浮動小数点ステータスの更新が削除され、ceil()、ceilf()、fegetmode()、fesetmode()、fesetenv()、fegetexcept()、feenableexcept()、fedisablexcept()、fegetround()、fesetround() の実装が改善されました。その結果、IBM Power Systems では、math ライブラリーのパフォーマンスが向上しました。
(BZ#1783303)
メモリー保護鍵が IBM Power で対応
IBM Power Systems では、メモリー保護キーインターフェイス pkey_set および pkey_get は、以前はスタブ機能でした。そのため、常に失敗していました。今回の更新でインターフェイスが実装され、GNU C ライブラリー (glibc) が IBM Power Systems でのメモリー保護キーをサポートするようになりました。
現在、メモリー保護キーにはハッシュベースのメモリー管理ユニット (MMU) が必要なため、カーネルパラメーター disable_radix で特定のシステムを起動する必要があるかもしれません。
(BZ#1642150)
papi-testsuite および papi-devel が、必要な papi-libs パッケージをインストールするようになりました。
以前は、papi-testsuite および papi-devel RPM パッケージは、一致する papi-libs パッケージの依存関係を宣言しませんでした。そのため、テストは実行に失敗し、開発者はアプリケーションで利用可能な papi 共有ライブラリーの必要なバージョンがありませんでした。
今回の更新で、papi-testsuite パッケージまたは papi-devel パッケージのいずれかをインストールすると、papi-libs パッケージもインストールされます。そのため、papi-testsuite に、テストを実行できるように正しいライブラリーが設定され、papi-devel を使用する開発者では、適切なバージョンの papi 共有ライブラリーに実行ファイルがリンクされるようになりました。
複数のアーキテクチャー用の lldb パッケージのインストールでファイルの競合が発生しなくなる
以前では、lldb パッケージは、アーキテクチャーに依存しない場所にアーキテクチャー依存ファイルをインストールしていました。そのため、パッケージの 32 ビットバージョンと 64 ビットバージョンの両方をインストールすると、ファイルの競合が発生していました。今回の更新で、アーキテクチャー依存の場所のファイルがパッケージ化されるようになりました。これにより、上記のシナリオでの lldb のインストールが正常に完了します。
(BZ#1841073)
getaddrinfo がメモリー割り当てエラーを適切に処理
以前は、メモリー割り当てに失敗すると、GNU C ライブラリー glibc の getaddrinfo 関数は、内部リゾルバーコンテキストをリリースしませんでした。したがって、getaddrinfo は、呼び出しスレッドの残りのライフタイム中は /etc/resolv.conf ファイルを再読み込みできず、メモリーリークが発生していました。
今回の更新により、リゾルバーコンテキストの追加リリース操作でエラー処理パスが変更されました。その結果、getaddrinfo は、断続的なメモリー割り当ての失敗後も新しい設定値で /etc/resolv.conf を再読み込みします。
glibc が、IFUNC リゾルバーの順序によって発生する特定の障害を回避
以前は、GNU C ライブラリー glibc の librt および libpthread ライブラリーの実装には、以下の関数の間接関数 (IFUNC) リゾルバーが含まれていました。time_gettime、clock_getcpuclockid、clock_nanosleep、time_settime、vfork。場合によっては、IFUNC リゾルバーは、librt ライブラリーおよび libpthread ライブラリーが再配置される前に実行できることがあります。その結果、早いプログラムの起動時にアプリケーションが glibc 動的ローダーで失敗していました。
今回のリリースにより、これらの関数の実装が glibc の libc コンポーネントに移動し、上記の問題が発生しなくなりました。
アサーションの失敗が pthread_create の実行中に発生しない
以前のバージョンでは、glibc 動的ローダーは内部 Thread Local Storage (TLS) モジュール ID カウンターへの変更をロールバックしませんでした。これにより、pthread_create 関数のアサーションエラーが生じ、特定の方法で dlopen 関数が失敗していました。今回の修正により、glibc 動的ローダーは、特定の障害が発生しなくなった後に、後で TLS モジュール ID カウンターを更新するようになりました。その結果、アサーションエラーが生じなくなりました。
glibc が nss_db を使用して 32 ビットアプリケーションに正しい依存関係をインストールするようになりました。
以前は、nss_db.x86_64 パッケージは nss_db.i686 パッケージで依存関係を宣言しませんでした。したがって、32 ビット環境 glibc.i686 がインストールされている場合でも、自動インストールでは nss_db.i686 をシステムにインストールしませんでした。そのため、nss_db を使用する 32 ビットアプリケーションは、正確なユーザーデータベースルックアップを実行しなくなり、同じ設定の 64 ビットアプリケーションが正常に機能します。
今回の更新で、glibc パッケージの弱い依存関係が、glibc.i686 および nss_db の両方がシステムにインストールされていると、nss_db.i686 パッケージのインストールがトリガーされます。これにより、システム管理者が nss_db.i686 パッケージを明示的にインストールしていない場合でも、nss_db を使用する 32 ビットアプリケーションが正しく機能するようになりました。
Odia 言語で更新された glibc ロケール情報
以前 Orissa と呼ばれる Indian 状態の名前が Odisha に変更され、公式の言語の名前が Oriya から Odia に変更になりました。今回の更新で、glibc ロケール情報に言語の新しい名前が反映されるようになりました。
LLVM サブパッケージが、アーキテクチャーに依存しない場所に arch 依存ファイルをインストールするようになりました。
以前では、LLVM サブパッケージは、アーキテクチャーに依存しない場所に arch 依存ファイルをインストールしていました。これにより、32 ビットおよび 64 ビットバージョンの LLVM のインストール時に競合が生じました。今回の更新で、パッケージファイルがアーキテクチャー依存の場所に正しくインストールされるようになり、バージョンの競合を避けるようになりました。
(BZ#1820319)
glibc でパスワードおよびグループ検索が失敗しなくなりました。
以前は、glibc ライブラリーの nss_compat モジュールが、パスワードおよびグループエントリーの処理中に誤ったエラーコードで errno 状態を上書きしていました。その結果、アプリケーションはバッファーを予想通りにサイズ変更せず、パスワードおよびグループの検索に失敗していました。今回の更新で問題が修正され、ルックアップが期待どおりに完了するようになりました。