LLVM 15.0 มาพร้อมกับการปรับปรุงสำหรับแบ็กเอนด์ที่แตกต่างกัน การสนับสนุนที่มากขึ้น และอีกมากมาย

LLVM 15 ใช้การปรับปรุงการสนับสนุน

LLVM 15.0 ยังมีการอัปเดตที่น่าสนใจสำหรับ C/C++ อีกด้วย

หลังจากหกเดือนของการพัฒนา ประกาศเปิดตัวโครงการ LLVM 15.0 แล้วซึ่งใน มีการเปลี่ยนแปลงที่สำคัญมากมาย รวมถึงการสนับสนุนเพิ่มเติมสำหรับโปรเซสเซอร์ สถาปัตยกรรม และอื่นๆ อีกมากมาย

สำหรับผู้ที่ไม่คุ้นเคยกับ LLVM คุณควรรู้ว่าสิ่งนี้ เป็นคอมไพเลอร์ที่เข้ากันได้กับ GCC (คอมไพเลอร์ ออปติไมเซอร์ และเครื่องกำเนิดโค้ด) ที่คอมไพล์โปรแกรมเป็นบิตโค้ดขั้นกลางเหมือนคำสั่งเสมือน RISC (เครื่องเสมือนระดับต่ำที่มีระบบการปรับให้เหมาะสมหลายระดับ)

pseudocode ที่สร้างขึ้นสามารถแปลงโดยคอมไพเลอร์ JIT เป็นคำสั่งเครื่องในเวลาที่โปรแกรมดำเนินการ

คุณสมบัติใหม่ที่สำคัญของ LLVM 15.0

ในเวอร์ชั่นใหม่ที่นำเสนอนี้ขอเน้นว่า รองรับโปรเซสเซอร์ Cortex-M85เช่นเดียวกับสถาปัตยกรรม Armv9-A, Armv9.1-A และ Armv9.2-A ส่วนขยาย Armv8.1-M PACBTI-M

การเปลี่ยนแปลงที่โดดเด่นอีกประการหนึ่งก็คือ เพิ่มแบ็กเอนด์ DirectX รุ่นทดลอง นี้ รองรับรูปแบบ DXIL (DirectX Intermediate Language) ใช้สำหรับ DirectX shaders แบ็กเอนด์เปิดใช้งานผ่านตัวเลือกบิลด์ "-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=DirectX"

libc++ ยังคงใช้คุณสมบัติใหม่ต่อไป ของมาตรฐาน C++20 และ C++2b รวมถึงการปรับใช้ไลบรารี "รูปแบบ" ให้สมบูรณ์และเวอร์ชันทดลองที่เสนอของไลบรารี "ช่วง"

ในส่วนของการเปลี่ยนแปลงที่เกี่ยวข้องกับ Clang 15.0 นั้น ได้กล่าวไว้ว่า เพิ่มการสนับสนุนทดลองสำหรับภาษา C-like HLSL (ภาษาการแรเงาระดับสูง) ซึ่งใช้สำหรับการเขียนเฉดสีที่ขึ้นต้นด้วย DirectX 9 รวมถึงการแปลเชดเดอร์ HLSL เป็นรูปแบบไบนารี DXIL (DirectX Intermediate Language) ที่เข้ากันได้กับ DirectX 12 รวมถึงรูปแบบ SPIR -V ที่ใช้โดย Vulkan ในอนาคต, วางแผนที่จะดำเนินการรองรับรูปแบบ DXBC (DirectX Bytecode) ที่ใช้ใน DirectX 9-11 การใช้งานนี้จัดทำโดย Microsoft และใช้ DirectX Shader Compiler ซึ่งเปิดตัวในปี 2017 ซึ่งสร้างขึ้นบนพื้นฐานของ LLVM 3.7

มันยังกล่าวต่อไปด้วยว่า ทำงานเพื่อรองรับมาตรฐาน C2X และ C++23 ในอนาคต ดำเนินการสำหรับภาษา C: แอตทริบิวต์ noreturn, คำหลักเท็จและจริง, ประเภท _BitInt(N) สำหรับจำนวนเต็มของความลึกบิตที่กำหนด, มาโคร *_WIDTH, คำนำหน้า u8 สำหรับอักขระ UTF-8

นอกจากนี้ ได้รับการนำไปใช้สำหรับ C ++: การรวมโมดูล การแยก ABI ของสมาชิกฟังก์ชัน สั่งการเริ่มต้นแบบไดนามิกของตัวแปรที่ไม่ใช่โลคัลในโมดูล ตัวดำเนินการดัชนีหลายมิติ, auto(x), ตัวแปรที่ไม่ใช่ตัวอักษร, goto และเลเบลในฟังก์ชันที่ประกาศเป็น constexpr, ลำดับ Escape ที่มีตัวคั่น, ตั้งชื่ออักขระ Escape

