Glibc 2.36 システム ライブラリのリリース

2.36 か月の開発を経て、ISO C11 および POSIX.1-2017 標準の要件に完全に準拠した GNU C ライブラリ (glibc) 59 システム ライブラリがリリースされました。 新しいリリースには、XNUMX 人の開発者による修正が含まれています。

Glibc 2.36 で実装された改善点には次のようなものがあります。

  • 新しい DT_RELR (相対再配置) アドレス再配置形式のサポートが追加されました。これにより、PIE (位置に依存しない実行可能ファイル) モードでリンクされた共有オブジェクトおよび実行可能ファイルの相対再配置のサイズを削減できます。 ELF ファイルで DT_RELR フィールドを使用するには、binutils 2.38 のリリースで導入されたリンカーの「-z Pack-relative-relocs」オプションのサポートが必要です。
  • Linux プラットフォームの場合、関数 pidfd_open、pidfd_getfd、および pidfd_send_signal が実装されており、PID の再利用状況を処理して監視対象ファイルにアクセスするプロセスをより正確に識別するのに役立つ pidfd 機能へのアクセスが提供されます (pidfd は特定のプロセスに関連付けられており変更されませんが、PID は変更できません)。その PID に関連付けられた現在のプロセスが終了した後、別のプロセスにアタッチされる可能性があります)。
  • Linux プラットフォームの場合、 process_madvise() 関数が追加され、あるプロセスが別のプロセスに代わって madvise() システム コールを発行し、pidfd を使用してターゲット プロセスを識別できるようになりました。 madvise() を通じて、プロセス メモリ管理を最適化するためにメモリを操作する機能についてカーネルに通知できます。たとえば、送信された情報に基づいて、カーネルは追加の空きメモリの解放を開始できます。 最適化に必要な情報が現在のプロセスには不明であるが、別のバックグラウンド制御プロセスによって調整される状況では、別のプロセスによる madvise() の呼び出しが必要になる場合があります。このプロセスは、プロセスから未使用メモリの削除を独立して開始できます。
  • Linux プラットフォームの場合、 process_mrelease() 関数が追加されました。これにより、実行を完了するプロセスのメモリ解放を高速化できます。 通常の状況では、リソースの解放とプロセスの終了は瞬時には行われず、さまざまな理由で遅延する可能性があり、oomd (systemd によって提供される) などのユーザー空間メモリの早期応答システムに干渉します。 process_mrelease を呼び出すことにより、このようなシステムは強制プロセスからのメモリの再利用をより予測可能にトリガーできます。
  • DNS リゾルバーの組み込み実装に「no-aaaa」オプションのサポートが追加されました。これにより、NSS の実行時を含め、AAAA レコード (ホスト名による IPv6 アドレスの決定) に対する DNS リクエストの送信を無効にすることができます。 getaddrinfo() などの関数を使用して、問題の診断を簡素化します。 このオプションは、/etc/hosts で定義された IPv6 アドレス バインディングの処理や、AI_PASSIVE フラグを使用した getaddrinfo() の呼び出しには影響しません。
  • Linux プラットフォームの場合、関数 fsopen、fsmount、move_mount、fsconfig、fspick、open_tree、および mount_setattr が追加され、マウント名前空間に基づいてファイル システムのマウントを管理するための新しいカーネル API へのアクセスが提供されます。 提案された関数を使用すると、以前は共通の mount() 関数を使用して実行されていたマウントのさまざまな段階 (スーパーブロックの処理、ファイル システムに関する情報の取得、マウント、マウント ポイントへのアタッチ) を個別に処理できるようになります。 個別の関数により、より複雑なマウント シナリオを実行し、スーパーブロックの再構成、オプションの有効化、マウント ポイントの変更、別の名前空間への移動などの操作を個別に実行できるようになります。 さらに、個別の処理により、エラー コードの出力理由を正確に判断し、overlayfs などの多層ファイル システムに対して複数のソースを設定することができます。
  • localedef は、ASCII ではなく UTF-8 エンコーディングで提供されるロケール定義ファイルの処理をサポートします。
  • マルチバイト mbrtoc8 および c8rtomb エンコーディングを ISO C2X N2653 および C++20 P0482R6 仕様に変換する関数を追加しました。
  • ドラフト ISO C8X N2 標準で定義されている char2653_t タイプのサポートが追加されました。
  • 高品質の擬似乱数を返す getrandom システム コールと /dev/urandom インターフェイスのラッパーを提供する arc4random、arc4random_buf、および arc4random_uniform 関数が追加されました。
  • Linux プラットフォームで実行する場合、Loongson 3 5000 プロセッサで使用される LoongArch 命令セット アーキテクチャをサポートし、MIPS や RISC-V と同様の新しい RISC ISA を実装します。 現在の形式では、LoongArch (LA64) の 64 ビット バージョンのサポートのみが利用可能です。 動作するには、少なくとも binutils 2.38、GCC 12、および Linux カーネル 5.19 のバージョンが必要です。
  • プレリンク メカニズム、およびそれに関連する LD_TRACE_PRELINKING および LD_USE_LOAD_BIAS 環境変数とリンカー機能は非推奨となり、将来のリリースでは削除される予定です。
  • Linux カーネルのバージョンを確認し、LD_ASSUME_KERNEL 環境変数を処理するためのコードを削除しました。 Glibc のビルド時にサポートされるカーネルの最小バージョンは、ELF フィールド NT_GNU_ABI_TAG によって決定されます。
  • LD_LIBRARY_VERSION 環境変数は、Linux プラットフォームでは廃止されました。

出所: オープンネット.ru

コメントを追加します