LLVM 15.0에는 C/C++에 대한 여러 흥미로운 업데이트도 포함되어 있습니다.
XNUMX 개월의 개발 끝에 LLVM 15.0 프로젝트 릴리스 발표,에서 많은 주요 변경 사항이 적용되었으며, 새로운 프로세서, 아키텍처 등에 대한 지원이 추가되었습니다.
LLVM에 익숙하지 않은 사람들을 위해 다음을 알아야 합니다. GCC 호환 컴파일러입니다 (컴파일러, 옵티마이저 및 코드 생성기) 프로그램을 RISC와 유사한 가상 명령어 중간 비트코드(다단계 최적화 시스템이 있는 저수준 가상 머신)로 컴파일합니다.
생성된 의사 코드는 프로그램 실행과 동시에 JIT 컴파일러에 의해 기계 명령어로 변환될 수 있습니다.
LLVM 15.0의 새로운 주요 기능
제시된 이 새로운 버전에서는 다음이 강조됩니다. Cortex-M85 프로세서 지원, 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 표준.
Clang 15.0과 관련된 변경 사항 중 일부는 다음과 같이 언급됩니다. C와 같은 언어 HLSL에 대한 실험 지원 추가 DirectX 9로 시작하는 셰이더를 작성하고 HLSL 셰이더를 DirectX 12 호환 DXIL(DirectX Intermediate Language) 바이너리 형식 및 Vulkan에서 사용하는 SPIR 형식 -V로 변환하는 데 사용되는 (고수준 셰이딩 언어). 미래에, DXBC 형식에 대한 지원을 구현할 계획 (DirectX 바이트코드) DirectX 9-11에서 사용됩니다. 구현은 Microsoft에서 제공하며 LLVM 2017을 기반으로 구축된 3.7년에 릴리스된 DirectX 셰이더 컴파일러를 기반으로 합니다.
로 계속되고 있다고도 언급되어 있다. 미래의 C2X 및 C++23 표준을 지원하기 위해 노력합니다. C 언어에 대해 구현됨: noreturn 속성, false 및 true 키워드, 주어진 비트 깊이의 정수에 대한 _BitInt(N) 유형, *_WIDTH 매크로, UTF-8 문자에 대한 u8 접두사.
그 외에도 C++용으로 구현되었습니다: 모듈 병합, 함수 멤버의 ABI 격리, 모듈에서 비-로컬 변수의 동적 초기화 순서 지정, 다차원 인덱스 연산자, auto(x), 리터럴이 아닌 변수, constexpr로 선언된 함수의 goto 및 레이블, 구분된 이스케이프 시퀀스, 명명된 이스케이프 문자.
아키텍처 기반 시스템의 경우 x86, "-fzero-call-used-regs" 플래그 추가, 함수에서 제어를 반환하기 전에 함수에 사용된 모든 CPU 레지스터의 XNUMX을 제공합니다. 이 옵션 데이터 유출로부터 보호 기능을 줄이고 익스플로잇에서 ROP(Return Oriented Programming) 장치를 생성하는 데 적합한 블록 수를 약 20% 줄입니다.
메모리 위치 무작위화가 구현되었습니다. 취약점 악용의 경우 구조에서 데이터 추출을 복잡하게 만드는 C 코드의 구조. 무작위화는 randomize_layout 및 no_randomize_layout 속성으로 켜고 끌 수 있으며 반복 가능한 빌드를 보장하기 위해 "-frandomize-layout-seed" 또는 "-frandomize-layout-seed-file" 플래그로 시드를 설정해야 합니다.
다른 변경 사항 중 눈에 띄는 :
- OpenCL 및 OpenMP 지원과 관련된 확장된 기능. OpenCL 확장 cl_khr_subgroup_rotate에 대한 지원이 추가되었습니다.
- x86, PowerPC 및 RISC-V 아키텍처용 개선된 백엔드.
LLD 링커 및 LLDB 디버거 기능이 향상되었습니다. - "-fstrict-flex-arrays=" 플래그 추가됨 » 구조에서 소프트 어레이 요소의 한계를 제어할 수 있는 기능(Soft Array Members, 구조 끝에 있는 무한 크기의 어레이).
- 고정 및 가변 길이 배열과 관련된 일치하지 않는 인수 선언이 있는 재정의 함수에 대해 경고하는 "-warray-parameter" 옵션을 추가했습니다.
- MSVC와의 호환성이 향상되었습니다.
- MSVC에서 제공되는 "#pragma 함수 및 "#pragma alloc_text"에 대한 지원이 추가되었습니다.
- MSVC 호환 /JMC 및 /JMC 플래그에 대한 지원이 추가되었습니다.
- AMD Zen2 프로세서에서 지원되는 RDPRU 명령어의 사용을 제어하기 위해 "-m[no-]rdpru" 플래그를 추가했습니다.
- 간접 점프에 대한 추측 실행 메커니즘의 참여를 배제하는 명령어 시퀀스를 추가하여 작동하는 RETBLEED 취약점으로부터 보호하기 위해 "-mfunction-return=thunk-extern" 플래그가 추가되었습니다.
최종적으로 그것에 대해 더 많이 알고 싶다면 당신은에서 세부 사항을 확인할 수 있습니다 다음 링크.