LLVM 15.0 ಕಂಪೈಲರ್ ಸೂಟ್‌ನ ಬಿಡುಗಡೆ

ಆರು ತಿಂಗಳ ಅಭಿವೃದ್ಧಿಯ ನಂತರ, LLVM 15.0 ಪ್ರಾಜೆಕ್ಟ್‌ನ ಬಿಡುಗಡೆಯನ್ನು ಪ್ರಸ್ತುತಪಡಿಸಲಾಯಿತು - GCC-ಹೊಂದಾಣಿಕೆಯ ಟೂಲ್‌ಕಿಟ್ (ಕಂಪೈಲರ್‌ಗಳು, ಆಪ್ಟಿಮೈಜರ್‌ಗಳು ಮತ್ತು ಕೋಡ್ ಜನರೇಟರ್‌ಗಳು) ಇದು ಪ್ರೋಗ್ರಾಂಗಳನ್ನು RISC-ತರಹದ ವರ್ಚುವಲ್ ಸೂಚನೆಗಳ ಮಧ್ಯಂತರ ಬಿಟ್‌ಕೋಡ್‌ಗೆ ಕಂಪೈಲ್ ಮಾಡುತ್ತದೆ (ಒಂದು ಕಡಿಮೆ-ಮಟ್ಟದ ವರ್ಚುವಲ್ ಯಂತ್ರದೊಂದಿಗೆ ಬಹು ಹಂತದ ಆಪ್ಟಿಮೈಸೇಶನ್ ಸಿಸ್ಟಮ್). ರಚಿತವಾದ ಸೂಡೊಕೋಡ್ ಅನ್ನು JIT ಕಂಪೈಲರ್ ಅನ್ನು ಬಳಸಿಕೊಂಡು ಪ್ರೋಗ್ರಾಂ ಎಕ್ಸಿಕ್ಯೂಶನ್ ಸಮಯದಲ್ಲಿ ನೇರವಾಗಿ ಯಂತ್ರ ಸೂಚನೆಗಳಾಗಿ ಪರಿವರ್ತಿಸಬಹುದು.

