LLVM 13.0 ์ปดํŒŒ์ผ๋Ÿฌ ์ œํ’ˆ๊ตฐ ์ถœ์‹œ

13.0๊ฐœ์›”๊ฐ„์˜ ๊ฐœ๋ฐœ ๋์— LLVM XNUMX ํ”„๋กœ์ ํŠธ๊ฐ€ ์ถœ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ํ”„๋กœ๊ทธ๋žจ์„ RISC ์œ ์‚ฌ ๊ฐ€์ƒ ๋ช…๋ น์–ด(๋‹ค๋‹จ๊ณ„ ์ตœ์ ํ™” ์‹œ์Šคํ…œ์„ ๊ฐ–์ถ˜ ์ €์ˆ˜์ค€ ๊ฐ€์ƒ ๋จธ์‹ )์˜ ์ค‘๊ฐ„ ๋น„ํŠธ์ฝ”๋“œ๋กœ ์ปดํŒŒ์ผํ•˜๋Š” GCC ํ˜ธํ™˜ ํˆดํ‚ท(์ปดํŒŒ์ผ๋Ÿฌ, ์ตœ์ ํ™” ํ”„๋กœ๊ทธ๋žจ, ์ฝ”๋“œ ์ƒ์„ฑ๊ธฐ)์ž…๋‹ˆ๋‹ค. ์ƒ์„ฑ๋œ ์˜์‚ฌ์ฝ”๋“œ๋Š” ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์‹œ์ ์— JIT ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ๊ณ„์–ด ๋ช…๋ น์–ด๋กœ ์ง์ ‘ ๋ณ€ํ™˜๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Clang 13.0์˜ ๊ฐœ์„  ์‚ฌํ•ญ:

  • ๋ณด์žฅ๋œ ๊ผฌ๋ฆฌ ํ˜ธ์ถœ(ํ•จ์ˆ˜ ๋งจ ๋์—์„œ ์„œ๋ธŒ๋ฃจํ‹ด์„ ํ˜ธ์ถœํ•˜๊ณ , ์„œ๋ธŒ๋ฃจํ‹ด์ด ์ž๊ธฐ ์ž์‹ ์„ ํ˜ธ์ถœํ•˜๋Š” ๊ฒฝ์šฐ ๊ผฌ๋ฆฌ ์žฌ๊ท€๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ธฐ๋Šฅ)์ด ์ง€์›๋ฉ๋‹ˆ๋‹ค. ๋ณด์žฅ๋œ ๊ผฌ๋ฆฌ ํ˜ธ์ถœ์€ C++์˜ "[[clang::musttail]]" ์†์„ฑ๊ณผ C์˜ "__attribute__((musttail))" ์†์„ฑ์„ "return" ํ‘œํ˜„์‹์— ์‚ฌ์šฉํ•˜์—ฌ ์ง€์›๋ฉ๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์€ ์ฝ”๋“œ๋ฅผ ํ”Œ๋žซ ๋ฐ˜๋ณต์œผ๋กœ ์ „๊ฐœํ•˜์—ฌ ์Šคํƒ ๊ณต๊ฐ„์„ ์ ˆ์•ฝํ•˜๋Š” ์ตœ์ ํ™”๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.
  • ์ด์ œ C++11 ์Šคํƒ€์ผ์˜ ์†์„ฑ ์ •์˜๊ฐ€ "[[]]" ํ˜•์‹์„ ์‚ฌ์šฉํ•˜์—ฌ clang "using" ์„ ์–ธ ๋ฐ ํ™•์žฅ์—์„œ ์ง€์›๋ฉ๋‹ˆ๋‹ค.
  • ์‚ฌ์šฉ์ž ์ฝ”๋“œ์—์„œ ์˜ˆ์•ฝ๋œ ์‹๋ณ„์ž๋ฅผ ์ง€์ •ํ•  ๋•Œ ๊ฒฝ๊ณ ๋ฅผ ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•ด "-Wreserved-identifier" ํ”Œ๋ž˜๊ทธ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๋งค๊ฐœ๋ณ€์ˆ˜๋‚˜ ๋ณ€์ˆ˜๊ฐ€ ์„ค์ •๋˜์—ˆ์ง€๋งŒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ๊ฒฝ๊ณ ๋ฅผ ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•ด "-Wunused-but-set-parameter" ๋ฐ "-Wunused-but-set-variable" ํ”Œ๋ž˜๊ทธ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๋บ„์…ˆ ์—ฐ์‚ฐ์—์„œ ๋„ ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ”๋“œ๊ฐ€ ์ •์˜๋˜์ง€ ์•Š์€ ๋™์ž‘์„ ์ดˆ๋ž˜ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ ๊ฒฝ๊ณ ๋ฅผ ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•ด "-Wnull-pointer-subtraction" ํ”Œ๋ž˜๊ทธ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์ฒ˜๋ฆฌ ์ค‘์ธ ํŒŒ์ผ์— ์ •์˜๋œ ๊ฐ ํ•จ์ˆ˜์˜ ์Šคํƒ ํ”„๋ ˆ์ž„ ํฌ๊ธฐ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ์ถ”๊ฐ€ ".su" ํŒŒ์ผ์„ ๊ฐ ์ฝ”๋“œ ํŒŒ์ผ์— ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด "-fstack-usage" ํ”Œ๋ž˜๊ทธ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์ •์  ๋ถ„์„๊ธฐ์— ์ƒˆ๋กœ์šด ์ถœ๋ ฅ ์œ ํ˜•์ธ "sarif-html"์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ฉด HTML ๋ฐ Sarif ํ˜•์‹์œผ๋กœ ๋ณด๊ณ ์„œ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. allocClassWithName์ด๋ผ๋Š” ์ƒˆ๋กœ์šด ๊ฒ€์‚ฌ๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. "-analyzer-display-progress" ์˜ต์…˜์„ ์ง€์ •ํ•˜๋ฉด ๊ฐ ํ•จ์ˆ˜์˜ ๋ถ„์„ ์‹œ๊ฐ„์ด ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค. ์Šค๋งˆํŠธ ํฌ์ธํ„ฐ ๋ถ„์„๊ธฐ(alpha.cplusplus.SmartPtr)์˜ ์ค€๋น„๊ฐ€ ๊ฑฐ์˜ ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • OpenCL ์ง€์› ๊ด€๋ จ ๊ธฐ๋Šฅ์ด ํ™•์žฅ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ํ™•์žฅ์ž cl_khr_integer_dot_product, cl_khr_extended_bit_ops, __cl_clang_bitfields ๋ฐ __cl_clang_non_portable_kernel_param_types์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. OpenCL 3.0 ์‚ฌ์–‘ ๊ตฌํ˜„์ด ๊ณ„์†๋˜์—ˆ์Šต๋‹ˆ๋‹ค. C ์–ธ์–ด์˜ ๊ฒฝ์šฐ, ๋‹ค๋ฅธ ๋ฒ„์ „์„ ๋ช…์‹œ์ ์œผ๋กœ ์„ ํƒํ•˜์ง€ ์•Š๋Š” ํ•œ ๊ธฐ๋ณธ์ ์œผ๋กœ OpenCL 1.2 ์‚ฌ์–‘์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. C++์˜ ๊ฒฝ์šฐ, ".clcpp" ํ™•์žฅ์ž๋ฅผ ๊ฐ€์ง„ ํŒŒ์ผ์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • OpenMP 5.1 ์‚ฌ์–‘์— ์ •์˜๋œ ๋ฃจํ”„ ๋ณ€ํ™˜ ์ง€์‹œ๋ฌธ( "#pragma omp unrol" ๋ฐ "#pragma omp tile")์— ๋Œ€ํ•œ ์ง€์›์ด ๊ตฌํ˜„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • clang-format ์œ ํ‹ธ๋ฆฌํ‹ฐ๊ฐ€ ๋‹ค์Œ ์˜ต์…˜์œผ๋กœ ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. SpacesInLineCommentPrefix๋Š” ์ฃผ์„ ์•ž์˜ ๊ณต๋ฐฑ ์ˆ˜๋ฅผ ๊ฒฐ์ •ํ•˜๊ณ , IndentAccessModifiers, LambdaBodyIndentation, PPIndentWidth๋Š” ๋ ˆ์ฝ”๋“œ, ๋žŒ๋‹ค ํ‘œํ˜„์‹ ๋ฐ ์ „์ฒ˜๋ฆฌ๊ธฐ ์ง€์‹œ๋ฌธ์˜ ์ •๋ ฌ์„ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค. ํ—ค๋” ํŒŒ์ผ ๋ชฉ๋ก ์ •๋ ฌ ๊ธฐ๋Šฅ(SortIncludes)์ด ํ™•์žฅ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. JSON ํŒŒ์ผ ํ˜•์‹ ์ง€์ • ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • clang-tidy linter์— ์ƒˆ๋กœ์šด ๊ฒ€์‚ฌ ํ•ญ๋ชฉ์ด ๋Œ€๋Ÿ‰์œผ๋กœ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

