Glibc 2.36 System Library Release

หลังจากหกเดือนของการพัฒนา มีการเผยแพร่ GNU C Library (glibc) 2.36 ซึ่งเป็นไปตามข้อกำหนดของมาตรฐาน ISO C11 และ POSIX.1-2017 อย่างสมบูรณ์ รุ่นใหม่ประกอบด้วยการแก้ไขจากนักพัฒนา 59 ราย

การปรับปรุงที่ใช้ใน Glibc 2.36 ได้แก่:

  • เพิ่มการสนับสนุนสำหรับรูปแบบการย้ายตำแหน่งที่อยู่ DT_RELR (การโยกย้ายแบบสัมพันธ์) ใหม่ ซึ่งช่วยให้คุณลดขนาดของการย้ายตำแหน่งแบบสัมพันธ์ในออบเจ็กต์ที่แชร์และไฟล์ปฏิบัติการที่เชื่อมโยงในโหมด PIE (การเรียกทำงานที่ไม่ขึ้นกับตำแหน่ง) การใช้ฟิลด์ DT_RELR ในไฟล์ ELF ต้องการการสนับสนุนตัวเลือก "-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 ระบบดังกล่าวสามารถกระตุ้นการเรียกคืนหน่วยความจำจากกระบวนการบังคับได้อย่างคาดการณ์ได้มากขึ้น
  • เพิ่มการรองรับตัวเลือก "no-aaaa" ในการใช้งานตัวแก้ไข DNS ในตัวซึ่งช่วยให้คุณปิดการใช้งานการส่งคำขอ DNS สำหรับบันทึก AAAA (การกำหนดที่อยู่ IPv6 ด้วยชื่อโฮสต์) รวมถึงเมื่อดำเนินการ NSS ฟังก์ชันต่างๆ เช่น getaddrinfo() เพื่อทำให้การวินิจฉัยปัญหาง่ายขึ้น ตัวเลือกนี้ไม่ส่งผลต่อการประมวลผลการเชื่อมโยงที่อยู่ IPv6 ที่กำหนดใน /etc/hosts และการเรียกไปยัง getaddrinfo() ด้วยแฟล็ก AI_PASSIVE
  • สำหรับแพลตฟอร์ม Linux มีการเพิ่มฟังก์ชัน fsopen, fsmount, move_mount, fsconfig, fspick, open_tree และ mount_setattr เพื่อให้สามารถเข้าถึงเคอร์เนล API ใหม่สำหรับจัดการการเมาท์ระบบไฟล์ตามเนมสเปซการเมาท์ ฟังก์ชั่นที่นำเสนอช่วยให้คุณสามารถแยกการประมวลผลขั้นตอนการติดตั้งที่แตกต่างกัน (ประมวลผลซุปเปอร์บล็อก, รับข้อมูลเกี่ยวกับระบบไฟล์, เมานต์, แนบกับจุดเมานท์) ซึ่งก่อนหน้านี้ดำเนินการโดยใช้ฟังก์ชันเมานต์ทั่วไป () ฟังก์ชันที่แยกจากกันช่วยให้สามารถดำเนินการสถานการณ์การเมานท์ที่ซับซ้อนมากขึ้นและดำเนินการแยกกัน เช่น การกำหนดค่าซูเปอร์บล็อกใหม่ การเปิดใช้งานตัวเลือก การเปลี่ยนจุดเมานท์ และการย้ายไปยังเนมสเปซอื่น นอกจากนี้ การประมวลผลแบบแยกกันยังช่วยให้คุณระบุสาเหตุของผลลัพธ์ของรหัสข้อผิดพลาดได้อย่างแม่นยำ และตั้งค่าแหล่งที่มาหลายแหล่งสำหรับระบบไฟล์แบบหลายเลเยอร์ เช่น การซ้อนทับ
  • localedef ให้การสนับสนุนสำหรับการประมวลผลไฟล์คำจำกัดความของโลแคลที่ให้มาในการเข้ารหัส UTF-8 แทน ASCII
  • เพิ่มฟังก์ชันในการแปลงการเข้ารหัส mbrtoc8 และ c8rtomb แบบหลายไบต์เป็นข้อกำหนด ISO C2X N2653 และ C++20 P0482R6
  • เพิ่มการรองรับประเภท char8_t ที่กำหนดไว้ในร่างมาตรฐาน ISO C2X N2653
  • เพิ่มฟังก์ชัน arc4random, arc4random_buf และ arc4random_uniform ที่ให้ wrapper ผ่านการเรียกระบบ getrandom และอินเทอร์เฟซ /dev/urandom ที่ส่งคืนตัวเลขสุ่มเทียมคุณภาพสูง
  • เมื่อทำงานบนแพลตฟอร์ม Linux รองรับสถาปัตยกรรมชุดคำสั่ง LoongArch ที่ใช้ในโปรเซสเซอร์ Loongson 3 5000 และใช้ RISC ISA ใหม่ ซึ่งคล้ายกับ MIPS และ RISC-V ในรูปแบบปัจจุบัน รองรับเฉพาะ LoongArch (LA64) เวอร์ชัน 64 บิตเท่านั้น ในการทำงาน คุณต้องมี binutils 2.38, GCC 12 และ Linux kernel 5.19 อย่างน้อยเวอร์ชัน
  • กลไกการเชื่อมโยงล่วงหน้า ตลอดจนตัวแปรสภาพแวดล้อม LD_TRACE_PRELINKING และ LD_USE_LOAD_BIAS และความสามารถของตัวเชื่อมโยงที่เกี่ยวข้อง เลิกใช้แล้วและจะถูกลบออกในรุ่นต่อๆ ไป
  • ลบโค้ดเพื่อตรวจสอบเวอร์ชันเคอร์เนล Linux และจัดการตัวแปรสภาพแวดล้อม LD_ASSUME_KERNEL เวอร์ชันขั้นต่ำของเคอร์เนลที่รองรับเมื่อสร้าง Glibc ถูกกำหนดผ่านฟิลด์ ELF NT_GNU_ABI_TAG
  • ตัวแปรสภาพแวดล้อม LD_LIBRARY_VERSION ถูกยกเลิกบนแพลตฟอร์ม Linux

ที่มา: opennet.ru

เพิ่มความคิดเห็น