ಕ್ಲಾಂಗ್ 15.0 ನಲ್ಲಿ ಪ್ರಮುಖ ಸುಧಾರಣೆಗಳು:

  • x86 ಆರ್ಕಿಟೆಕ್ಚರ್ ಆಧಾರಿತ ಸಿಸ್ಟಂಗಳಿಗಾಗಿ, "-fzero-call-used-regs" ಫ್ಲ್ಯಾಗ್ ಅನ್ನು ಸೇರಿಸಲಾಗಿದೆ, ಇದು ಫಂಕ್ಷನ್‌ನಲ್ಲಿ ಬಳಸಲಾದ ಎಲ್ಲಾ CPU ರೆಜಿಸ್ಟರ್‌ಗಳನ್ನು ಕಾರ್ಯದಿಂದ ನಿಯಂತ್ರಣವನ್ನು ಹಿಂದಿರುಗಿಸುವ ಮೊದಲು ಶೂನ್ಯಕ್ಕೆ ಮರುಹೊಂದಿಸಲಾಗಿದೆ ಎಂದು ಖಚಿತಪಡಿಸುತ್ತದೆ. ಈ ಆಯ್ಕೆಯು ಕಾರ್ಯಗಳಿಂದ ಮಾಹಿತಿ ಸೋರಿಕೆಯಿಂದ ರಕ್ಷಿಸಲು ಮತ್ತು ROP (ರಿಟರ್ನ್-ಓರಿಯೆಂಟೆಡ್ ಪ್ರೋಗ್ರಾಮಿಂಗ್) ಗ್ಯಾಜೆಟ್‌ಗಳನ್ನು ಶೋಷಣೆಯಲ್ಲಿ ನಿರ್ಮಿಸಲು ಸೂಕ್ತವಾದ ಬ್ಲಾಕ್‌ಗಳ ಸಂಖ್ಯೆಯನ್ನು ಸರಿಸುಮಾರು 20% ರಷ್ಟು ಕಡಿಮೆ ಮಾಡಲು ನಿಮಗೆ ಅನುಮತಿಸುತ್ತದೆ.
  • ಸಿ ಕೋಡ್‌ಗಾಗಿ ರಚನೆಗಳ ಮೆಮೊರಿ ನಿಯೋಜನೆಯ ಯಾದೃಚ್ಛಿಕಗೊಳಿಸುವಿಕೆಯನ್ನು ಅಳವಡಿಸಲಾಗಿದೆ, ಇದು ದುರ್ಬಲತೆಗಳ ಶೋಷಣೆಯ ಸಂದರ್ಭದಲ್ಲಿ ರಚನೆಗಳಿಂದ ಡೇಟಾವನ್ನು ಹೊರತೆಗೆಯುವುದನ್ನು ಸಂಕೀರ್ಣಗೊಳಿಸುತ್ತದೆ. randomize_layout ಮತ್ತು no_randomize_layout ಗುಣಲಕ್ಷಣಗಳನ್ನು ಬಳಸಿಕೊಂಡು ಯಾದೃಚ್ಛಿಕಗೊಳಿಸುವಿಕೆಯನ್ನು ಆನ್ ಮತ್ತು ಆಫ್ ಮಾಡಲಾಗಿದೆ ಮತ್ತು "-frandomize-layout-seed" ಅಥವಾ "-frandomize-layout-seed-file" ಫ್ಲ್ಯಾಗ್ ಅನ್ನು ಬಳಸಿಕೊಂಡು ಬೀಜವನ್ನು ಹೊಂದಿಸುವ ಅಗತ್ಯವಿದೆ.
  • "-fstrict-flex-arrays=" ಫ್ಲ್ಯಾಗ್ ಸೇರಿಸಲಾಗಿದೆ ", ಇದರೊಂದಿಗೆ ನೀವು ರಚನೆಗಳಲ್ಲಿ ಹೊಂದಿಕೊಳ್ಳುವ ರಚನೆಯ ಅಂಶಕ್ಕಾಗಿ ಗಡಿಗಳನ್ನು ನಿಯಂತ್ರಿಸಬಹುದು (ಫ್ಲೆಕ್ಸಿಬಲ್ ಅರೇ ಸದಸ್ಯರು, ರಚನೆಯ ಕೊನೆಯಲ್ಲಿ ಅನಿರ್ದಿಷ್ಟ ಗಾತ್ರದ ಒಂದು ಶ್ರೇಣಿ). 0 (ಡೀಫಾಲ್ಟ್) ಗೆ ಹೊಂದಿಸಿದಾಗ, ರಚನೆಯೊಂದಿಗಿನ ರಚನೆಯ ಕೊನೆಯ ಅಂಶವನ್ನು ಯಾವಾಗಲೂ ಹೊಂದಿಕೊಳ್ಳುವ ರಚನೆಯಾಗಿ ಸಂಸ್ಕರಿಸಲಾಗುತ್ತದೆ, 1 - ಕೇವಲ ಗಾತ್ರಗಳು [], [0] ಮತ್ತು [1] ಅನ್ನು ಹೊಂದಿಕೊಳ್ಳುವ ರಚನೆಯಾಗಿ ಸಂಸ್ಕರಿಸಲಾಗುತ್ತದೆ, 2 - ಕೇವಲ ಗಾತ್ರಗಳು [] ಮತ್ತು [0] ಅನ್ನು ಹೊಂದಿಕೊಳ್ಳುವ ರಚನೆಯಂತೆ ಸಂಸ್ಕರಿಸಲಾಗುತ್ತದೆ.
  • ಶೇಡರ್‌ಗಳನ್ನು ಬರೆಯಲು ಡೈರೆಕ್ಟ್‌ಎಕ್ಸ್‌ನಲ್ಲಿ ಬಳಸಲಾಗುವ C-ರೀತಿಯ ಭಾಷೆ HLSL (ಹೈ-ಲೆವೆಲ್ ಶೇಡರ್ ಲಾಂಗ್ವೇಜ್) ಗೆ ಪ್ರಾಯೋಗಿಕ ಬೆಂಬಲವನ್ನು ಸೇರಿಸಲಾಗಿದೆ.
  • ಸ್ಥಿರ ಮತ್ತು ವೇರಿಯಬಲ್-ಉದ್ದದ ಸರಣಿಗಳೊಂದಿಗೆ ಹೊಂದಾಣಿಕೆಯಾಗದ ಆರ್ಗ್ಯುಮೆಂಟ್ ಘೋಷಣೆಗಳೊಂದಿಗೆ ಕಾರ್ಯಗಳನ್ನು ಅತಿಕ್ರಮಿಸುವ ಬಗ್ಗೆ ಎಚ್ಚರಿಸಲು "-ವಾರ್ರೇ-ಪ್ಯಾರಾಮೀಟರ್" ಅನ್ನು ಸೇರಿಸಲಾಗಿದೆ.
  • MSVC ಯೊಂದಿಗೆ ಸುಧಾರಿತ ಹೊಂದಾಣಿಕೆ. MSVC ಯಲ್ಲಿ ಒದಗಿಸಲಾದ "#ಪ್ರಾಗ್ಮಾ ಫಂಕ್ಷನ್" (ಇನ್‌ಲೈನ್ ವಿಸ್ತರಣೆಯ ಬದಲಿಗೆ ಫಂಕ್ಷನ್ ಕರೆಯನ್ನು ರಚಿಸಲು ಕಂಪೈಲರ್‌ಗೆ ಸೂಚನೆ ನೀಡುತ್ತದೆ) ಮತ್ತು "#ಪ್ರಾಗ್ಮಾ ಅಲೋಕ್_ಟೆಕ್ಸ್ಟ್" (ಫಂಕ್ಷನ್ ಕೋಡ್‌ನೊಂದಿಗೆ ವಿಭಾಗದ ಹೆಸರನ್ನು ವಿವರಿಸುತ್ತದೆ) ಗೆ ಬೆಂಬಲವನ್ನು ಸೇರಿಸಲಾಗಿದೆ. MSVC-ಹೊಂದಾಣಿಕೆಯ /JMC ಮತ್ತು /JMC ಫ್ಲ್ಯಾಗ್‌ಗಳಿಗೆ ಬೆಂಬಲವನ್ನು ಸೇರಿಸಲಾಗಿದೆ.
  • ಭವಿಷ್ಯದ C2X ಮತ್ತು C++23 ಮಾನದಂಡಗಳನ್ನು ಬೆಂಬಲಿಸಲು ಕೆಲಸವು ಮುಂದುವರಿಯುತ್ತದೆ. C ಭಾಷೆಗಾಗಿ, ಈ ಕೆಳಗಿನವುಗಳನ್ನು ಅಳವಡಿಸಲಾಗಿದೆ: ನಾರ್ಟರ್ನ್ ಗುಣಲಕ್ಷಣ, ತಪ್ಪು ಮತ್ತು ಸರಿ ಎಂಬ ಕೀವರ್ಡ್‌ಗಳು, ನಿರ್ದಿಷ್ಟ ಬಿಟ್ ಆಳದ ಪೂರ್ಣಾಂಕಗಳಿಗಾಗಿ _BitInt(N) ಪ್ರಕಾರ, *_WIDTH ಮ್ಯಾಕ್ರೋಗಳು, UTF-8 ಎನ್‌ಕೋಡ್ ಮಾಡಿದ ಅಕ್ಷರಗಳಿಗೆ u8 ಪೂರ್ವಪ್ರತ್ಯಯ.

    C++ ಗಾಗಿ, ಈ ಕೆಳಗಿನವುಗಳನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸಲಾಗಿದೆ: ಮಾಡ್ಯೂಲ್ ವಿಲೀನಗೊಳಿಸುವಿಕೆ, ಕಾರ್ಯ ಸದಸ್ಯರ ABI ಪ್ರತ್ಯೇಕತೆ, ಮಾಡ್ಯೂಲ್‌ಗಳಲ್ಲಿ ಸ್ಥಳೀಯವಲ್ಲದ ವೇರಿಯಬಲ್‌ಗಳ ಡೈನಾಮಿಕ್ ಇನಿಶಿಯಲೈಸೇಶನ್, ಮಲ್ಟಿಡೈಮೆನ್ಷನಲ್ ಇಂಡೆಕ್ಸ್ ಆಪರೇಟರ್‌ಗಳು, ಸ್ವಯಂ(x), ನಾನ್-ಲಿಟರಲ್ ವೇರಿಯಬಲ್‌ಗಳು, ಗೊಟೊ ಮತ್ತು ಲೇಬಲ್‌ಗಳು constexpr ಎಂದು ಘೋಷಿಸಲಾಗಿದೆ , ಡಿಲಿಮಿಟೆಡ್ ಎಸ್ಕೇಪ್ ಸೀಕ್ವೆನ್ಸ್, ಎಸ್ಕೇಪ್ ಕ್ಯಾರೆಕ್ಟರ್ ಎಂದು ಹೆಸರಿಸಲಾಗಿದೆ.

  • OpenCL ಮತ್ತು OpenMP ಬೆಂಬಲದೊಂದಿಗೆ ಸಂಬಂಧಿಸಿದ ಸಾಮರ್ಥ್ಯಗಳನ್ನು ವಿಸ್ತರಿಸಲಾಗಿದೆ. OpenCL ವಿಸ್ತರಣೆಗೆ ಬೆಂಬಲವನ್ನು ಸೇರಿಸಲಾಗಿದೆ cl_khr_subgroup_rotate.
  • x86 ಆರ್ಕಿಟೆಕ್ಚರ್‌ಗಾಗಿ, ಬೇಷರತ್ತಾದ ಫಾರ್ವರ್ಡ್ ಜಂಪ್ ಕಾರ್ಯಾಚರಣೆಗಳ ನಂತರ ಸೂಚನೆಗಳ ಊಹಾತ್ಮಕ ಕಾರ್ಯಗತಗೊಳಿಸುವಿಕೆಯಿಂದ ಉಂಟಾಗುವ ಪ್ರೊಸೆಸರ್‌ಗಳಲ್ಲಿನ ದುರ್ಬಲತೆಗಳ ವಿರುದ್ಧ ರಕ್ಷಣೆಯನ್ನು ಸೇರಿಸಲಾಗಿದೆ. ಮೆಮೊರಿಯಲ್ಲಿನ ಶಾಖೆಯ ಸೂಚನೆಯನ್ನು ಅನುಸರಿಸಿ ಸೂಚನೆಗಳ ಪೂರ್ವಭಾವಿ ಪ್ರಕ್ರಿಯೆಯಿಂದಾಗಿ ಸಮಸ್ಯೆ ಉಂಟಾಗುತ್ತದೆ (SLS, ಸ್ಟ್ರೈಟ್ ಲೈನ್ ಸ್ಪೆಕ್ಯುಲೇಷನ್). ರಕ್ಷಣೆಯನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಲು, “-mharden-sls=[none|all|return|indirect-jmp]” ಆಯ್ಕೆಯನ್ನು ಪ್ರಸ್ತಾಪಿಸಲಾಗಿದೆ.
  • SSE2 ವಿಸ್ತರಣೆಯನ್ನು ಬೆಂಬಲಿಸುವ ಪ್ಲಾಟ್‌ಫಾರ್ಮ್‌ಗಳಿಗಾಗಿ, _Float16 ಪ್ರಕಾರವನ್ನು ಸೇರಿಸಲಾಗಿದೆ, AVX512-FP16 ಸೂಚನೆಗಳಿಗೆ ಬೆಂಬಲದ ಕೊರತೆಯ ಸಂದರ್ಭದಲ್ಲಿ ಫ್ಲೋಟ್ ಪ್ರಕಾರವನ್ನು ಬಳಸಿಕೊಂಡು ಅನುಕರಿಸಲಾಗುತ್ತದೆ.
  • RDPRU ಸೂಚನೆಯ ಬಳಕೆಯನ್ನು ನಿಯಂತ್ರಿಸಲು "-m[no-]rdpru" ಫ್ಲ್ಯಾಗ್ ಅನ್ನು ಸೇರಿಸಲಾಗಿದೆ, AMD Zen2 ಪ್ರೊಸೆಸರ್‌ಗಳಿಂದ ಪ್ರಾರಂಭವಾಗಿ ಬೆಂಬಲಿತವಾಗಿದೆ.
  • RETBLEED ದುರ್ಬಲತೆಯ ವಿರುದ್ಧ ರಕ್ಷಿಸಲು "-mfunction-return=thunk-extern" ಫ್ಲ್ಯಾಗ್ ಅನ್ನು ಸೇರಿಸಲಾಗಿದೆ, ಇದು ಪರೋಕ್ಷ ಶಾಖೆಗಳಿಗೆ ಊಹಾತ್ಮಕ ಕಾರ್ಯಗತಗೊಳಿಸುವ ಕಾರ್ಯವಿಧಾನದ ಒಳಗೊಳ್ಳುವಿಕೆಯನ್ನು ಹೊರತುಪಡಿಸಿದ ಸೂಚನೆಗಳ ಅನುಕ್ರಮವನ್ನು ಸೇರಿಸುವ ಮೂಲಕ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ.