LLVM 13.0์˜ ์ฃผ์š” ํ˜์‹  ์‚ฌํ•ญ:

  • ะ”ะพะฑะฐะฒะปะตะฝะฐ ะพะฟั†ะธั ยซ-ehcontguardยป ะดะปั ะธัะฟะพะปัŒะทะพะฒะฐะฝะธั ั‚ะตั…ะฝะพะปะพะณะธะธ CET (Windows Control-flow Enforcement Technology) ะดะปั ะทะฐั‰ะธั‚ั‹ ะฝะฐ ัั‚ะฐะฟะต ะพะฑั€ะฐะฑะพั‚ะบะธ ะธัะบะปัŽั‡ะตะฝะธะน ะพั‚ ะฒั‹ะฟะพะปะฝะตะฝะธั ัะบัะฟะปะพะธั‚ะพะฒ, ะฟะพัั‚ั€ะพะตะฝะฝั‹ั… ั ะธัะฟะพะปัŒะทะพะฒะฐะฝะธะตะผ ะฟั€ะธั‘ะผะพะฒ ะฒะพะทะฒั€ะฐั‚ะฝะพ-ะพั€ะธะตะฝั‚ะธั€ะพะฒะฐะฝะฝะพะณะพ ะฟั€ะพะณั€ะฐะผะผะธั€ะพะฒะฐะฝะธั (ROP, Return-Oriented Programming).
  • debuginfo-test ํ”„๋กœ์ ํŠธ์˜ ์ด๋ฆ„์ด cross-project-tests๋กœ ๋ณ€๊ฒฝ๋˜์—ˆ์œผ๋ฉฐ, ๋””๋ฒ„๊ทธ ์ •๋ณด์— ๊ตญํ•œ๋˜์ง€ ์•Š๊ณ  ๋‹ค์–‘ํ•œ ํ”„๋กœ์ ํŠธ์˜ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ํ…Œ์ŠคํŠธํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ๋นŒ๋“œ ์‹œ์Šคํ…œ์€ ์—ฌ๋Ÿฌ ๋ฐฐํฌํŒ์„ ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ๋Š” ์ง€์›์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ์œ ํ‹ธ๋ฆฌํ‹ฐ๊ฐ€ ์žˆ๋Š” ๋ฐฐํฌํŒ๊ณผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์žˆ๋Š” ๋ฐฐํฌํŒ์„ ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • AArch64 ์•„ํ‚คํ…์ฒ˜์˜ ๋ฐฑ์—”๋“œ๋Š” ์–ด์…ˆ๋ธ”๋Ÿฌ์—์„œ Armv9-A RME(Realm Management Extension) ๋ฐ SME(Scalable Matrix Extension) ํ™•์žฅ์„ ์ง€์›ํ•˜๋„๋ก ๊ตฌํ˜„๋ฉ๋‹ˆ๋‹ค.
  • Hexagon ์•„ํ‚คํ…์ฒ˜ ๋ฐฑ์—”๋“œ์— ISA V68/HVX์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • x86 ๋ฐฑ์—”๋“œ๋Š” AMD Zen 3 ํ”„๋กœ์„ธ์„œ์— ๋Œ€ํ•œ ์ง€์›์ด ํ–ฅ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • AMDGPU ๋ฐฑ์—”๋“œ์— GFX1013 RDNA2 APU์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ะ’ Libc++ ะฟั€ะพะดะพะปะถะตะฝะฐ ั€ะตะฐะปะธะทะฐั†ะธั ะฝะพะฒั‹ั… ะฒะพะทะผะพะถะฝะพัั‚ะตะน ัั‚ะฐะฝะดะฐั€ั‚ะพะฒ C++20 ะธ C++2b, ะฒ ั‚ะพะผ ั‡ะธัะปะต ะทะฐะฒะตั€ัˆะตะฝะฐ ั€ะตะฐะปะธะทะฐั†ะธั ะฑะธะฑะปะธะพั‚ะตะบะธ ยซconceptsยป. ะ”ะปั ะฟะปะฐั‚ั„ะพั€ะผั‹ Windows ะฝะฐ ะฑะฐะทะต MinGW ะดะพะฑะฐะฒะปะตะฝะฐ ะฟะพะดะดะตั€ะถะบะฐ std::filesystem. ะ ะฐะทะดะตะปะตะฝั‹ ะทะฐะณะพะปะพะฒะพั‡ะฝั‹ะต ั„ะฐะนะปั‹ <algorithm>, <iterator> ะธ <utility>. ะ”ะพะฑะฐะฒะปะตะฝะฐ ัะฑะพั€ะพั‡ะฝะฐั ะพะฟั†ะธั LIBCXX_ENABLE_INCOMPLETE_FEATURES ะดะปั ะพั‚ะบะปัŽั‡ะตะฝะธั ะทะฐะณะพะปะพะฒะพั‡ะฝั‹ั… ั„ะฐะนะปะพะฒ ั ะฝะต ะฟะพะปะฝะพัั‚ัŒัŽ ั€ะตะฐะปะธะทะพะฒะฐะฝะฝะพะน ั„ัƒะฝะบั†ะธะพะฝะฐะปัŒะฝะพัั‚ัŒัŽ.
  • LLD ๋ง์ปค๊ฐ€ ๋น…์—”๋””์•ˆ Aarch64 ํ”„๋กœ์„ธ์„œ๋ฅผ ์ง€์›ํ•˜๋„๋ก ํ™•์žฅ๋˜์—ˆ์œผ๋ฉฐ, Mach-O ๋ฐฑ์—”๋“œ๊ฐ€ ๊ฐœ์„ ๋˜์–ด ์ผ๋ฐ˜ ํ”„๋กœ๊ทธ๋žจ ๋งํฌ๊ฐ€ ๊ฐ€๋Šฅํ•ด์กŒ์Šต๋‹ˆ๋‹ค. LLD๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Glibc๋ฅผ ๋งํฌํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๊ฐœ์„  ์‚ฌํ•ญ๋„ ํฌํ•จ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • llvm-mca(๋จธ์‹  ์ฝ”๋“œ ๋ถ„์„๊ธฐ) ์œ ํ‹ธ๋ฆฌํ‹ฐ๊ฐ€ ARM Cortex-A55์™€ ๊ฐ™์€ ์ˆœ์„œํ˜• ์Šˆํผ์Šค์นผ๋ผ ํŒŒ์ดํ”„๋ผ์ธ ํ”„๋กœ์„ธ์„œ๋ฅผ ์ง€์›ํ•˜๋„๋ก ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • AArch64 ํ”Œ๋žซํผ์šฉ LLDB ๋””๋ฒ„๊ฑฐ๋Š” ์ด์ œ ํฌ์ธํ„ฐ ์ธ์ฆ, MTE(MemTag, ๋ฉ”๋ชจ๋ฆฌ ํƒœ๊น… ํ™•์žฅ) ๋ฉ”์ปค๋‹ˆ์ฆ˜ ๋ฐ SVE ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ ์™„๋ฒฝํ•˜๊ฒŒ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ์ž‘์—…์— ํƒœ๊ทธ๋ฅผ ๋ฐ”์ธ๋”ฉํ•˜๊ณ , ์œ ํšจํ•œ ํƒœ๊ทธ์— ๋ฐ”์ธ๋”ฉ๋˜์–ด์•ผ ํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ์•ก์„ธ์Šคํ•  ๋•Œ ํฌ์ธํ„ฐ๋ฅผ ํ™•์ธํ•˜๋Š” ๋ช…๋ น์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • LLDB ๋””๋ฒ„๊ฑฐ์™€ Fortran ํ”„๋ŸฐํŠธ์—”๋“œ Flang์ด ํ”„๋กœ์ ํŠธ์—์„œ ์ƒ์„ฑ๋œ ๋ฐ”์ด๋„ˆ๋ฆฌ ์–ด์…ˆ๋ธ”๋ฆฌ์— ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

DDoS ๋ณดํ˜ธ, VPS VDS ์„œ๋ฒ„๊ฐ€ ์žˆ๋Š” ์‚ฌ์ดํŠธ๋ฅผ ์œ„ํ•œ ์•ˆ์ •์ ์ธ ํ˜ธ์ŠคํŒ… ๊ตฌ์ž… ๐Ÿ”ฅ DDoS ๊ณต๊ฒฉ ๋ฐฉ์ง€ ๊ธฐ๋Šฅ์ด ํƒ‘์žฌ๋œ ์•ˆ์ •์ ์ธ ์›น์‚ฌ์ดํŠธ ํ˜ธ์ŠคํŒ…, VPS ๋ฐ VDS ์„œ๋ฒ„๋ฅผ ๊ตฌ๋งคํ•˜์„ธ์š” | ProHoster