إطلاق مجموعة المترجمين GCC 12

بعد عام من التطوير، تم إصدار مجموعة المترجمات المجانية دول مجلس التعاون الخليجي 12.1، وهو أول إصدار مهم في فرع مجلس التعاون الخليجي 12.x الجديد. وفقًا لنظام ترقيم الإصدار الجديد، تم استخدام الإصدار 12.0 في عملية التطوير، وقبل وقت قصير من إصدار إصدار مجلس التعاون الخليجي 12.1، كان فرع مجلس التعاون الخليجي 13.0 قد تفرع بالفعل، وعلى أساسه سيتم إصدار الإصدار الرئيسي التالي، مجلس التعاون الخليجي 13.1، يتم تشكيلها. وفي 23 مايو، سيحتفل المشروع بمرور 35 عامًا على تأسيس النسخة الأولى لدول مجلس التعاون الخليجي.

التغييرات الرئيسية:

  • تمت إضافة دعم لتنسيق تصحيح الأخطاء CTF (تنسيق النوع المضغوط)، والذي يوفر تخزينًا مضغوطًا للمعلومات حول أنواع C، والاتصالات بين الوظائف ورموز التصحيح. عند تضمينه في كائنات ELF، يسمح التنسيق باستخدام جداول أحرف EFL لتجنب تكرار البيانات.
  • لقد تم إهمال دعم تنسيق تخزين معلومات تصحيح الأخطاء "STABS"، الذي تم إنشاؤه في الثمانينات.
  • يستمر العمل على توسيع الدعم لمعايير C2X وC++23 المستقبلية للغات C وC++. على سبيل المثال، تمت إضافة دعم للتعبير "if consteval"؛ مسموح باستخدام تلقائي في وسيطات الوظيفة ("f(auto(g()))"); يُسمح باستخدام المتغيرات غير الحرفية، وgoto، والتسميات في الوظائف التي تم تعريفها على أنها constexpr؛ إضافة دعم لمشغلي الفهرس متعدد الأبعاد عامل[]; في حالة توسيع إمكانيات كتل التهيئة والتبديل ("for (باستخدام T = int; T e : v)").
  • قامت مكتبة C++ القياسية بتحسين الدعم للأقسام التجريبية لمعايير C++20 وC++23. تمت إضافة دعم لـ std::move_only_function، ، الأمراض القياسية::basic_string::resize_and_overwrite، , و الأمراض المنقولة جنسيا::invoc_r. يُسمح باستخدام std::unique_ptr وstd::vector وstd::basic_string وstd::اختياري وstd::variant في وظائف constexpr.
  • توفر الواجهة الأمامية لـ Fortran الدعم الكامل لمواصفات TS 29113، التي تصف إمكانيات ضمان إمكانية النقل بين رمز Fortran وC.
  • تمت إضافة دعم للامتداد __builtin_shufflevector(vec1, vec2, Index1, Index2, ...) الذي تمت إضافته مسبقًا إلى Clang، والذي يوفر مكالمة واحدة لإجراء عمليات خلط وخلط المتجهات الشائعة.
  • عند استخدام مستوى التحسين "-O2"، يتم تمكين التوجيه بشكل افتراضي (يتم تمكين الوضعين -ftree-vectorize و -fvect-cost-model=very-cheap). يسمح النموذج الرخيص جدًا بالتوجيه فقط إذا كان كود المتجه يمكن أن يحل محل الكود العددي الذي يتم توجيهه بالكامل.
  • تمت إضافة وضع "-ftrivial-auto-var-init" لتمكين التهيئة الصريحة للمتغيرات على المكدس لتتبع المشكلات وحظر نقاط الضعف المرتبطة باستخدام المتغيرات غير المهيأة.
  • بالنسبة للغات C وC++، تمت إضافة وظيفة مدمجة __builtin_dynamic_object_size لتحديد حجم الكائن، وهو متوافق مع وظيفة مشابهة من Clang.
  • بالنسبة للغات C وC++، تمت إضافة دعم للسمة "غير متاحة" (على سبيل المثال، يمكنك وضع علامة على الوظائف التي ستؤدي إلى حدوث خطأ إذا حاولت استخدامها).
  • بالنسبة للغات C وC++، تمت إضافة دعم لتوجيهات المعالجة المسبقة "#elifdef" و"#elifndef".
  • تمت إضافة علامة "-Wbidi-chars" لعرض تحذير في حالة استخدام أحرف UTF-8 بشكل غير صحيح، مما يؤدي إلى تغيير الترتيب الذي يتم به عرض النص ثنائي الاتجاه.
  • تمت إضافة علامة "-Warray-compare" لعرض تحذير عند محاولة مقارنة معاملين يشيران إلى المصفوفات.
  • تنفيذ معايير OpenMP 5.0 و5.1 (المعالجة المتعددة المفتوحة)، التي تحدد واجهة برمجة التطبيقات (API) وطرق تطبيق أساليب البرمجة المتوازية على الأنظمة متعددة النواة والهجينة (CPU+GPU/DSP) ذات الذاكرة المشتركة ووحدات التوجيه (SIMD) ، استمر.
  • تحسين تنفيذ مواصفات البرمجة المتوازية OpenACC 2.6، والتي تحدد أدوات تفريغ العمليات على وحدات معالجة الرسومات والمعالجات المتخصصة مثل NVIDIA PTX.
  • تمت إضافة دعم التعليمات الموسعة Intel AVX86-FP512 ونوع _Float16 إلى الواجهة الخلفية لإنشاء التعليمات البرمجية لبنية x16.
  • بالنسبة إلى بنية x86، تمت إضافة الحماية ضد الثغرات الأمنية في المعالجات الناتجة عن التنفيذ التخميني للتعليمات بعد عمليات القفز للأمام غير المشروطة. تحدث المشكلة بسبب المعالجة الوقائية للتعليمات التي تتبع تعليمات الفرع مباشرة في الذاكرة (SLS، تخمين الخط المستقيم). لتمكين الحماية، يُقترح خيار "-mharden-sls".
  • تمت إضافة اكتشاف استخدام المتغيرات غير المهيأة للمحلل الثابت التجريبي. تمت إضافة الدعم الأولي لتحليل كود التجميع في الإدخالات المضمنة. تحسين تتبع الذاكرة. تمت إعادة كتابة التعليمات البرمجية لمعالجة تعبيرات التبديل.
  • تمت إضافة 30 استدعاءًا جديدًا إلى libgccjit، وهي مكتبة مشتركة لتضمين منشئ الأكواد في عمليات أخرى واستخدامها لتجميع JIT للكود الثانوي في كود الجهاز.
  • تمت إضافة دعم آلية CO-RE (الترجمة مرة واحدة - التشغيل في كل مكان) إلى الواجهة الخلفية لإنشاء رمز بايت BPF، والذي يسمح لك بتجميع كود برامج eBPF لنواة Linux مرة واحدة فقط واستخدام محمل عالمي خاص يتكيف مع البرنامج المحمل إلى النواة الحالية وتنسيق أنواع BPF). يحل CO-RE مشكلة قابلية نقل برامج eBPF المترجمة، والتي كان من الممكن استخدامها سابقًا فقط في إصدار النواة التي تم تجميعها من أجلها، نظرًا لأن موضع العناصر في هياكل البيانات يتغير من إصدار إلى إصدار.
  • تضيف الواجهة الخلفية RISC-V دعمًا لامتدادات بنية مجموعة التعليمات الجديدة zba وzbb وzbc وzbs، بالإضافة إلى امتدادات ISA لعمليات التشفير المتجهة والعددية. بشكل افتراضي، يتم توفير الدعم لمواصفات RISC-V ISA 20191213. تمت إضافة العلامة -mtune=thead-c906 لتمكين التحسينات لنواة T-HEAD c906.
  • تمت إضافة دعم النوع __int128_t/integer(kind=16) إلى الواجهة الخلفية لإنشاء التعليمات البرمجية لوحدات معالجة الرسومات AMD استنادًا إلى البنية الدقيقة لـ GCN. من الممكن استخدام ما يصل إلى 40 مجموعة عمل لكل وحدة حوسبة (CU) وما يصل إلى 16 واجهة تعليمات (واجهة الموجة، مجموعة من الخيوط التي يتم تنفيذها بالتوازي بواسطة محرك SIMD) لكل مجموعة. في السابق، كان مسموحًا بحافة تعليمات واحدة فقط لكل CU.
  • أضافت الواجهة الخلفية لـ NVPTX، المصممة لإنشاء التعليمات البرمجية باستخدام بنية مجموعة تعليمات NVIDIA PTX (Parallel Thread Execution)، القدرة على استخدام علامات "-march" و"-mptx" و"-march-map". تم تنفيذ الدعم لـ PTX ISA sm_53 وsm_70 وsm_75 وsm_80. البنية الافتراضية هي sm_30.
  • في الواجهة الخلفية لمعالجات PowerPC / PowerPC64 / RS6000، تمت إعادة كتابة تطبيقات الوظائف المضمنة. تم توثيق الوظائف المضمنة __builtin_get_texasr و__builtin_get_texasru و__builtin_get_tfhar و__builtin_get_tfiar و__builtin_set_texasr و__builtin_set_texasru و__builtin_set_tfhar و__builtin_set_tfiar.
  • دعم Arm Ampere-64 (-mcpu/-mtune ampere1)، وArm Cortex-A1 (cortex-a510)، وArm Cortex-A510 (cortex-a710)، وArm Cortex-X710 (cortex- x2). تمت إضافة دعم لخيارات بنية ARMv2 الجديدة للاستخدام مع خيار "-march":armv8-a، وarmv8.7-a، وarmv8.8-a. تمت إضافة تنفيذ وظائف C المضمنة في المترجم (Intrinsics) للتحميل الذري وحفظ البيانات في الذاكرة، بناءً على استخدام تعليمات ARM الموسعة (ls9). تمت إضافة دعم لتسريع وظائف memcpy وmemmove وmemset باستخدام ملحق mopsoption ARM.
  • تمت إضافة وضع فحص جديد "-fsanitize=shadow-call-stack" (ShadowCallStack)، والذي يتوفر حاليًا فقط لبنية AArch64 ويعمل عند إنشاء التعليمات البرمجية باستخدام خيار "-ffixed-r18". يوفر الوضع الحماية ضد الكتابة فوق عنوان الإرجاع من إحدى الوظائف في حالة تجاوز سعة المخزن المؤقت على المكدس. يتمثل جوهر الحماية في حفظ عنوان الإرجاع في مكدس "ظل" منفصل بعد نقل التحكم إلى الوظيفة واسترداد هذا العنوان قبل الخروج من الوظيفة.

المصدر: opennet.ru

إضافة تعليق