LLVM 15.0 ನಲ್ಲಿನ ಪ್ರಮುಖ ಆವಿಷ್ಕಾರಗಳು:

  • Cortex-M85 CPU, Armv9-A, Armv9.1-A ಮತ್ತು Armv9.2-A ಆರ್ಕಿಟೆಕ್ಚರ್‌ಗಳು, Armv8.1-M PACBTI-M ವಿಸ್ತರಣೆಗಳಿಗೆ ಬೆಂಬಲವನ್ನು ಸೇರಿಸಲಾಗಿದೆ.
  • ಡೈರೆಕ್ಟ್‌ಎಕ್ಸ್‌ಗೆ ಪ್ರಾಯೋಗಿಕ ಬ್ಯಾಕೆಂಡ್ ಅನ್ನು ಸೇರಿಸಲಾಗಿದ್ದು ಅದು ಡೈರೆಕ್ಟ್‌ಎಕ್ಸ್ ಶೇಡರ್‌ಗಳಿಗಾಗಿ ಬಳಸುವ ಡಿಎಕ್ಸ್‌ಐಎಲ್ (ಡೈರೆಕ್ಟ್‌ಎಕ್ಸ್ ಇಂಟರ್ಮೀಡಿಯೇಟ್ ಲ್ಯಾಂಗ್ವೇಜ್) ಫಾರ್ಮ್ಯಾಟ್ ಅನ್ನು ಬೆಂಬಲಿಸುತ್ತದೆ. ಅಸೆಂಬ್ಲಿ ಸಮಯದಲ್ಲಿ "-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=DirectX" ಪ್ಯಾರಾಮೀಟರ್ ಅನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸುವ ಮೂಲಕ ಬ್ಯಾಕೆಂಡ್ ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ.
  • Libc++ C++20 ಮತ್ತು C++2b ಮಾನದಂಡಗಳ ಹೊಸ ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸುವುದನ್ನು ಮುಂದುವರೆಸಿದೆ, ಇದರಲ್ಲಿ "ಫಾರ್ಮ್ಯಾಟ್" ಲೈಬ್ರರಿಯ ಅನುಷ್ಠಾನದ ಪೂರ್ಣಗೊಳಿಸುವಿಕೆ ಮತ್ತು "ರೇಂಜ್" ಲೈಬ್ರರಿಯ ಪ್ರಸ್ತಾವಿತ ಪ್ರಾಯೋಗಿಕ ಆವೃತ್ತಿಯೂ ಸೇರಿದೆ.
  • x86, PowerPC ಮತ್ತು RISC-V ಆರ್ಕಿಟೆಕ್ಚರ್‌ಗಳಿಗಾಗಿ ಸುಧಾರಿತ ಬ್ಯಾಕೆಂಡ್‌ಗಳು.
  • LLD ಲಿಂಕರ್ ಮತ್ತು LLDB ಡೀಬಗ್ಗರ್‌ನ ಸಾಮರ್ಥ್ಯಗಳನ್ನು ಹೆಚ್ಚಿಸಲಾಗಿದೆ.

ಮೂಲ: opennet.ru

ಕಾಮೆಂಟ್ ಅನ್ನು ಸೇರಿಸಿ