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

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

LLVM 9.0์˜ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์—๋Š” ๋Œ€์ƒ RISC-V ํ”Œ๋žซํผ์—์„œ ์‹คํ—˜์  ์„ค๊ณ„ ํƒœ๊ทธ ์ œ๊ฑฐ, OpenCL์— ๋Œ€ํ•œ C++ ์ง€์›, ํ”„๋กœ๊ทธ๋žจ์„ LLD์—์„œ ๋™์ ์œผ๋กœ ๋กœ๋“œ๋œ ๋ถ€๋ถ„์œผ๋กœ ๋ถ„ํ• ํ•˜๋Š” ๊ธฐ๋Šฅ ๋ฐ "asm ๊ณ ํ† ", Linux ์ปค๋„ ์ฝ”๋“œ์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. libc++๋Š” WASI(WebAssembly System Interface)์— ๋Œ€ํ•œ ์ง€์›์„ ์ถ”๊ฐ€ํ–ˆ๊ณ  LLD๋Š” WebAssembly ๋™์  ๋งํฌ์— ๋Œ€ํ•œ ์ดˆ๊ธฐ ์ง€์›์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ฐœ๋Ÿ‰ Clang 9.0์—์„œ:

  • ์ถ”๊ฐ€๋จ GCC ๊ด€๋ จ ํ‘œํ˜„์‹ ๊ตฌํ˜„ "asm ๊ณ ํ† "๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์–ด์…ˆ๋ธ”๋Ÿฌ ์ธ๋ผ์ธ ๋ธ”๋ก์—์„œ C ์ฝ”๋“œ์˜ ๋ ˆ์ด๋ธ”๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์€ x86_64 ์•„ํ‚คํ…์ฒ˜๊ฐ€ ์žˆ๋Š” ์‹œ์Šคํ…œ์—์„œ Clang์„ ์‚ฌ์šฉํ•˜์—ฌ "CONFIG_JUMP_LABEL=y" ๋ชจ๋“œ์—์„œ Linux ์ปค๋„์„ ๋นŒ๋“œํ•˜๋Š” ๋ฐ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด์ „ ๋ฆด๋ฆฌ์Šค์— ์ถ”๊ฐ€๋œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ณ ๋ คํ•˜์—ฌ ์ด์ œ x86_64 ์•„ํ‚คํ…์ฒ˜์šฉ Clang์—์„œ Linux ์ปค๋„์„ ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์ด์ „์—๋Š” arm, aarch64, ppc32, ppc64le ๋ฐ mips ์•„ํ‚คํ…์ฒ˜์šฉ ๋นŒ๋“œ๋งŒ ์ง€์›๋˜์—ˆ์Šต๋‹ˆ๋‹ค). ๋˜ํ•œ Android ๋ฐ ChromeOS ํ”„๋กœ์ ํŠธ๋Š” ์ด๋ฏธ ์ปค๋„ ๊ตฌ์ถ•์— Clang์„ ์‚ฌ์šฉํ•˜๋„๋ก ์ „ํ™˜๋˜์—ˆ์œผ๋ฉฐ Google์€ ํ”„๋กœ๋•์…˜ Linux ์‹œ์Šคํ…œ์šฉ ์ปค๋„ ๊ตฌ์ถ•์„ ์œ„ํ•œ ์ฃผ์š” ํ”Œ๋žซํผ์œผ๋กœ Clang์„ ํ…Œ์ŠคํŠธํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์•ž์œผ๋กœ๋Š” LLD, llvm-objcopy, llvm-ar, llvm-nm ๋ฐ llvm-objdump๋ฅผ ํฌํ•จํ•œ ๋‹ค๋ฅธ LLVM ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์ปค๋„ ๋นŒ๋“œ ํ”„๋กœ์„ธ์Šค์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • OpenCL์—์„œ C++17์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ์‹คํ—˜์  ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํŠน์ • ๊ธฐ๋Šฅ์—๋Š” ์ฃผ์†Œ ๊ณต๊ฐ„ ์†์„ฑ ์ง€์›, ์œ ํ˜• ์บ์ŠคํŒ… ์—ฐ์‚ฐ์ž์— ์˜ํ•œ ์ฃผ์†Œ ๊ณต๊ฐ„ ๋ณ€ํ™˜ ์ฐจ๋‹จ, C์šฉ OpenCL๊ณผ ๊ฐ™์€ ๋ฒกํ„ฐ ์œ ํ˜• ์ œ๊ณต, ์ด๋ฏธ์ง€, ์ด๋ฒคํŠธ, ์ฑ„๋„ ๋“ฑ์— ๋Œ€ํ•œ ํŠน์ • OpenCL ์œ ํ˜• ์กด์žฌ ๋“ฑ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.
  • ํ”„๋ŸฐํŠธ์—”๋“œ(๊ตฌ๋ฌธ ๋ถ„์„, ์ดˆ๊ธฐํ™”) ๋ฐ ๋ฐฑ์—”๋“œ(์ตœ์ ํ™” ๋‹จ๊ณ„)์˜ ๋‹ค์–‘ํ•œ ๋‹จ๊ณ„์˜ ์‹คํ–‰ ์‹œ๊ฐ„์— ๋Œ€ํ•œ ๋ณด๊ณ ์„œ๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์ƒˆ๋กœ์šด ์ปดํŒŒ์ผ๋Ÿฌ ํ”Œ๋ž˜๊ทธ "-ftime-trace" ๋ฐ "-ftime-trace-granularity=N"์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ณด๊ณ ์„œ๋Š” chrome://tracing ๋ฐ speedscope.app๊ณผ ํ˜ธํ™˜๋˜๋Š” json ํ˜•์‹์œผ๋กœ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.
  • Visual Studio ํ™˜๊ฒฝ์—์„œ ๋ฉ”๋ชจ๋ฆฌ ์†Œ๋น„๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•  ์ˆ˜ ์žˆ๋Š” "__declspec(allocator)" ์ง€์ •์ž ์ฒ˜๋ฆฌ ๋ฐ ๋””๋ฒ„๊น… ์ •๋ณด ์ƒ์„ฑ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • C ์–ธ์–ด์˜ ๊ฒฝ์šฐ โ€œ__FILE__โ€ ๋งคํฌ๋กœ์™€ ์œ ์‚ฌํ•˜์ง€๋งŒ ์ „์ฒด ๊ฒฝ๋กœ ์—†์ด ํŒŒ์ผ ์ด๋ฆ„๋งŒ ํฌํ•จํ•˜๋Š” โ€œ__FILE_NAME__โ€ ๋งคํฌ๋กœ์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • C++์—์„œ๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜ ๋ฐ ์ธ์ˆ˜ ํŒจํ„ด, ์ฐธ์กฐ ์œ ํ˜•, ๋ฐ˜ํ™˜ ์œ ํ˜• ์ถ”๋ก , ๊ฐœ์ฒด, ์ž๋™ ์ƒ์„ฑ ํ•จ์ˆ˜, ๋‚ด์žฅ ์—ฐ์‚ฐ์ž ๋“ฑ ๋‹ค์–‘ํ•œ C++ ๊ธฐ๋Šฅ์„ ํฌ๊ด„ํ•˜๊ธฐ ์œ„ํ•ด ์ฃผ์†Œ ๊ณต๊ฐ„ ํŠน์„ฑ์— ๋Œ€ํ•œ ์ง€์›์„ ํ™•์žฅํ–ˆ์Šต๋‹ˆ๋‹ค.
  • OpenCL, OpenMP ๋ฐ CUDA ์ง€์›๊ณผ ๊ด€๋ จ๋œ ๊ธฐ๋Šฅ์ด ํ™•์žฅ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ๋‚ด์žฅ OpenCL ํ•จ์ˆ˜("-fdeclare-opencl-builtins" ํ”Œ๋ž˜๊ทธ๊ฐ€ ์ถ”๊ฐ€๋จ)์˜ ์•”์‹œ์  ํฌํ•จ์— ๋Œ€ํ•œ ์ดˆ๊ธฐ ์ง€์›, cl_arm_integer_dot_product ํ™•์žฅ์ด ๊ตฌํ˜„๋˜๊ณ  ์ง„๋‹จ ๋„๊ตฌ๊ฐ€ ํ™•์žฅ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์ •์  ๋ถ„์„๊ธฐ์˜ ์ž‘์—…์ด ๊ฐœ์„ ๋˜์—ˆ์œผ๋ฉฐ ์ •์  ๋ถ„์„ ์ˆ˜ํ–‰์— ๋Œ€ํ•œ ๋ฌธ์„œ๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ฒ€์‚ฌ๊ธฐ ๋ชจ๋“ˆ ๋ฐ ์ง€์›๋˜๋Š” ์˜ต์…˜("-analyzer-checker[-option]-help", "-analyzer-checker[-option]-help-alpha" ๋ฐ "-analyzer-checker[-option]-help)์„ ํ‘œ์‹œํ•˜๋Š” ํ”Œ๋ž˜๊ทธ๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. " -๊ฐœ๋ฐœ์ž"). ๊ฒฝ๊ณ ๋ฅผ ์˜ค๋ฅ˜๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด "-analyzer-werror" ํ”Œ๋ž˜๊ทธ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
    ์ƒˆ๋กœ์šด ํ™•์ธ ๋ชจ๋“œ๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

    • security.insecureAPI.DeprecatedOrUnsafeBufferHandling์€ ๋ฒ„ํผ ์ž‘์—… ์‹œ ์•ˆ์ „ํ•˜์ง€ ์•Š์€ ๋ฐฉ์‹์„ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค.
    • osx.MIGChecker๋Š” MIG(Mach Interface Generator) ํ˜ธ์ถœ ๊ทœ์น™ ์œ„๋ฐ˜์„ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.
    • optin.osx.OSObjectCStyleCast๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž˜๋ชป๋œ XNU libkern ๊ฐœ์ฒด ๋ณ€ํ™˜์„ ์ฐพ์Šต๋‹ˆ๋‹ค.
    • LLVM ์ฝ”๋“œ๋ฒ ์ด์Šค์˜ ์˜ค๋ฅ˜๋ฅผ ๊ฐ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ์ผ๋ จ์˜ ๋ชจ๋ธ๋ง ๊ฒ€์‚ฌ ๊ธฐ๋Šฅ์ด ํฌํ•จ๋œ apiModeling.llvm
    • ์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š์€ C++ ๊ฐ์ฒด๋ฅผ ๊ฒ€์‚ฌํ•˜๊ธฐ ์œ„ํ•œ ์•ˆ์ •ํ™”๋œ ์ฝ”๋“œ(optin.cplusplus ํŒจํ‚ค์ง€์˜ UninitializedObject)
  • clang-format ์œ ํ‹ธ๋ฆฌํ‹ฐ๋Š” C# ์–ธ์–ด์˜ ์ฝ”๋“œ ํ˜•์‹ ์ง€์ •์— ๋Œ€ํ•œ ์ง€์›์„ ์ถ”๊ฐ€ํ–ˆ์œผ๋ฉฐ Microsoft์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์ฝ”๋“œ ํ˜•์‹ ์ง€์ • ์Šคํƒ€์ผ์— ๋Œ€ํ•œ ์ง€์›์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • Visual Studio์— ํฌํ•จ๋œ cl.exe ์ปดํŒŒ์ผ๋Ÿฌ์™€์˜ ์˜ต์…˜ ์ˆ˜์ค€ ํ˜ธํ™˜์„ฑ์„ ์ œ๊ณตํ•˜๋Š” ๋Œ€์ฒด ๋ช…๋ น์ค„ ์ธํ„ฐํŽ˜์ด์Šค์ธ clang-cl์—๋Š” ์กด์žฌํ•˜์ง€ ์•Š๋Š” ํŒŒ์ผ์„ ๋ช…๋ น์ค„ ์˜ต์…˜์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ณ  ํ•ด๋‹น ๊ฒฝ๊ณ ๋ฅผ ํ‘œ์‹œํ•˜๋Š” ๊ฒฝํ—˜์  ๋ฐฉ๋ฒ•์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค(์˜ˆ: "clang-cl /diagnostic :caret /c test.cc"๋ฅผ ์‹คํ–‰ํ•  ๋•Œ);
  • OpenMP API์™€ ๊ด€๋ จ๋œ ์ถ”๊ฐ€ ๊ฒ€์‚ฌ๋ฅผ ํฌํ•จํ•˜์—ฌ ๋งŽ์€ ์ƒˆ๋กœ์šด ๊ฒ€์‚ฌ๊ฐ€ linter clang-tidy์— ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ํผ์ง€๋Š” ์„œ๋ฒ„ ๊ธฐ๋Šฅ ์พ…์พ… (Clang ์„œ๋ฒ„), ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ธ๋ฑ์Šค ๊ตฌ์ถ• ๋ชจ๋“œ๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์œผ๋ฉฐ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•œ ์ƒํ™ฉ๋ณ„ ์ž‘์—…์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค(๋ณ€์ˆ˜ ๊ฒ€์ƒ‰, ์ž๋™ ๋ฐ ๋งคํฌ๋กœ ์ •์˜ ํ™•์žฅ, ์ด์Šค์ผ€์ดํ”„๋œ ๋ฌธ์ž์—ด์„ ์ด์Šค์ผ€์ดํ”„๋˜์ง€ ์•Š์€ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜). Clang-tidy์˜ ๊ฒฝ๊ณ , ํ—ค๋” ํŒŒ์ผ์˜ ์˜ค๋ฅ˜ ์ง„๋‹จ ํ™•์žฅ, ์œ ํ˜• ๊ณ„์ธต ๊ตฌ์กฐ์— ๋Œ€ํ•œ ์ •๋ณด ํ‘œ์‹œ ๊ธฐ๋Šฅ ์ถ”๊ฐ€

์ฃผ์š” ํ˜์‹  LLVM 9.0:

  • ์‹คํ—˜์ ์ธ ๋ถ„ํ•  ๊ธฐ๋Šฅ์ด LLD ๋ง์ปค์— ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ํ•˜๋‚˜์˜ ํ”„๋กœ๊ทธ๋žจ์„ ์—ฌ๋Ÿฌ ๋ถ€๋ถ„์œผ๋กœ ๋ถ„ํ• ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ฐ ๋ถ€๋ถ„์€ ๋ณ„๋„์˜ ELF ํŒŒ์ผ์— ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ฉด ์ž‘์—… ์ค‘์— ํ•„์š”์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๋กœ๋“œํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ์ฃผ์š” ๋ถ€๋ถ„์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‚ด์žฅ PDF ๋ทฐ์–ด๋ฅผ ๋ณ„๋„์˜ ํŒŒ์ผ๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ์‚ฌ์šฉ์ž๊ฐ€ PDF๋ฅผ ์—ด ๋•Œ๋งŒ ๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŒŒ์ผ).

    LLD ๋ง์ปค ๊ฐ€์ ธ์˜จ arm32_7, arm64, ppc64le ๋ฐ x86_64 ์•„ํ‚คํ…์ฒ˜์šฉ Linux ์ปค๋„์„ ์—ฐ๊ฒฐํ•˜๊ธฐ์— ์ ํ•ฉํ•œ ์ƒํƒœ๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
    ์ƒˆ๋กœ์šด ์˜ต์…˜ "-"(stdout์œผ๋กœ ์ถœ๋ ฅ), "-[no-]allow-shlib-undefine", "-undefine-glob", "-nmagic", "-omagic", "-dependent-library", " - z ifunc-noplt" ๋ฐ "-z ๊ณตํ†ต ํŽ˜์ด์ง€ ํฌ๊ธฐ". AArch64 ์•„ํ‚คํ…์ฒ˜์˜ ๊ฒฝ์šฐ BTI(๋ถ„๊ธฐ ๋Œ€์ƒ ํ‘œ์‹œ๊ธฐ) ๋ฐ PAC(ํฌ์ธํ„ฐ ์ธ์ฆ ์ฝ”๋“œ) ์ง€์นจ์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. MIPS, RISC-V ๋ฐ PowerPC ํ”Œ๋žซํผ์— ๋Œ€ํ•œ ์ง€์›์ด ํฌ๊ฒŒ ํ–ฅ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. WebAssembly์— ๋Œ€ํ•œ ๋™์  ๋งํฌ์— ๋Œ€ํ•œ ์ดˆ๊ธฐ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

  • libc++์—์„œ ๊ตฌํ˜„ ํ•จ์ˆ˜ ssize, std::is_constant_evaluated, std::midpoint ๋ฐ std::lerp, "front" ๋ฐ "back" ๋ฉ”์„œ๋“œ๊ฐ€ std::span์— ์ถ”๊ฐ€๋˜์—ˆ์œผ๋ฉฐ, std::is_unbounded_array ๋ฐ std::is_bounded_array ์œ ํ˜•์˜ ์†์„ฑ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. , std ๊ธฐ๋Šฅ์ด ํ™•์žฅ๋˜์—ˆ์Šต๋‹ˆ๋‹ค: :atomic. GCC 4.9์— ๋Œ€ํ•œ ์ง€์›์ด ์ค‘๋‹จ๋˜์—ˆ์Šต๋‹ˆ๋‹ค(GCC 5.1 ๋ฐ ์ตœ์‹  ๋ฆด๋ฆฌ์Šค์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ). ์ถ”๊ฐ€๋œ ์ง€์› ๋‚ด๊ฐ€ ๊ทธ๋žฌ๋‹ˆ (WebAssembly ์‹œ์Šคํ…œ ์ธํ„ฐํŽ˜์ด์Šค, ๋ธŒ๋ผ์šฐ์ € ์™ธ๋ถ€์—์„œ WebAssembly๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค)
  • ์ƒˆ๋กœ์šด ์ตœ์ ํ™”๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ถ€ ์ƒํ™ฉ์—์„œ๋Š” memcmp ํ˜ธ์ถœ์„ bcmp๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์œ„ ์Šค์œ„์น˜ ๋ธ”๋ก์— ๋„๋‹ฌํ•  ์ˆ˜ ์—†๊ฑฐ๋‚˜ ๋ช…๋ น์–ด๊ฐ€ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ(์˜ˆ: void ์œ ํ˜•์˜ ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ) ์ ํ”„ ํ…Œ์ด๋ธ”์— ๋Œ€ํ•œ ๋ฒ”์œ„ ๊ฒ€์‚ฌ ์ƒ๋žต์ด ๊ตฌํ˜„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • RISC-V ์•„ํ‚คํ…์ฒ˜์˜ ๋ฐฑ์—”๋“œ๊ฐ€ ์•ˆ์ •ํ™”๋˜์–ด ๋” ์ด์ƒ ์‹คํ—˜์ ์ธ ์œ„์น˜์— ์žˆ์ง€ ์•Š๊ณ  ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ตฌ์ถ•๋ฉ๋‹ˆ๋‹ค. MAFDC ํ™•์žฅ์ด ํฌํ•จ๋œ RV32I ๋ฐ RV64I ๋ช…๋ น์–ด ์„ธํŠธ ๋ณ€ํ˜•์— ๋Œ€ํ•œ ์ „์ฒด ์ฝ”๋“œ ์ƒ์„ฑ ์ง€์›์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • X86, AArch64, ARM, SystemZ, MIPS, AMDGPU ๋ฐ PowerPC ์•„ํ‚คํ…์ฒ˜์˜ ๋ฐฑ์—”๋“œ๊ฐ€ ๋งŽ์ด ๊ฐœ์„ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๊ฑด์ถ•์˜ ๊ฒฝ์šฐ
    AArch64๋Š” SVE2(Scalable Vector Extension 2) ๋ฐ MTE(Memory Tagged Extensions) ๋ช…๋ น์— ๋Œ€ํ•œ ์ง€์›์„ ์ถ”๊ฐ€ํ–ˆ์œผ๋ฉฐ, ARM ๋ฐฑ์—”๋“œ์—๋Š” Armv8.1-M ์•„ํ‚คํ…์ฒ˜ ๋ฐ MVE(M-Profile Vector Extension) ํ™•์žฅ์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. GFX10(Navi) ์•„ํ‚คํ…์ฒ˜์— ๋Œ€ํ•œ ์ง€์›์ด AMDGPU ๋ฐฑ์—”๋“œ์— ์ถ”๊ฐ€๋˜์—ˆ์œผ๋ฉฐ ํ•จ์ˆ˜ ํ˜ธ์ถœ ๊ธฐ๋Šฅ์ด ๊ธฐ๋ณธ์ ์œผ๋กœ ํ™œ์„ฑํ™”๋˜์—ˆ์œผ๋ฉฐ ๊ฒฐํ•ฉ ํŒจ์Šค๊ฐ€ ํ™œ์„ฑํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค. DPP (๋ฐ์ดํ„ฐ ๋ณ‘๋ ฌ ๊ธฐ๋ณธ ์š”์†Œ).

  • ์ด์ œ LLDB ๋””๋ฒ„๊ฑฐ์—๋Š” ์—ญ์ถ”์ ์— ๋Œ€ํ•œ ์ƒ‰์ƒ ๊ฐ•์กฐ ํ‘œ์‹œ๊ฐ€ ์žˆ๊ณ  DWARF4 debug_types ๋ฐ DWARF5 debug_info ๋ธ”๋ก์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • COFF ํ˜•์‹์˜ ๊ฐ์ฒด ๋ฐ ์‹คํ–‰ ํŒŒ์ผ์— ๋Œ€ํ•œ ์ง€์›์ด llvm-objcopy ๋ฐ llvm-strip ์œ ํ‹ธ๋ฆฌํ‹ฐ์— ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€