Glibc 2.36 系統庫發布

經過六個月的開發,GNU C Library (glibc) 2.36系統庫已經發布,完全符合ISO C11和POSIX.1-2017標準的要求。 新版本包含 59 名開發人員的修復。

Glibc 2.36 中實作的一些改進包括:

  • 新增了對新的 DT_RELR(相對重定位)位址重定位格式的支持,該格式允許您減少以 PIE(位置無關可執行檔)模式連結的共用物件和可執行檔中相對重定位的大小。 在 ELF 檔案中使用 DT_RELR 欄位需要在連結器中支援「-z pack-relative-relocs」選項,該選項在 binutils 2.38 版本中引入。
  • 對於Linux平台,實作了函數pidfd_open、pidfd_getfd和pidfd_send_signal,提供對pidfd功能的訪問,幫助處理PID重用情況,以更準確地識別訪問受監控文件的進程(pidfd與特定進程關聯並且不會改變,而PID可以在與該 PID 關聯的目前進程終止後附加到另一個進程)。
  • 對於Linux平台,新增了process_madvise()函數,允許一個進程代表另一個進程發出madvise()系統調用,使用pidfd識別目標進程。 透過 madvise(),您可以通知核心有關記憶體使用的功能,以最佳化進程記憶體管理;例如,根據傳輸的信息,核心可以啟動釋放額外的空閒記憶體。 在目前進程未知最佳化所需資訊但由單獨的後台控制進程協調的情況下,可能需要由另一個進程呼叫 madvise() ,該程式控制進程可以獨立啟動從進程中刪除未使用的記憶體。
  • 對於Linux平台,新增了process_mrelease()函數,該函數可讓您加快進程完成執行後的記憶體釋放速度。 正常情況下,資源釋放和進程終止不是瞬時的,可能會因為各種原因而延遲,幹擾用戶空間記憶體早期回應系統,例如 oomd(由 systemd 提供)。 透過呼叫 process_mrelease,此類系統可以更可預測地觸發從強制進程中回收記憶體。
  • DNS 解析器的內建實作中新增了對「no-aaaa」選項的支持,該選項可讓您停用發送 AAAA 記錄的 DNS 請求(透過主機名稱確定 IPv6 位址),包括在執行 NSS 時getaddrinfo() 等函數可簡化問題診斷。 此選項不會影響 /etc/hosts 中定義的 IPv6 位址綁定的處理以及對帶有 AI_PASSIVE 標誌的 getaddrinfo() 的呼叫。
  • 對於 Linux 平台,新增了函數 fsopen、fsmount、move_mount、fsconfig、fspick、open_tree 和 mount_setattr,提供對新核心 API 的訪問,用於管理基於掛載命名空間的檔案系統掛載。 建議的函數可讓您單獨處理掛載的不同階段(處理超級區塊、取得有關檔案系統的資訊、掛載、附加到掛載點),這些階段之前是使用常見的 mount() 函數執行的。 單獨的函數提供了執行更複雜的掛載場景並單獨執行操作的能力,例如重新配置超級區塊、啟用選項、更改掛載點以及移動到另一個命名空間。 此外,單獨處理可讓您準確判斷錯誤程式碼輸出的原因,並為多層檔案系統(例如overlayfs)設定多個來源。
  • localedef 支援處理以 UTF-8 編碼而不是 ASCII 提供的區域設定定義檔。
  • 新增了將多位元組 mbrtoc8 和 c8rtomb 編碼轉換為 ISO C2X N2653 和 C++20 P0482R6 規範的函數。
  • 新增了對 ISO C8X N2 標準草案中定義的 char2653_t 類型的支援。
  • 新增了 arc4random、arc4random_buf 和 arc4random_uniform 函數,這些函數為 getrandom 系統呼叫和傳回高品質偽隨機數的 /dev/urandom 介面提供包裝器。
  • 在Linux平台上運行時,它支援龍芯3 5000處理器中使用的LoongArch指令集架構,並實現了新的RISC ISA,類似於MIPS和RISC-V。 目前的形式僅支援 64 位元版本的 LoongArch (LA64)。 要工作,您至少需要 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 確定的。
  • Linux 平台上已不再使用 LD_LIBRARY_VERSION 環境變數。

來源: opennet.ru

添加評論