Bản phát hành thư viện hệ thống Glibc 2.36

Sau sáu tháng phát triển, thư viện hệ thống GNU C Library (glibc) 2.36 đã được phát hành, tuân thủ đầy đủ các yêu cầu của tiêu chuẩn ISO C11 và POSIX.1-2017. Bản phát hành mới bao gồm các bản sửa lỗi từ 59 nhà phát triển.

Một số cải tiến được triển khai trong Glibc 2.36 bao gồm:

  • Đã thêm hỗ trợ cho định dạng di chuyển địa chỉ DT_RELR (di chuyển tương đối) mới, cho phép bạn giảm kích thước của việc di chuyển tương đối trong các đối tượng được chia sẻ và các tệp thực thi được liên kết trong chế độ PIE (Thực thi độc lập với vị trí). Việc sử dụng trường DT_RELR trong các tệp ELF yêu cầu hỗ trợ cho tùy chọn "-z pack-relative-relocs" trong trình liên kết, được giới thiệu trong bản phát hành binutils 2.38.
  • Đối với nền tảng Linux, các hàm pidfd_open, pidfd_getfd và pidfd_send_signal được triển khai, cung cấp quyền truy cập vào chức năng pidfd giúp xử lý các tình huống tái sử dụng PID để xác định chính xác hơn các quy trình truy cập các tệp được giám sát (pidfd được liên kết với một quy trình cụ thể và không thay đổi, trong khi PID có thể được gắn vào một quy trình khác sau khi quy trình hiện tại được liên kết với PID đó kết thúc).
  • Đối với nền tảng Linux, hàm process_madvise() đã được thêm vào để cho phép một quy trình thực hiện lệnh gọi hệ thống madvise() thay mặt cho một quy trình khác, xác định quy trình đích bằng cách sử dụng pidfd. Thông qua madvise(), bạn có thể thông báo cho kernel về các tính năng làm việc với bộ nhớ để tối ưu hóa quá trình quản lý bộ nhớ; ví dụ, dựa trên thông tin được truyền đi, kernel có thể bắt đầu giải phóng bộ nhớ trống bổ sung. Lệnh gọi madvise() của một quy trình khác có thể được yêu cầu trong trường hợp quy trình hiện tại không xác định được thông tin cần thiết để tối ưu hóa, nhưng được điều phối bởi một quy trình kiểm soát nền riêng biệt, quy trình này có thể bắt đầu loại bỏ bộ nhớ không sử dụng khỏi các quy trình một cách độc lập.
  • Đối với nền tảng Linux, hàm process_mrelease() đã được thêm vào, cho phép bạn tăng tốc độ giải phóng bộ nhớ để quá trình hoàn tất quá trình thực thi của nó. Trong các trường hợp thông thường, việc giải phóng tài nguyên và chấm dứt quy trình không diễn ra ngay lập tức và có thể bị trì hoãn vì nhiều lý do, gây cản trở các hệ thống phản hồi sớm bộ nhớ trong không gian người dùng như oomd (do systemd cung cấp). Bằng cách gọi process_mrelease, các hệ thống như vậy có thể kích hoạt việc lấy lại bộ nhớ từ các quy trình bắt buộc một cách dễ dự đoán hơn.
  • Hỗ trợ cho tùy chọn “no-aaaa” đã được thêm vào triển khai tích hợp của trình phân giải DNS, cho phép bạn vô hiệu hóa việc gửi truy vấn DNS cho các bản ghi AAAA (xác định địa chỉ IPv6 theo tên máy chủ), kể cả khi thực thi NSS các hàm như getaddrinfo(), để đơn giản hóa việc chẩn đoán sự cố. Tùy chọn này không ảnh hưởng đến việc xử lý các liên kết địa chỉ IPv6 được xác định trong /etc/hosts và các lệnh gọi tới getaddrinfo() bằng cờ AI_PASSIVE.
  • Đối với nền tảng Linux, các chức năng fsopen, fsmount, move_mount, fsconfig, fspick, open_tree và mount_setattr đã được thêm vào, cung cấp quyền truy cập vào API kernel mới để quản lý việc gắn hệ thống tệp dựa trên không gian tên gắn kết. Các chức năng được đề xuất cho phép bạn xử lý riêng các giai đoạn gắn kết khác nhau (xử lý siêu khối, lấy thông tin về hệ thống tệp, gắn kết, gắn vào điểm gắn kết), những việc này trước đây được thực hiện bằng hàm mount() thông thường. Các chức năng riêng biệt cung cấp khả năng thực hiện các kịch bản gắn kết phức tạp hơn và thực hiện các thao tác riêng biệt như cấu hình lại siêu khối, bật tùy chọn, thay đổi điểm gắn kết và di chuyển sang không gian tên khác. Ngoài ra, quá trình xử lý riêng biệt cho phép bạn xác định chính xác lý do xuất ra mã lỗi và đặt nhiều nguồn cho hệ thống tệp nhiều lớp, chẳng hạn như lớp phủ.
  • localedef cung cấp hỗ trợ xử lý các tệp định nghĩa miền địa phương được cung cấp ở dạng mã hóa UTF-8 thay vì ASCII.
  • Đã thêm các chức năng để chuyển đổi mã hóa nhiều byte mbrtoc8 và c8rtomb sang thông số kỹ thuật ISO C2X N2653 và C++20 P0482R6.
  • Đã thêm hỗ trợ cho loại char8_t được xác định trong tiêu chuẩn ISO C2X N2653 dự thảo.
  • Đã thêm các hàm arc4random, arc4random_buf và arc4random_uniform, cung cấp các hàm bao cho lệnh gọi hệ thống getrandom và giao diện /dev/urandom trả về các số giả ngẫu nhiên chất lượng cao.
  • Khi chạy trên nền tảng Linux, nó hỗ trợ kiến ​​trúc tập lệnh LoongArch được sử dụng trong bộ xử lý Loongson 3 5000 và triển khai RISC ISA mới, tương tự như MIPS và RISC-V. Ở dạng hiện tại, chỉ có hỗ trợ cho phiên bản 64-bit của LoongArch (LA64). Để hoạt động, bạn cần ít nhất các phiên bản binutils 2.38, GCC 12 và Linux kernel 5.19.
  • Cơ chế liên kết trước, cũng như các biến môi trường LD_TRACE_PRELINKING và LD_USE_LOAD_BIAS được liên kết cũng như các khả năng của trình liên kết, đã không còn được dùng nữa và sẽ bị xóa trong bản phát hành trong tương lai.
  • Đã xóa mã để kiểm tra phiên bản nhân Linux và xử lý biến môi trường LD_ASSUME_KERNEL. Phiên bản tối thiểu của kernel được hỗ trợ khi xây dựng Glibc được xác định thông qua trường ELF NT_GNU_ABI_TAG.
  • Biến môi trường LD_LIBRARY_VERSION đã bị ngừng sử dụng trên nền tảng Linux.

Nguồn: opennet.ru

Thêm một lời nhận xét