สำหรับระบบที่ใช้สถาปัตยกรรม x86 เพิ่มแฟล็ก "-fzero-call-used-regs" ซึ่งให้ค่าศูนย์ของการลงทะเบียน CPU ทั้งหมดที่ใช้ในฟังก์ชันก่อนส่งคืนการควบคุมจากฟังก์ชัน ตัวเลือกนี้ ป้องกันการรั่วไหลของข้อมูล ของฟังก์ชันและลดจำนวนบล็อกที่เหมาะสมสำหรับการสร้างอุปกรณ์ ROP (Return Oriented Programming) ในการหาช่องโหว่ประมาณ 20%

มีการใช้การสุ่มตำแหน่งหน่วยความจำ ของโครงสร้างสำหรับรหัส C ซึ่งทำให้การดึงข้อมูลจากโครงสร้างมีความซับซ้อนในกรณีของการแสวงหาประโยชน์จากช่องโหว่ Randomization เปิดและปิดด้วยแอตทริบิวต์ randomize_layout และ no_randomize_layout และต้องตั้งค่า seed ด้วยแฟล็ก "-frandomize-layout-seed" หรือ "-frandomize-layout-seed-file" เพื่อให้แน่ใจว่าบิลด์ที่ทำซ้ำได้

จากการเปลี่ยนแปลงอื่น ๆ ที่โดดเด่น:

  • ความสามารถเพิ่มเติมที่เกี่ยวข้องกับการสนับสนุน OpenCL และ OpenMP เพิ่มการรองรับส่วนขยาย OpenCL cl_khr_subgroup_rotate
  • ปรับปรุงแบ็กเอนด์สำหรับสถาปัตยกรรม x86, PowerPC และ RISC-V
    ปรับปรุงตัวเชื่อมโยง LLD และความสามารถดีบักเกอร์ LLDB
  • เพิ่ม "-fstrict-flex-arrays=" flag » ซึ่งคุณสามารถควบคุมขีดจำกัดขององค์ประกอบอาร์เรย์แบบซอฟต์ในโครงสร้างได้ (Soft Array Members, อาร์เรย์ของขนาดที่ไม่แน่นอนที่ส่วนท้ายของโครงสร้าง)
  • เพิ่มตัวเลือก "-warray-parameter" เพื่อเตือนเกี่ยวกับฟังก์ชันการแทนที่ด้วยการประกาศอาร์กิวเมนต์ที่ไม่ตรงกันที่เกี่ยวข้องกับอาร์เรย์ความยาวคงที่และตัวแปร
  • ปรับปรุงความเข้ากันได้กับ MSVC
  • เพิ่มการรองรับสำหรับฟังก์ชัน "#pragma และ "#pragma alloc_text" ที่มีให้ใน MSVC
  • เพิ่มการรองรับแฟล็ก /JMC และ /JMC ที่เข้ากันได้กับ MSVC
  • เพิ่มแฟล็ก "-m[no-]rdpru" เพื่อควบคุมการใช้คำสั่ง RDPRU ซึ่งสนับสนุนจากโปรเซสเซอร์ AMD Zen2
  • เพิ่มแฟล็ก "-mfunction-return=thunk-extern" เพื่อป้องกันช่องโหว่ RETBLED ซึ่งทำงานโดยการเพิ่มลำดับของคำสั่งที่ไม่รวมการมีส่วนร่วมของกลไกการดำเนินการเก็งกำไรสำหรับการข้ามทางอ้อม

ในที่สุด หากคุณสนใจที่จะทราบข้อมูลเพิ่มเติม คุณสามารถตรวจสอบรายละเอียดในไฟล์ ลิงค์ต่อไปนี้


แสดงความคิดเห็นของคุณ

อีเมล์ของคุณจะไม่ถูกเผยแพร่ ช่องที่ต้องการถูกทำเครื่องหมายด้วย *

*

*

  1. รับผิดชอบข้อมูล: AB Internet Networks 2008 SL
  2. วัตถุประสงค์ของข้อมูล: ควบคุมสแปมการจัดการความคิดเห็น
  3. ถูกต้องตามกฎหมาย: ความยินยอมของคุณ
  4. การสื่อสารข้อมูล: ข้อมูลจะไม่ถูกสื่อสารไปยังบุคคลที่สามยกเว้นตามข้อผูกพันทางกฎหมาย
  5. การจัดเก็บข้อมูล: ฐานข้อมูลที่โฮสต์โดย Occentus Networks (EU)
  6. สิทธิ์: คุณสามารถ จำกัด กู้คืนและลบข้อมูลของคุณได้ตลอดเวลา