15.0๊ฐ์๊ฐ์ ๊ฐ๋ฐ ๋์ LLVM XNUMX ํ๋ก์ ํธ์ ์ถ์๊ฐ ๋ฐํ๋์์ต๋๋ค. ์ด๋ ํ๋ก๊ทธ๋จ์ RISC์ ๊ฐ์ ๊ฐ์ ๋ช ๋ น์ด์ ์ค๊ฐ ๋นํธ์ฝ๋(๋ฎ์ ์์ค์ ๊ฐ์ ๋จธ์ )๋ก ์ปดํ์ผํ๋ GCC ํธํ ํดํท(์ปดํ์ผ๋ฌ, ์ตํฐ๋ง์ด์ ๋ฐ ์ฝ๋ ์์ฑ๊ธฐ)์ ๋๋ค. ๋ค๋จ๊ณ ์ต์ ํ ์์คํ ). ์์ฑ๋ ์์ฌ์ฝ๋๋ JIT ์ปดํ์ผ๋ฌ๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ก๊ทธ๋จ ์คํ ์ ์ง์ ๊ธฐ๊ณ์ด ๋ช ๋ น์ด๋ก ๋ณํ๋ ์ ์์ต๋๋ค.
Clang 15.0์ ์ฃผ์ ๊ฐ์ ์ฌํญ:
- x86 ์ํคํ ์ฒ ๊ธฐ๋ฐ ์์คํ ์ ๊ฒฝ์ฐ "-fzero-call-used-regs" ํ๋๊ทธ๊ฐ ์ถ๊ฐ๋์ด ํจ์์์ ์ ์ด๋ฅผ ๋ฐํํ๊ธฐ ์ ์ ํจ์์ ์ฌ์ฉ๋ ๋ชจ๋ CPU ๋ ์ง์คํฐ๊ฐ 20์ผ๋ก ์ฌ์ค์ ๋ฉ๋๋ค. ์ด ์ต์ ์ ์ฌ์ฉํ๋ฉด ํจ์์์ ์ ๋ณด ์ ์ถ์ ๋ฐฉ์งํ๊ณ ์ต์คํ๋ก์์์ ROP(๋ฐํ ์งํฅ ํ๋ก๊ทธ๋๋ฐ) ๊ฐ์ ฏ์ ๊ตฌ์ถํ๋ ๋ฐ ์ ํฉํ ๋ธ๋ก ์๋ฅผ ์ฝ XNUMX% ์ค์ผ ์ ์์ต๋๋ค.
- C ์ฝ๋์ ๋ํ ๊ตฌ์กฐ์ ๋ฉ๋ชจ๋ฆฌ ๋ฐฐ์น ๋ฌด์์ํ๊ฐ ๊ตฌํ๋์์ผ๋ฉฐ, ์ด๋ ์ทจ์ฝ์ ์ ์ ์ฉํ๋ ๊ฒฝ์ฐ ๊ตฌ์กฐ์์ ๋ฐ์ดํฐ ์ถ์ถ์ ๋ณต์กํ๊ฒ ๋ง๋ญ๋๋ค. ๋ฌด์์ํ๋ randomize_layout ๋ฐ no_randomize_layout ์์ฑ์ ์ฌ์ฉํ์ฌ ์ผ๊ณ ๋๋ฉฐ "-frandomize-layout-seed" ๋๋ "-frandomize-layout-seed-file" ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ ์๋๋ฅผ ์ค์ ํด์ผ ํฉ๋๋ค.
- "-fstrict-flex-arrays=" ํ๋๊ทธ๋ฅผ ์ถ๊ฐํ์ต๋๋ค. "๋ฅผ ์ฌ์ฉํ๋ฉด ๊ตฌ์กฐ(๊ตฌ์กฐ ๋์ ํฌ๊ธฐ๊ฐ ๋ฌดํํ ๋ฐฐ์ด์ธ ์ ์ฐํ ๋ฐฐ์ด ๋ฉค๋ฒ)์ ์ ์ฐํ ๋ฐฐ์ด ์์์ ๋ํ ๊ฒฝ๊ณ๋ฅผ ์ ์ดํ ์ ์์ต๋๋ค. 0(๊ธฐ๋ณธ๊ฐ)์ผ๋ก ์ค์ ํ๋ฉด ๋ฐฐ์ด์ด ์๋ ๊ตฌ์กฐ์ ๋ง์ง๋ง ์์๋ ํญ์ ์ ์ฐํ ๋ฐฐ์ด๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค. 1 - ํฌ๊ธฐ [], [0] ๋ฐ [1]๋ง ์ ์ฐํ ๋ฐฐ์ด๋ก ์ฒ๋ฆฌ๋๊ณ , 2 - ํฌ๊ธฐ๋ง ์ฒ๋ฆฌ๋ฉ๋๋ค. [] ๋ฐ [0]์ ์ ์ฐํ ๋ฐฐ์ด์ฒ๋ผ ์ฒ๋ฆฌ๋ฉ๋๋ค.
- ์ ฐ์ด๋ ์์ฑ์ ์ํด DirectX์์ ์ฌ์ฉ๋๋ C์ ์ ์ฌํ ์ธ์ด HLSL(High-Level Shader Language)์ ๋ํ ์คํ์ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค.
- ๊ณ ์ ๋ฐ ๊ฐ๋ณ ๊ธธ์ด ๋ฐฐ์ด๊ณผ ๊ด๋ จ๋ ํธํ๋์ง ์๋ ์ธ์ ์ ์ธ์ด ์๋ ํจ์ ์ฌ์ ์์ ๋ํด ๊ฒฝ๊ณ ํ๊ธฐ ์ํด "-Warray-parameter"๋ฅผ ์ถ๊ฐํ์ต๋๋ค.
- MSVC์์ ํธํ์ฑ์ด ํฅ์๋์์ต๋๋ค. MSVC์์ ์ ๊ณต๋๋ "#pragma ํจ์"(์ธ๋ผ์ธ ํ์ฅ ๋์ ํจ์ ํธ์ถ์ ์์ฑํ๋๋ก ์ปดํ์ผ๋ฌ์ ์ง์) ๋ฐ "#pragma alloc_text"(ํจ์ ์ฝ๋๊ฐ ์๋ ์น์ ์ด๋ฆ ์ ์)์ ๋ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค. MSVC ํธํ /JMC ๋ฐ /JMC ํ๋๊ทธ์ ๋ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค.
- ํฅํ C2X ๋ฐ C++23 ํ์ค์ ์ง์ํ๊ธฐ ์ํ ์์
์ด ๊ณ์ ์งํ๋๊ณ ์์ต๋๋ค. C ์ธ์ด์ ๊ฒฝ์ฐ noreturn ์์ฑ, ํค์๋ false ๋ฐ true, ์ง์ ๋ ๋นํธ ๊น์ด์ ์ ์์ ๋ํ _BitInt(N) ์ ํ, *_WIDTH ๋งคํฌ๋ก, UTF-8 ์ธ์ฝ๋ฉ ๋ฌธ์์ ๋ํ u8 ์ ๋์ฌ๊ฐ ๊ตฌํ๋ฉ๋๋ค.
C++์ ๊ฒฝ์ฐ ๋ชจ๋ ๋ณํฉ, ํจ์ ๋ฉค๋ฒ์ ABI ๊ฒฉ๋ฆฌ, ๋ชจ๋ ๋ด ๋น์ง์ญ ๋ณ์์ ์์ํ๋ ๋์ ์ด๊ธฐํ, ๋ค์ฐจ์ ์ธ๋ฑ์ค ์ฐ์ฐ์, auto(x), ๋น๋ฆฌํฐ๋ด ๋ณ์, goto ๋ฐ constexpr๋ก ์ ์ธ๋ ํจ์์ ๋ ์ด๋ธ ๋ฑ์ด ๊ตฌํ๋ฉ๋๋ค. , ๊ตฌ๋ถ๋ ์ด์ค์ผ์ดํ ์ํ์ค, ๋ช ๋ช ๋ ์ด์ค์ผ์ดํ ๋ฌธ์์ ๋๋ค.
- OpenCL ๋ฐ OpenMP ์ง์๊ณผ ๊ด๋ จ๋ ๊ธฐ๋ฅ์ด ํ์ฅ๋์์ต๋๋ค. OpenCL ํ์ฅ cl_khr_subgroup_rotate์ ๋ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค.
- x86 ์ํคํ ์ฒ์ ๊ฒฝ์ฐ ๋ฌด์กฐ๊ฑด ์์ผ๋ก ์ ํ ์์ ํ ์ถ์ธก์ ๋ฐ๋ฅธ ๋ช ๋ น์ด ์คํ์ผ๋ก ์ธํด ๋ฐ์ํ๋ ํ๋ก์ธ์์ ์ทจ์ฝ์ฑ์ ๋ํ ๋ณดํธ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋์์ต๋๋ค. ์ด๋ฌํ ๋ฌธ์ ๋ ๋ฉ๋ชจ๋ฆฌ์์ ๋ถ๊ธฐ ๋ช ๋ น ์งํ์ ๋ช ๋ น์ ์ ์ ์ ์ผ๋ก ์ฒ๋ฆฌํ๊ธฐ ๋๋ฌธ์ ๋ฐ์ํฉ๋๋ค(SLS, Straight Line Speculation). ๋ณดํธ๋ฅผ ํ์ฑํํ๋ ค๋ฉด "-mharden-sls=[none|all|return|indirect-jmp]" ์ต์ ์ด ์ ์๋ฉ๋๋ค.
- SSE2 ํ์ฅ์ ์ง์ํ๋ ํ๋ซํผ์ ๊ฒฝ์ฐ _Float16 ์ ํ์ด ์ถ๊ฐ๋์์ผ๋ฉฐ, ์ด๋ AVX512-FP16 ๋ช ๋ น์ด์ ๋ํ ์ง์์ด ๋ถ์กฑํ ๊ฒฝ์ฐ float ์ ํ์ ์ฌ์ฉํ์ฌ ์๋ฎฌ๋ ์ด์ ๋ฉ๋๋ค.
- AMD Zen2 ํ๋ก์ธ์๋ถํฐ ์ง์๋๋ RDPRU ๋ช ๋ น ์ฌ์ฉ์ ์ ์ดํ๊ธฐ ์ํด "-m[no-]rdpru" ํ๋๊ทธ๋ฅผ ์ถ๊ฐํ์ต๋๋ค.
- RETBLEED ์ทจ์ฝ์ ์ผ๋ก๋ถํฐ ๋ณดํธํ๊ธฐ ์ํด "-mfunction-return=thunk-extern" ํ๋๊ทธ๋ฅผ ์ถ๊ฐํ์ต๋๋ค. ์ด ํ๋๊ทธ๋ ๊ฐ์ ๋ถ๊ธฐ์ ๋ํ ์ถ์ธก ์คํ ๋ฉ์ปค๋์ฆ์ ๊ฐ์ ์ ์ ์ธํ๋ ์ผ๋ จ์ ๋ช ๋ น์ ์ถ๊ฐํ์ฌ ์๋ํฉ๋๋ค.
LLVM 15.0์ ์ฃผ์ ํ์ ์ฌํญ:
- Cortex-M85 CPU, Armv9-A, Armv9.1-A ๋ฐ Armv9.2-A ์ํคํ ์ฒ, Armv8.1-M PACBTI-M ํ์ฅ์ ๋ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค.
- DirectX ์ ฐ์ด๋์ ์ฌ์ฉ๋๋ DXIL(DirectX Intermediate Language) ํ์์ ์ง์ํ๋ DirectX์ฉ ์คํ์ ๋ฐฑ์๋๊ฐ ์ถ๊ฐ๋์์ต๋๋ค. ๋ฐฑ์๋๋ ์ด์ ๋ธ๋ฆฌ ์ค์ "-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=DirectX" ๋งค๊ฐ๋ณ์๋ฅผ ์ง์ ํ์ฌ ํ์ฑํ๋ฉ๋๋ค.
- Libc++๋ "ํ์" ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ตฌํ ์๋ฃ์ "๋ฒ์" ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ ์๋ ์คํ ๋ฒ์ ์ ํฌํจํ์ฌ C++20 ๋ฐ C++2b ํ์ค์ ์๋ก์ด ๊ธฐ๋ฅ์ ๊ณ์ ๊ตฌํํฉ๋๋ค.
- x86, PowerPC ๋ฐ RISC-V ์ํคํ ์ฒ๋ฅผ ์ํ ํฅ์๋ ๋ฐฑ์๋.
- LLD ๋ง์ปค ๋ฐ LLDB ๋๋ฒ๊ฑฐ์ ๊ธฐ๋ฅ์ด ํฅ์๋์์ต๋๋ค.
์ถ์ฒ : opennet.ru