언어: English | 简体中文 | 繁體中文 | 日本語 | 한국어 | Français | Deutsch | Español | Italiano | Русский | العربية
NeverD 테스트는 표현 모양이 예상과 같은지, 바이너리 fixture의 전체 pipeline 경로가 동작하는지, 생성 코드가 동작을 보존하는지라는 세 가지 질문에 답합니다. 변경의 질문에 답하는 가장 작은 스위트를 고른 뒤 위험이 큰 풀 리퀘스트에서는 더 넓은 집계를 실행하세요.
BUILD_TESTING을 활성화하지 않으면 테스트가 비활성화됩니다. 전체 스위트에는 보통
Release를 사용합니다. Debug는 assertion과 단계 실행을 보존하지만 의도적으로
최적화하지 않으므로 디코드 벤치마크를 대표하지 않습니다.
cmake -S . -B build-release -G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_TESTING=ON
cmake --build build-release --parallel 4전체 fixture 세트에는 교차 대상 컴파일용 clang과 PATH에 있는 LLVM
linker(ld.lld, lld-link)가 필요합니다. CMake는 많은 재배치 가능 fixture를
항상 만들고 해당 linker가 있으면 링크된 ELF/PE fixture도 만듭니다. host가 fixture를
컴파일하거나 링크할 수 없어 건너뛴 테스트는 실행되지 않은 coverage이지 해당 대상의
통과가 아닙니다.
복제, 빌드 프로필, macOS 사전 빌드 LLVM은 CONTRIBUTING.md를 참고하세요.
cmake --build build-release --target NeverDInterpreterSpecializationTests \
NeverDDevirtualizationSourceTests --parallel 4
ctest --test-dir build-release -L '^NeverD(InterpreterSpecialization|DevirtualizationSource)Tests$' \
--output-on-failurecmake --build build-release --target NeverDLowIRUndefinedIndependenceTests \
NeverDOriginalBinaryUndefinedIndependenceTests \
NeverDX86UndefinedEffectsTests NeverDX86CarryArithmeticFlagTests \
NeverDX86LogicIdentityTests NeverDX86NoIndexAddressTests --parallel 4
build-release/bin/NeverDLowIRUndefinedIndependenceTests
build-release/bin/NeverDOriginalBinaryUndefinedIndependenceTests \
--gtest_filter='OriginalBinaryUndefinedIndependence.*'
build-release/bin/NeverDX86UndefinedEffectsTests
build-release/bin/NeverDX86CarryArithmeticFlagTests
build-release/bin/NeverDX86LogicIdentityTests
build-release/bin/NeverDX86NoIndexAddressTests복구 API 테스트는 v1/v2/v3 기본값, 명시적 예산, 잘린 구조체, 모든 reserved 필드 및 미래 꼬리 호환성을 검사합니다. CLI 테스트는 두 ABI와 두 백엔드에서 필드/질의 예산 소진 및 복구 성공을 확인하고 잘못된 십진 한도와 --devirtualize 누락을 거부합니다. 예산 소진 시 소스나 부분 잔여 그래프를 게시하면 안 됩니다.
v4 테스트는 접두 구조의 크기와 패딩, 잘린 구조와 알 수 없는 플래그의 거부, 이전 API/미래 확장 호환성과 보고서 없이도 C에 남는 부호 있는 범위를 검사합니다. 독립 CLI 예제는 상관관계 보존에 연결을, 부호 없는 스택 비교 증명에 범위를 요구하며 두 C 백엔드를 O0/O2 및 미정의 동작 트랩으로 실행합니다. 탐색 비활성화는 탐색 의존 예제의 결과를 바꿔야 합니다. 파싱은 0 연결, 정수 극값, 오버플로, 잘못된 범위와 전제 누락을 검사하고 Python은 레이아웃, 플래그, 시그니처 및 소유권이 있는 실패 보고서를 검사합니다.
NeverDByteMemoryForwardingTests는 겹치는 마지막 쓰기, 양쪽 바이트 순서, i128까지의 바이트 배수 폭, 정의된 값, 상관관계를 보존하는 undef/poison 스냅샷과 부분 덮어쓰기를 검증합니다. 알 수 없는 별칭, 주소 공간 변환, 호출, 순서 접근, 수명 변경, 누락 바이트, 동적 또는 잘못된 오프셋, 분기와 루프에서는 로드를 보존합니다. 입력이 많은 PHI, 0·정확·소진 예산, 기본 스냅샷 거부도 검사합니다. 원래 LLVM과 변환된 LLVM을 O0/O2에서 독립 산술 기준과 비교하며 기존 MBA, LLVMC, 인터프리터 소스 테스트로 호환성을 검증합니다.
추가 회귀는 두 메모리 방식과 양쪽 바이트 순서에서 순수 비트 연산 intrinsic을 유지하고 일반 호출, operand bundle, convergent, 수명 변경, 메모리 효과와 트랩의 경계를 확인합니다. 원본과 변환 코드를 O0/O2 및 미정의 동작 트랩으로 실행하여 반환값의 수치 주소와 버퍼의 모든 바이트를 독립 기준과 비교합니다.
바이트 생존성 회귀는 겹치지 않는 읽기, 일부가 관찰된 쓰기와 여러 후속 쓰기의 결합을 검사합니다. 조건부 주소는 AND/OR/XOR, 32/64비트, 두 바이트 순서, 잘못된 루트, 불완전한 마스크, 우회 합류와 모든 주소 예산 경계를 검사합니다. O0/O2 독립 oracle은 두 분기 결과, 16가지 주소 나머지와 출력 버퍼의 모든 바이트를 확인합니다.
주소 관계 회귀 검사는 정수·포인터 PHI/select, 두 바이트 순서와 포인터 폭, 일정하거나 변하는 역방향 간선, 미정의/freeze 간선, 진입 기준 없는 순환, 인접한 주소·출력 예산, 주소만 변경된 경우의 분석 무효화를 포함합니다. O0/O2 루프는 반복별 독립 기준과 반환값 및 버퍼 전체를 비교하며 상수로 취급하면 안 되는 이동 주소도 검증합니다.
수치 주소 테스트는 단일 쓰기의 전체·부분 전달, 스냅샷 없는 undef/poison, 양쪽 바이트 순서, 32/64비트 표현, 모듈러 음수 오프셋, 부분 겹침, 다른 루트 및 alloca의 별칭, 예외 호출, 루프, 인접 예산 경계와 쓰기만 삭제할 때의 분석 무효화를 검사합니다. O0/O2에서 원본·변환 IR의 반환값과 별칭 버퍼의 모든 바이트를 독립 기준과 비교합니다.
NeverDMedMutableSourceTests와 NeverDLLVMCValueTests는 독립적으로 작성한 루프, 블록 재배열, 진입 역방향 간선, 런타임 스택 연산, 앞선 읽기, 분기 합류, 부분 별칭, 불리언 참값 및 0을 포함한 비트 개수를 O0/O2로 실행합니다. 부정 사례는 잘못된 입력, 잘린 대상, 모호한 전달 위치와 예산 소진을 출력 전에 거부합니다. SSA 한도를 넘는 CLI 사례는 실행 가능한 LLVMC 출력과 명시적인 HighC 거부를 요구합니다. 반복 갱신과 여러 블록에 걸친 저장 표현식 체인도 생성된 C의 크기와 실행 결과를 검증합니다.
추가 회귀 검사는 LLVM 승격 전의 비공개 읽기·쓰기 수와 C 출력 크기를 제한합니다. 긴 혼합 연산 체인, 재정렬된 SSA 블록, 겹치는 대상 메모리 쓰기와 0 반환값을 O0/O2로 실행하고 핵심 사례는 실제 LLVM 최적화 파이프라인도 거칩니다. 모듈 생성 거부 후 이미터 재사용도 검사합니다.
복합 조건 회귀 테스트는 O0/O2에서 0이 아닌 상수와의 동등 비교, 부호 없는 비교, 양쪽 피연산자 순서의 부호 있는 비교, 확장된 불리언 입력과 모든 부정 조합의 논리곱·논리합을 실행합니다. C 출력은 전체 진리표를 보존하고 없는 0 비교 피연산자를 역참조하지 않아야 합니다. 정수 주소 저장은 정렬 및 비정렬 32/64/128비트 값을 검사합니다. 바이트 저장 배열은 명시적 정렬과 시작·부분 접근을 정확히 보존하며 배열에 대한 스칼라 대입이나 호환되지 않는 타입의 별칭 접근을 생성하지 않습니다.
NeverDLowIRRefinementTests는 실제 복원 그래프, 구조가 다른 유한 루프, 0회 반복, 동적 생성자, 조건부 선택, 겹치는 입력 뷰, 복사 및 스필 상관관계, 양쪽 불변 읽기 증거, 시스템 플래그와 반환 슬롯 보존을 검사합니다. 잘못된 후보, 추가 쓰기, 불완전하거나 무한한 경로, 오래된 증거, 임시 영역 충돌과 공유 예산 소진은 인증서를 거부해야 합니다. 기존 독립성 테스트도 관찰 가능한 임의 값을 계속 거부합니다.
같은 대상의 LowIRLoopRefinement.*와 BinaryLowIRLoopRefinement.*는 임의 64비트 반복 횟수, 중첩 사전식 순위, 실제 네이티브 잔여 코드, 진입 접두 템플릿, 겹치는 뷰와 상관된 스필을 검사합니다. 부정 사례는 잘못된 본문, 진입 영역 축소, 감소하지 않는 순위, 부호 없는 순환, 이전 쓰기 누락, 절단점 누락, 잘못된 템플릿과 공유 예산 소진을 거부합니다. 유한한 형제 경로의 성공은 불완전한 귀납 증명을 승인하지 않습니다.
LowIRLoopInference.*와 BinaryLowIRLoopInference.*는 독립적으로 작성한 카운터, 스택 저장, 조기 반환, 네이티브 호출 및 패킹된 플래그를 사용합니다. 좁은 비트 폭의 산술 확장과 표현식이 달라도 의미가 같은 플래그를 검사합니다. 잘못된 그래프, 누락되거나 위조된 원본, 종료하지 않거나 래핑하는 루프, 추론 또는 증명 예산 소진에서는 인증서를 생성하면 안 됩니다.
0 접두부 회귀는 연결 그룹, 특수 비트 폭과 모든 바이트 쌍을 검사하고 알 수 없는 비트와 0이 아닌 비트를 보존합니다. 독립적으로 작성한 프레임 루프는 양쪽 바이트 순서의 하위 값/상위 0 분리 저장, 좁은 폭, 잘못된 산술과 패딩, 정확한 예산과 부족한 추론 예산, 별도의 전체 증명 질의 예산을 검사합니다.
공유 헤더와 공유 래치 회귀 검사는 0 확장된 32비트 및 전체 64비트 카운터, 비단위 증감 스칼라 순위, 잘못된 결과, 진행하지 않거나 래핑되는 경로, 스칼라 및 튜플 탐색 사이에 누적되는 정확한 예산과 예산 소진을 다룹니다. LowIRLoopInference.SharedHeaderAndLatchNeedLexicographicRanks. 추가 증가·초기화 회귀 검사는 반복마다 카운터 비트 하나씩 펼치지 않고 수렴하도록 요구하며, 진행 누락과 부호 없는 래핑을 거부합니다. 스케줄링 회귀는 비단위 증감 누산기, 유효한 비단위 스칼라 순위 옆에서 래핑될 수 있는 단위 카운터, 성공 튜플이 초기 구간 뒤에 나오는 세 카운터를 다룹니다. 정확히 충분한 순위 예산과 한 번 부족한 예산으로 후보 중복 없는 결정적 탐색 재개를 확인합니다.
같은 대상의 LowIRLoopPlanPairing.*는 레지스터 이름 변경, 서로 다른 산술 본문, 각 측의 접두 스냅샷, 술어 보존, 공유 프레임 입력, 중첩 절단점 포괄 및 독립적인 증명 예산을 검사합니다. 관계 누락, 잘못된 쓰기, 잘못된 임시 값 바인딩, 불완전한 대응 또는 메타데이터 한도 초과 시 인증서를 생성해서는 안 됩니다.
LowIRLoopAlignment.*는 독립적으로 작성한 일반 및 회전형 프레임 카운터 루프를 검사합니다. 두 기본 자기 관계 계획은 각각 증명되지만 첫 짝짓기는 실패하고 다른 후보 절단점에서 관계가 증명됩니다. 여러 절단점의 순열, 잘못된 결과와 프레임 쓰기, 누락되거나 오래된 원본 기록, 명시적 미정의 값 witness, 감소하지 않거나 래핑되는 카운터, 잘못된 그래프, 실패 시도의 누적 쿼리, 정확히 충분한 총예산과 탐색 한도 소진을 회귀 검사합니다. 거부 결과에는 인증서가 없어야 합니다. 추가 사례는 분리된 초기화·진행 단계, 종료 조건을 옮겨 후보군 간 짝짓기가 필요한 동등한 루프, 재추론 없는 캐시, 메타데이터 합계 초과를 검증합니다. 뒤따르는 독립 루프는 명시적인 16384회 질의 한도로 전체 순환 포괄을 확인합니다. 비거나 중복된 후보군은 기호 질의를 쓰지 않고 절단점 부족은 거부합니다. 정확히 충분하거나 한 번 부족한 전체 예산, 잘못된 결과, 진행 누락, 원본 증거와 미정의 값 witness도 검사합니다. 필터 회귀는 결과를 유지하는 산술 다이아몬드, 로컬 합류와 경계에서만의 합류, 도달 가능한 합류점을 우회해 종료하거나 순환 경계로 돌아가는 경로를 검사합니다. 원본 필터 후보군이 중복이어도 후보 필터를 시도하는지, 먼저 성공한 필터 계획을 뒤늦은 전체 분기 시도가 재사용하는지, 정확히 충분한 값·한 단위 부족·0의 MaxCutSelectionWork, 실패한 CutSelectionWork 누적, 전역 그래프 작업 소진 후 기호 추론 중단을 검증합니다. 두 분기 후보군 모두 완전한 순환 포괄을 검사하며 다이아몬드 관계에는 명시적인 추론·증명 질의 한도를 사용합니다.
부분 카운터 회귀는 프레임과 레지스터, 증가·감소, 하위·중간·상위 위치, 특수 너비, 두 바이트 순서와 3바이트 프레임 워드를 다룹니다. 늦게 발견되는 레인, 보존 비트 변조, 진행 없음과 보호 없는 래핑, 잘못된 추가 진입, 정확하거나 부족한 추론 예산, 기존 단일 절단점 탐색을 검사합니다.
선행 단계 회귀는 같은 카운트다운 워드를 재사용하는 두 개와 세 개의 순차 루프, 기존 중첩 루프 단계와의 결합, 정확히 충분하거나 한 번 부족한 순위·질의 예산, 진행하지 않는 루프와 이전 단계로 되돌아가는 초기화를 검사합니다. 같은 너비의 잘못된 단계 상수, 잘못된 결과와 프레임 쓰기는 완전한 검사기가 인증서 없이 거부해야 하며 원본 증거 누락은 계속 미지원입니다.
NeverDLowIRRefinementTests의 InterpreterMachineStateModel.*는 독립적인 LowIR 예제로 원시 진입 플래그, 상태와 게스트 RAX의 구분, 17개 상태 워드 전체, 부분 레지스터, 플래그 패킹, 동적 거부 상태의 유지, 게스트 프레임 쓰기, 양쪽 분기와 순환 추론 후의 새 증명을 검사합니다. 잘못된 출력, 누락된 상태, 메모리 변경, 오래된 명령 기록, 잘못된 입력, 생성 예산 소진은 실패해야 합니다. 기존 머신 소스 테스트는 두 C 경로를 O0/O2에서 실행하며 모델 테스트만으로 컴파일된 C를 인증하지 않습니다.
NeverDLLVMInterpreterModelTests는 독립 LLVM을 전체 상태 LowIR 기준과 비교하여 비트 폭, 병렬 PHI, switch, 게스트 메모리, 별도 상태, poison 조건, 내장 함수 범위, 거부 계약과 네 가지 구성 예산을 검사합니다. 임의 워드 카운트다운의 완전한 증명을 검사하고 변조된 상태를 거부합니다. 독립 C의 O1/O2 컴파일 결과도 같은 관찰 계약을 만족해야 합니다. 지원 모델을 검증하는 테스트이며 자동 불변식 발견과 컴파일러 정확성은 별도 의무입니다. 가변 시프트 사례는 네 가지 비트 폭, 마스크나 분기로 제한한 시프트 양, 경계값과 범위 초과 값, 오버플로 금지 및 정확성 플래그, 엄격한 poison 거부, O1/O2로 컴파일한 C를 검증합니다.
NeverDLLVMScalarEquivalenceTests는 전체 루프 입력 영역, 0회 반복, PHI 동시 교환, switch, 상위 입력 비트, 마지막 분할의 반례, poison을 만드는 추가 갱신, 반환 범위, 미지원 계약 및 정확한·한 단위 부족·0 예산을 검사합니다. 독립적인 두 배 폭·오버플로 기준 구현이 지원하는 각 폭의 funnel 끝점과 제약된 곱셈을 검사하며 독립 중첩 루프 C의 O1/O2 출력이 컴파일러 입력 형태를 확인합니다. 상태 모델 테스트도 끝점을 검사합니다. SymExpr.ConstantWindowSharesActualWorkWithoutRelaxingQueryCeilings는 누적 계산과 기존 개별 한도를 검사합니다.
LLVMScalarDecision.*는 깊은 exact 시프트·확장 조건, 상수 분기, 두 루프 역방향 간선, 보존된 상위 데이터 비트, 마지막 미정의 연산, 비종료, 검사한 함수의 수정, 정확한 예산·한 단위 부족·지역 한도를 검사합니다. LLVMScalarDecisionCompiled.DeepOneAndTwoBackedgeOracles는 독립적으로 작성한 역방향 간선 하나와 두 개의 점화식을 부호 없는 C 오라클과 O0/O2에서 총 32,768회 비교합니다. 이는 스칼라 모델 검사이며 네이티브 ABI나 전체 바이너리 복원 범위를 뜻하지 않습니다.
LLVMScalarDemand.*는 고정 작업 예산으로 서로 다른 비선형 루프 본문을 증명하고 16개 제어 분할과 자유로운 상위 입력 비트를 유지합니다. 마지막 분할의 출력·정의성 오류, 정확하거나 부족한 작업 예산과 노드 한도를 검사합니다. LLVMScalarDemandCompiled.*는 O0/O2에서 독립 부호 없는 산술 오라클과 262,144회 호출을 비교합니다. 원본 연산이나 입력 영역을 줄이지 않고 질의 일정을 검증합니다.
SymKnownBitsTests는 모든 바이트 입력 쌍과 임의 정밀도 경계값으로 확장 항등 관계, 래핑 없는 합, 다른 입력 출처, 전역적으로 정의된 시프트 의미를 확인합니다. 정확한/한 단위 부족 예산, 캐시 적중 비용, 저장 한도, 별도 컨텍스트, 깊이, 피연산자 수, 지원하지 않는 폭도 검사합니다. SymExprExtensionTests는 상수 상위 비트와 전체 시프트 횟수를 확인합니다. 스칼라 동등성 회귀는 데이터의 기호 상태를 유지하며 범위 제약을 증명하고, 마지막 분할 차이와 실행된 poison을 거부하며, 전체 증명의 예산 경계를 검사합니다. SymMBAExtensionTests는 샘플 검증을 끄고 유도 근거를 요구하며, 모든 바이트 입력 쌍으로 부호, 좁은 캐리, 비트 반전 및 작업 예산 소진 경계를 확인합니다.
NeverDLLVMScalarLoopRecoveryTests는 접두 계산과 이전 블록 상태 복원, 0회 반복 분기, 자체 역방향 간선의 머리 조건, 아핀 상태, 래핑 시 동등 비교, 추가 갱신의 poison, 상위 데이터 비트 차이와 미지원 입력 계약을 검사합니다. 정확한 누적 예산과 한 단위 부족한 예산으로 원자적 거부를 확인합니다. 독립 산술 오라클은 모든 바이트 제어 입력에 대해 원본과 복원 LLVM을 O0/O2에서 실행합니다. 네이티브 ABI 복원이나 기본 C 출력의 증거는 아닙니다.
루프 술어 회귀는 8/16/32/64비트 PHI, 비교 순서와 분기 극성, 부호 유무 확장, 다른 외부 초기값, 충돌하는 진입 관측, 다중 역방향 간선, 기호 데이터 반례, 절단 거부, 원본 poison·비종료, 구성·증명·후보·변환 한도의 원자적 거부를 검사합니다. 독립 부호 없는 오라클이 미정의 동작 트랩을 켠 O0/O2에서 원본과 복구된 LLVM을 458,752회 비교합니다. 원본 함수와 부모 모듈은 유지됩니다.
종료 경계 회귀는 8/16/32/64비트 모듈러 가드, 감소 간격, 양 극성, 0회 실행, 공유 출구, 0 데이터에서만 일치하는 잘못된 경계, 도달 불가 경계, 초과 슬라이스, poison, 같은 폭 말단 부재와 원자적 예산 거부를 검사합니다. 유효 초기값 앞의 미사용 인수 40개가 후보를 밀어내지 않아야 합니다. 독립 부호 없는 오라클이 미정의 동작 트랩을 켠 O0/O2에서 원본과 복구된 LLVM을 458,752회 실행합니다.
같은 대상은 recoverLLVMScalarSource도 검사합니다. 탐색 전 준비, 루프 변경 없는 정리, 사용하지 않는 전체 비트 폭 상태, 죽은 코드의 오버플로·exact 시프트·나눗셈·assume 의무, 지원하지 않는 부작용, 정확한 누적 예산과 한 단위 부족한 예산, 제한된 후속 처리를 다룹니다. 독립 산술 오라클이 모든 바이트 제어값과 결정적 전체 비트 폭 상태에 대해 원본 및 준비된 LLVM을 O0/O2로 실행합니다. 성공과 거부 모두 원본 함수와 상위 모듈을 보존해야 합니다.
준비 가드 테스트는 주석이 있는 모듈러 항등식, 서로 다른 선행 블록의 동등 표현식, 다른 분기 값 유지, 원본 오버플로·exact 시프트·절단·확장 거부와 정확하거나 부족한 누적 예산을 검사합니다. 독립 부호 없는 오라클이 미정의 동작 트랩을 켠 O0/O2에서 원본과 준비된 본문을 131,072회 비교합니다. 독립 술어의 거부 규칙은 기존 의미론 패스 테스트로도 확인합니다.
마스크 회귀는 교환된 피연산자, 0 필드, 입력 상위 비트 보존, 전체 데이터 증명 실패 후 대안, 모든 역방향 간선, 래핑/오버플로 거부, 32개를 넘는 배치와 정확한/하나 부족한 예산의 원자적 거부를 다룹니다. 독립 LLVM 및 생성 C 산술 오라클을 O0/O2로 실행하여 비트 폭 복원과의 조합을 검사합니다. 자기 동등성 회귀는 전체 제어 영역, poison/undef 및 미지원 계약 거부, 비종료, 지역 상한과 정확한 작업량 계산을 유지하며 같은 함수를 수정하면 이전 결과를 재사용하지 않습니다. 이 검사는 스칼라 LLVM 범위이며 네이티브 ABI 인증은 아닙니다.
공유 마스크 포함 관계 테스트는 모든 바이트 입력 쌍, 비연속 마스크, 최대 128비트 폭, 미지/상위 비트 보존과 항 수·폭 상한 밖의 노드 증가 제한을 검사합니다. 역방향 간선 두 개를 가진 기호 루프의 마스크 XOR 점화식은 독립 폐쇄형 식과 증명되어야 합니다. 제어 의존성 테스트는 정규화된 시프트 양의 저장 폭을 계산하면서 정확한/하나 부족한 예산 및 넓은 값의 보수적 처리를 유지합니다.
폭 회귀는 0이 아닌 리터럴, 유지된 시그니처, 더 넓은 입력과 intrinsic, 관찰 가능한 상위 비트, 부호 있는 순서, 새 오버플로 및 정확/부족 예산을 검사합니다. 같은 스칼라 후보를 x86-64, AArch64, 빅 엔디언 AArch64, ARM32 target triple에서 검사하며 LLVM 수준 범위이지 네이티브 ABI 인증이 아닙니다. 독립 산술 오라클은 원본/복원 LLVM과 생성 C를 O0/O2에서 실행하며 C 미정의 동작 트랩을 사용합니다.
시드 회귀는 모든 외부 진입의 일치, 여러 역방향 간선, 숨은 상위 데이터, poison, 동시 교환, 배치 분할, 32개 초과 상태 변수 및 원자적 예산을 다룹니다. 스칼라 증명은 완료된 미확정 질의와 전역 작업 소진을 구분하고 데이터 비트 열거 없이 안전한 시프트를 증명합니다. 기호 테스트는 바이트 값, 마스크와 카운트를 전수 검사하며 관측 가능한 상위 비트, 입력 식별과 큰 카운트 의미를 보존합니다. 비트 너비가 다른 시프트 표현은 전체 수치 카운트를 공유해야 합니다. 이 검사는 네이티브 ABI 복원을 인증하지 않습니다.
추가 루프 회귀는 좁은 마지막 인덱스의 순환, 분리된 body/latch, 가드의 두 극성, 등식 피연산자 교환, 단위 간격 변수의 순서 변경과 감소, 0회 경로의 상위 데이터 차이, 새로 실행되는 poison 및 잘못된 경계를 검사합니다. 정확한 예산과 한 단위 부족한 구성·증명 예산, 후보 소진에서도 전체 거부를 유지합니다. 원래 LLVM과 생성 C를 O0/O2에서 독립적인 산술 oracle과 비교합니다.
NeverDLLVMCScalarLoopRecoveryTests는 기본 전체 모듈·단일 함수 출력, 반환 경로 정리 후 추가 복원, 함수 정체성과 속성, 호출 연결, 기존·신규 내장 함수와 기호 충돌, 공유 예산, 부작용 호출, 입력 정의성 누락, 메타데이터, 이미지 투영, 외부 블록 주소와 외부 모듈 함수 선택을 검사합니다. 독립 산술·회전 오라클로 생성 C를 O0/O2 및 미정의 동작 트랩과 함께 실행합니다. 산술은 모든 바이트 제어값, 경계값과 결정적 전체 비트폭 데이터에서 독립 컴파일한 원본 LLVM과도 비교합니다.
SymSimplifyPredicates.*는 독립 단계와 전체 pass의 정책, 보고된 작업량, 정확한 예산과 한 단위 부족한 예산, 비활성 단계 및 난독화 표시 함수도 비교합니다. 스칼라 소스 회귀 검사는 8/32/64비트 산술 인코딩 루프 종료 조건, 부호 있는 오버플로 거부, 반복과 함수 간에 공유되는 구성 제한을 다룹니다. 결과 반영이 실패하면 원래 IR을 유지합니다. 생성된 C는 O0/O2에서 독립적으로 컴파일한 원래 LLVM 및 산술 oracle과 비교 실행합니다.
SymKnownBits.*는 모든 바이트 쌍 산술로 무손실 마스크와 부호 있는 시프트 왕복을 검사하며 음수, 다른 원본, 버려지는 미지 비트, 인수나 횟수 불일치, 넓은 과도한 시프트를 포함합니다. 128비트까지 정확한 쿼리 예산과 한 단위 부족한 예산 및 DAG 노드 비증가를 검사합니다. 스칼라 결정 테스트는 별도 역방향 간선의 양수·음수 갱신, 변경 후 오래된 사실과 오버플로 거부, 심볼릭 상위 데이터 비트, 독립적인 부호 없는 oracle과 비교하는 O0/O2 호출 16,384회를 추가합니다.
SymKnownBits.*는 모든 바이트 쌍으로 배수 순서와 서로 다른 폭의 곱도 검사하며 래핑, 잘못된 계수나 인수 중복 횟수, 좁은 오버플로를 넓은 워드로 옮기는 변환을 거부합니다. 128비트까지 정확한 예산과 한 단위 부족한 예산을 유지하고 DAG 노드를 늘리지 않습니다. 스칼라 테스트는 데이터 비트를 열거하지 않고 반복 덧셈과 곱셈을 증명하며 모든 루프 오버플로 의무를 유지하고 독립 oracle과 비교하는 O0/O2 호출 16,384회를 실행합니다.
LLVMScalarAssume*는 전체 루프 영역, 마지막 분할 실패, 도달 불가능한 거짓 조건과 실제 도달한 거짓 조건, 모든 바이트 입력에서 누적되는 정의성, 정확한 예산과 한 단위 부족한 예산, IR 변경 및 지원하지 않는 호출 계약을 검사합니다. 네 가지 대상 triple로 공유 모델을 확인하고, 8,192회의 O0/O2 호출을 독립적인 부호 없는 oracle과 비교합니다. 상태 모델 테스트도 동일한 의무와 피연산자 번들 거부를 별도로 확인합니다.
LLVMScalarProjection.*는 중첩 필드, 비트 구간, 미사용 인수 보존, 여러 반환, 역방향 간선, 미선택 연산의 overflow/shift/assume 의무, 마지막 분할 실패, 비종료, 알 수 없는 계약, 입력 변경 및 정확/하나 부족 예산을 검사합니다. 네 대상 트리플에서 공유 의미를 확인합니다. LLVMScalarProjectionCompiled.*는 LLVM 배열 브리지를 통한 원본 집계와 투영 결과를 O0/O2에서 독립적인 부호 없는 산술과 비교합니다. SymExpr.RightShift*는 바이트 쌍을 전수 검사하고 부호 확장, 올림, 보존 상위 비트, 전체 카운트 및 탐색 한도를 확인합니다.
LLVMScalarInputs.*는 혼합 폭의 순서 있는 매핑, 인수가 없거나 이름 없는 인터페이스, 죽은 산술과 assume의 입력 요구, 변경된 출력, 알 수 없는 계약, 패키징 거부, 정확하거나 부족한 누적 예산을 검사합니다. 증명 테스트는 생략 입력을 고정하지 않고 전체 원래 시그니처를 복원합니다. LLVMScalarInputsCompiled.*는 생략된 모든 인수를 바꾸면서 원래 루프와 축소된 루프를 독립 부호 없는 오라클과 O0/O2에서 비교합니다.
NeverDLLVMScalarStateProjectionTests는 중첩·비정렬 창, 8/16/32/64비트 셀, 루프, 진입 마스크, 소스 변경, 상태 범위, poison 유지, 외부 메모리 거부와 정확/부족 예산을 검사합니다. 원본 메모리 함수와 LLVM 집계 브리지를 O0/O2에서 독립 바이트/산술 oracle과 172,032회 비교하며 스칼라 증명은 별도로 확인합니다. SymKnownBits.*는 모든 바이트 쌍과 128비트, 다른 인자, 확대 마스크, 순환 합, 예산 경계를 검사합니다. LLVMCIntrinsicSemantics.AssumeEvaluatesItsConditionAndRefusesBundles는 O0/O2 조건 단일 평가와 bundle 거부를 검사합니다.
루프 메타데이터 회귀 테스트는 모든 제어 분할과 정확한 예산 및 한 단위 부족한 예산에서 카운트 루프를 독립적인 수식과 비교합니다. 크거나 0인 박리 이력 값으로 잘못된 결과, 비종료 또는 poison을 숨길 수 없습니다. API로 잘못된 메타데이터를 구성하여 LLVM 어셈블리 파싱과 별도로 가져오기 거부를 검사하며, 머신 상태 테스트는 상태 효과와 입력 제한을 유지합니다.
초기화 계약 회귀는 부분 및 분리된 바이트 범위, 고정 별칭, 양쪽 분기, 모든 반환, 첫 반복의 읽기와 반복 안의 저장 후 읽기를 검사합니다. 저장 전 읽기, 누락된 저장, 게스트 저장, 알 수 없는 별칭, 특수 메모리 접근, 객체 밖 범위와 입력/작업 예산 소진은 실패해야 합니다. 출력 전용 상태 워드를 쓰는 독립 C 예제를 O1/O2로 컴파일해 정확한 LLVM 속성을 유지한 채 새로운 네이티브→LLVM 조합 증명을 통과하는지 확인합니다.
조건부 카운트다운 검증은 본문 템플릿 거부 후 재시도, 임의 워드 입력에 대한 완전한 헤더 증명, 절단점 및 쿼리 예산의 누적, 실제 진입 계약 위반의 즉시 거부를 검사합니다.
NeverDInterpreterLLVMRefinementTests는 새로운 조합 증명, 정확한 텍스트/함수 바인딩, 독립 예산, 전체 관찰과 더 넓은 소스 영역을 검사합니다. 바이트, 잔여 코드, 결과, 플래그, 상태 코드, 프레임 쓰기, poison 및 잘못되거나 오래된 루프 계획은 조합 기록을 거부해야 합니다. 임의 워드 카운트다운에는 두 귀납 전제가 필요하며, 독립 C 예제의 O1/O2 컴파일은 실제 직렬화 LLVM 입력을 검증합니다. 상태 모델 회귀는 숨겨진 진입 역방향 간선을 거부하고 부수적인 출처 정보를 복사하지 않으면서 루트 예산을 검사합니다.
cmake --build build-release --target NeverDLLVMCScalarLoopRecoveryTests --parallel 4
build-release/bin/NeverDLLVMCScalarLoopRecoveryTests
cmake --build build-release --target NeverDLLVMScalarLoopRecoveryTests --parallel 4
build-release/bin/NeverDLLVMScalarLoopRecoveryTests
cmake --build build-release --target NeverDLLVMScalarEquivalenceTests --parallel 4
build-release/bin/NeverDLLVMScalarEquivalenceTests
cmake --build build-release --target NeverDLLVMScalarResultProjectionTests --parallel 4
build-release/bin/NeverDLLVMScalarResultProjectionTests
cmake --build build-release --target NeverDLLVMScalarStateProjectionTests --parallel 4
build-release/bin/NeverDLLVMScalarStateProjectionTests
cmake --build build-release --target NeverDLLVMScalarInputProjectionTests --parallel 4
build-release/bin/NeverDLLVMScalarInputProjectionTests
cmake --build build-release --target NeverDLLVMInterpreterModelTests --parallel 4
build-release/bin/NeverDLLVMInterpreterModelTests
cmake --build build-release --target NeverDInterpreterLLVMRefinementTests --parallel 4
build-release/bin/NeverDInterpreterLLVMRefinementTests2중 및 3중 루프의 캐시된 동등 종료 조건은 피연산자 상관관계, 변하는 경계, 카운터 재설정 및 손상된 복사를 검사합니다.
비교 캐시 회귀는 같음과 다름, 가드와 상수 접기된 초기화, 확장 후 처음 나타나는 필드, 1/4/8바이트 캐시의 비트 7/31/63을 검증합니다. 검사 대상 비트를 유지하며 인접 비트만 바꾸어도 전체 상태 비교가 거부해야 합니다. 0 증분, 이동 경계, 카운터 초기화와 공통 예산 소진도 거부합니다.
일반화 접두 회귀는 합류 진입, 첫 무반복 증거, 숨겨진 레지스터/프레임 차이, 비정규 불리언 술어, 네이티브 트랩 조건, 상관된 스필 및 잘못되거나 예산이 소진된 계획을 검사합니다. 독립적인 2중/3중 등식 종료 카운터와 네이티브 바이트는 부호 없는 입력 경계, 0/최댓값 영역, 비단위 증가 및 잘못된 원본 명령을 확인합니다. 추론과 최종 증명 모두 불완전한 결과를 거부해야 합니다.
독립적으로 작성한 분기 루프 회귀 테스트는 두 분기 방향, 잘못된 루프 본문, 종료하지 않는 형제 분기와 공유 탐색/증명 예산 소진을 검사합니다. LowIRLoopInference.AlternativeLoopsReachBothPrefixesWithinSharedBudgets.
중첩 추론 회귀는 2중·3중 루프, 증가·감소 카운터, 자동 단계 상수 및 실제 네이티브 본문 절단점을 다룹니다. 도달 불가능하거나 서로 배타적인 접두 영역, 잘못된 본문, 무한 또는 래핑 전이, 공유 탐색/증명 예산 소진은 거부해야 합니다. 접두 증거가 전체 구간 검증을 대체하지 않습니다.
cmake --build build-release --target NeverDLowIRRefinementTests --parallel 4
build-release/bin/NeverDLowIRRefinementTestsNeverDLowIRUndefinedIndependenceTests는 완전한 비순환 LowIR 그래프에서 두 실행의 독립성을 검사합니다. 일반 진입 입력은 공유하며, 아키텍처에서 정의하지 않은 값을 새로 생성할 때마다 복사, 겹치는 쓰기, 스필과 재로드에 걸쳐 해당 값의 상관관계를 유지합니다. 제어 조건은 경로 가정을 추가하기 전에 검사합니다. 인증서는 Complete 효과 메타데이터와 각 명령의 전체 경계 및 정확한 연산 다이제스트와의 결합을 요구합니다. 증거 누락, 도달 가능한 루프, 호출, 알 수 없는 별칭, 예산 소진 시 인증서를 거부합니다. 결과는 명시적인 관찰 항목과 오류 없는 프레임 계약으로 제한되며, 네이티브 코드에서 C로의 완전한 동등성 증명이 아닙니다.
다음 동작에는 기본 엄격 감사 계약이 적용됩니다. NeverDOriginalBinaryUndefinedIndependenceTests는 독립적인 고정 매핑 x64 바이트로 실제 CALL/RET, 변경된 반환 대상, 유한 간접 대상의 완전 열거와 불변 메모리 읽기를 검사합니다. 같은 테스트 대상에서 직접 분기 전체 수집, 정확한 바이트·효과·매핑·읽기 증거 결합, 외부 반환 시 진입 RSP와 반환 슬롯 보존, 프레임과 이미지 분리 전제의 충족 가능성을 확인합니다. 누락되거나 겹치는 명령, 정확한 트랩 및 명시적 프로파일 투영 규칙 밖의 미감사 분기, 종료하지 않거나 예산을 초과하는 루프, 불완전한 대상 열거, 설정·계약 불일치 및 예산 소진 시 인증서나 잔여 코드를 반환하지 않습니다. 성공하려면 모든 실행 가능 경로가 완료되어야 합니다. 이 선택적 게이트는 루프 불변식, 예외 디스패치, CET 활성 실행이나 네이티브 코드에서 C로의 동등성을 인증하지 않으며 일반 복원은 별도로 유지됩니다. 이 대상은 엄격하게 리프트한 INT3/UD2의 종단 경계와 전체 바이트 및 연산 다이제스트 결합도 검사합니다. 미정의 출력 사이드카의 Missing은 그대로 유지되어야 합니다. 기호 실행으로 도달 불가능함이 증명된 트랩만 인증서에 포함될 수 있으며, 실행 가능한 트랩 경로는 인증서나 잔여 코드 없이 ContractViolation을 반환해야 합니다. 트랩 이후의 순차 실행과 예외 복귀는 모델링하지 않고, codeFollowsTrap을 사용하지 않으며, 정적 LowIR API의 지원 범위는 그대로 유지합니다.
물리적 반환 회귀는 잘못된 인라인 바이트를 건너뛰는 직접 및 간접 호출, 도달 가능한 잘못된 반환 위치, 완전한 대상 열거와 정확하거나 부족한 예산을 검사합니다. 전체 상태 관계는 변경된 결과를 거부합니다. 독립 C의 O1/O2 컴파일 결과도 전체 프레임 쓰기를 보존해야 하며 같은 반환값으로 반환 슬롯 바이트 변경을 숨길 수 없습니다.
명시적 네이티브 중첩 테스트는 실제 x64 즉시값 내부로의 분기, 실행 가능한 두 분기의 결과, 이전 명령어 내부의 간접 반환 진입점을 검사합니다. 합성 제공자 테스트는 두 수집 순서의 포함 중첩, 실행되지 않는 직접 분기의 바이트 충돌, 두 순서의 코드와 읽기 일치성 및 후보 읽기를 검사합니다. 정확히 충분한 예산과 부족한 예산은 간접 전송에 걸쳐 중복 바이트까지 누적 계산합니다. 분기 결과 변경, 정적 또는 루프 API 사용, 모순된 증거는 인증서를 거부해야 하며 옵션이나 한도 변경은 다이제스트를 바꿉니다.
경계 옵션 테스트는 도달 불가능한 RCL, LOCK 메모리 XADD, REP MOVS, 기호 경로 모순, 임의 값이 제어하는 분기와 진입점·간접 분기·CALL·RET 도달 시 정확한 거부를 검사합니다. 도달 가능한 후속 영역의 별도 진입, 후보와 네이티브 주소 충돌, 잘못되거나 부분적인 증거, 자원 소진, 정적/루프 API 거부, 정제 증명의 세 다이제스트 계층도 검사합니다. 도달 불가능한 명령을 변경하거나 경계가 없는 경우 옵션을 전환해도 인증서 다이제스트가 바뀝니다. 이 테스트는 선언된 유한 증명 범위를 검증하며 미감사 명령의 의미를 증명하지 않습니다.
패킹 플래그 테스트는 모든 스칼라 진입 플래그 조합, 권한 마스크, 두 실행의 TF/AC 조건, 별개 미정의 생성자, 상관된 복사, 네이티브 호출, 형제 경로 상태, 필수 최종 시스템 상태 관찰, 잘못된 증거와 자원 제한을 검사합니다. 유한 루프의 모든 실행 가능한 입력 경로가 종료해야 하며 안전한 분기로 무한 또는 잘린 경로를 숨길 수 없습니다. RDSSPD/RDSSPQ는 16개 범용 레지스터와 두 폭, 상위 비트 보존, Missing 증거 유지, 위조 투영 거부를 검사합니다. 기계 상태 테스트는 두 C 경로의 O0/O2와 미정의 동작 트랩으로 독립적인 사용자 모드 플래그 오라클과 비교하고 프로파일 실패가 나중에 지워지지 않음을 확인합니다. INCSSPD/INCSSPQ 테스트는 두 폭과 모든 범용 레지스터, 도달 불가능 경계 보존, 안전한 형제 경로 완료 후의 실행 가능한 트랩, 0 피연산자, 위조 트랩 증거를 확인합니다.
NeverDX86DecodeDetailTests는 세 디코딩 경로, 두 x64 주소 너비, 부호 있는 변위 경계, 필수 접두사, 실제 i386 disp16, moffs, 잘린 입력과 상세 정보 없는 재사용을 검사합니다. 정확한 재배치 필드만 연결되며 잘못된 너비, 위치, 값은 연결되지 않습니다. 네이티브 독립성 및 관계 증명 테스트는 전체 프레임 쓰기를 유지하고 관찰되는 임의 플래그와 변경된 시프트 후보를 거부합니다.
NeverDX86UndefinedEffectsTests는 미정의 비트 메타데이터, 정의되거나 보존되는 플래그, 오래된 인증서 거부를 검사합니다. NeverDX86CarryArithmeticFlagTests는 산술 오라클을 기준으로 레지스터 및 메모리 형태 ADC/SBB의 보조 캐리를 검사합니다. NeverDX86LogicIdentityTests는 동일 피연산자 AND가 64비트 모드에서 32비트 대상에 쓸 때 해당 64비트 레지스터의 비트 63:32를 0으로 만들면서 더 좁은 쓰기의 미기록 비트는 보존하는지 검사합니다.
X86RotateUndefinedEffects.*는 모든 원시 횟수, 피연산자 폭, CL 중첩, 상위 바이트 별칭 및 메모리 대상을 스칼라 산술 기준과 비교합니다. X86BitTestUndefinedEffects.*는 레지스터/즉시값 인덱스, 원본/대상 중첩, 확장 레지스터, 정의된 플래그와 레지스터 상위 쓰기를 검사합니다. 메타데이터 반례는 변경된 피연산자, 인코딩 및 미지원 형식을 거부합니다. 네이티브 증명은 상관된 읽기와 독립적인 임의 플래그를 구별하고 생성자 예산의 정확한 경계 및 부족을 검사하며 관찰 가능한 미정의 OF를 거부합니다. 전체 상태 정제는 선택한 증인을 허용하고 0비트 증인이나 변경된 후보는 거부합니다.
X86XaddAudit.*는 부호 없는 산술 기준으로 65,536개의 모든 바이트 입력 쌍, 넓은 비트 폭의 플래그 경계, 레지스터/상위 바이트 중첩, 두 쓰기 결과, REX 바이트 폭 제한과 전체 레지스터 보존을 검사합니다. 네이티브 검사는 이전 의존성을 유지하면서 새로운 임의 비트가 없음을 요구합니다. 두 증인은 변경되지 않은 XADD를 허용하고 합, 교환 원본 또는 정의된 플래그의 변조를 거부합니다. /6 별칭은 전체 시프트 횟수 행렬로 검사하며 그룹/디코딩 ID 변경 반례가 의미 불일치를 거부합니다. 메모리 검사도 모든 바이트 입력 쌍, 주소 크기 변경, 확장, IP 상대 및 i386 16비트 주소, 부호 있는 변위, 인접 바이트와 오래된 세부 정보의 거부를 다룹니다. 전체 프레임 네이티브 검사는 이전 임의 값 의존성과 정확한/부족한 예산을 유지하며, 저장 주소 변조는 반환 슬롯 계약을 위반합니다.
X86DoubleShiftUndefinedEffects.*는 독립적인 단일 비트 전송으로 16/32/64비트 폭의 모든 원시 바이트 횟수, 소스/대상/CL 중첩과 정확한 생성 조건을 검사합니다. 네이티브 검사는 RAX를 버려 플래그를 분리하고 횟수 16과 17, 이전 의존성과 정확한/부족한 예산을 확인합니다. 전체 상태 관계는 정의된 부분의 변경과 0비트 증인을 거부하며, 미정의 하위 워드가 정의된 상위 비트 삭제를 허용하지 않습니다. 잘못된 형식은 부분 증거를 게시하지 않습니다.
*Deferred* 사례는 도달 불가 분기와 폴스루, 누락/잘못된 코드, 모순된 기호 조건, 임의 제어, 선택 증인과 전체 상태 변이를 검사합니다. 합성 제공자는 죽은 후속을 가져오지 않고 도달한 잘못된 메타데이터를 거부함을 확인합니다. 정확한/부족한 명령·연산·방문·질의 예산, 실행 가능한 잘못된 대안과 무한 루프는 접두 경로를 인증하지 않습니다. 정책 변경은 인증서 다이제스트를 바꾸며 정적/루프 API는 옵션을 거부합니다.
NeverDPEFixedImageTests는 독립적으로 구성한 PE 파일로 재배치된 명령과 불변 데이터, 가져오기 쓰기 범위, 잘못된 헤더/테이블, 별칭과 출처 정보 변경을 검사합니다. 네이티브에서 LowIR 및 정확한 LLVM으로 이어지는 증명은 일치하는 후보를 허용하고 결과, 상태 또는 원본 바이트가 변경된 후보를 거부합니다. 준비 예산 소진은 별도로 분류하며 한도를 명시적으로 늘려 재시도할 수 있습니다. 일반 로드는 기본 분석 예산을 넘는 40000개의 유효한 재배치 레코드도 허용합니다.
FrameOffsets.*, NativeStackSpecialization.*, OriginalBinaryUndefinedIndependence.*는 정렬 2/4/8/16/32의 모든 나머지, 자유로운 상위 비트, 호출 간 스필, 카운트다운 루프, 별칭 손상, 잘못된 분기, 무관한 큰 마스크, 필요한 분할 확대와 정확한 한도/한 번 부족한 예산을 검사합니다. 별도 네이티브 대조 사례는 경로 조건이 있는 정렬, 내부 부호 없는 반환 정리, 잘못된 정리량 및 접두사 반환을 검사합니다. 이 테스트는 분할 루프의 자동 native-to-LLVM 증명 범위를 확립하지 않습니다.
네이티브 회귀는 한 번 로드의 질의 예산으로 64회 정렬 로드, 하나 부족한 예산, 경계 밖 주소와 한 경로가 반환한 뒤 다른 술어의 같은 주소를 검사합니다. 전체 상태 변조와 기존 캐시 키/용량 테스트도 유지합니다.
반복 실행 가능성 회귀는 두 명령 직선 실행과 같은 질의 예산으로 원래 130개 명령을 모두 보존합니다. 질의 또는 명령 예산이 하나 부족한 경우, 분기와 진입 영역 변경 후 도달 가능한 트랩, 솔버 게이트 소진, 후보 상태 변경을 거부합니다.
프레임 오프셋 회귀는 전체 루트 뺄셈에 부족한 게이트 예산에서 분할 폭/정렬/나머지/바이어스 558개 조합을 검사합니다. 다른 소스와 바이어스, 제약 없는 희소 마스크, 모듈러 올림과 순환, 중첩 마스크와 노드/질의 고갈도 다룹니다. 네이티브 검사는 부분 정렬 포인터의 저장을 확인하고 정렬 누락, 프레임 밖 접근과 전체 상태 정제의 저장값 변조를 거부합니다.
진입 합동 증명 테스트는 정렬 1/2/4/16의 모든 나머지, 두 루트 레지스터, 자유로운 상위 비트, 잘못된 영역, 모순 상수, 비순환 경계, 제외 구간, 보존과 정확/하나 부족한 쿼리 예산을 검사합니다. 귀납 템플릿은 원래 진입 조건을 유지합니다. 새 네이티브 독립성·관계·LLVM 증명은 불일치 영역과 바뀐 상태 코드를 거부하며 다이제스트는 두 영역을 묶습니다. 독립 작성된 사례이며 ABI나 실행에서 조건을 추측하지 않습니다. 독립 진입 가드 C를 그대로 O1/O2로 컴파일하여 두 나머지에서 실제 네이티브 명령열과의 일치를 증명하며 같은 결과물은 다른 나머지에서 거부되어야 합니다.
레지스터 경우 회귀는 양쪽 바이트 순서, 높은 프레임 기준 주소, 덮어쓰기와 중첩 필드, 후속 간선, 확장된 선행 노드, 네이티브 CALL/RET 및 정확한 예산과 하나 부족한 예산을 검사합니다. 두 C 경로는 O0/O2에서 네 가지 메모리 경우를 모두 실행합니다. 네이티브 정밀화는 두 선택자 값을 각각 고정하여 검사하므로 무제약 입력 증명이 아닙니다. 별도 LLVM 예제는 공유 합류점 앞으로 이동한 거짓 분기가 참 분기 뒤에 실행되지 않음을 PHI 복사와 저장을 포함해 검사합니다.
진입 정렬 회귀는 세부 분할, 모든 허용 나머지, 서로 다른 주소 상위 비트, 마지막 사례 실패 및 정확한 예산과 1 부족을 검사합니다. 두 C 백엔드의 O0/O2 실행에서 접근 불가능한 거부 대상 게스트 주소와 잘못된 플래그로 상태 2 및 모든 상태 바이트 보존을 확인합니다. 모델 의미와 C/Python v5 레이아웃·소유권·이전 및 미래 후행 필드도 검사하며, 바인딩되지 않은 정렬 영역의 네이티브 증명을 거부합니다.
StringTransfer.*와 반복 복사 회귀는 겹침, 횟수 0, 임시 변수 격리, 용량·예산 제한 및 포인터 무효화를 검사합니다. MachineStringSourceTests.cpp는 네 가지 폭과 양방향에 대해 네이티브 실행 및 두 C 경로의 O0/O2 결과를 독립적인 전체 레지스터·플래그·스택 참조 결과와 비교합니다.
ControlDiscovery.*와 NativeStackSpecialization.*는 루트 하위 비트 조건, 상위 비트 및 전체 루트 의존성, 불완전한 순회, 정확히 충분하거나 부족한 순회 예산, 유한한 불변 주소 증거의 보존을 검증합니다.
미해결 대상 가드 테스트는 도달 불가능한 잘못된 단계, 진입 또는 역방향 간선 이후 도달 가능한 미지의 대상, 정확한 정밀도 개선 횟수 한도, 성공과 소진이 인접한 탐색 예산을 검사합니다. 거부 시 잔여 코드, 출처 기록, 읽기 증거를 공개하지 않습니다. 완전한 복구 후의 선택적 탐색 비용은 필수 예산의 하한이 아닙니다.
요구에 따른 프레임 투영 회귀 테스트는 자동 및 기존 레지스터, 높은 기준 주소와 모듈러 래핑, 하위 바이트만 제한하는 조건, 형제 간선 사실의 충돌 또는 누락, 인접한 질의 예산의 결과와 솔버 unknown을 다룹니다. 좁은 비트 요구로 부분 포인터 증명을 전체 폭 증명으로 간주하지 않으며, 복구 거부 시 잔여 코드나 증거를 게시하지 않습니다.
유한 하위 필드 회귀 검사는 상위와 하위 절반의 선택 값, 관찰 가능한 임의 페이로드, 레지스터와 프레임, 두 바이트 순서, 좁은 저장 영역, 이후 값 범위 확장, 겹치지 않는 마스크와 누락된 사실을 다룹니다. 도달 가능한 대상 누락, 무제약 선택 값, 공유 질의 예산 소진 및 솔버 unknown에서는 잔여 코드나 증거를 게시하면 안 됩니다. 전체 워드 요구에 대한 자동 탐색, 사용하지 않는 수동 힌트, 루트에서 파생된 데이터와 앞쪽 상수 구간도 검증합니다.
공개 작업 예산 테스트는 기본값과 32비트 최대값, 평가와 의존성 탐색의 개별 소진, 두 소스 ABI 및 C 백엔드, 잘못된 CLI 값을 검증합니다. C/Python 레이아웃 검사는 v7, 상속된 검증, v1–v6가 향후 꼬리 확장을 무시하는 동작을 다룹니다. 예산 거부 시 소스나 복원 증거를 공개하면 안 되며, 평가 카운터는 최대값에서 순환하면 안 됩니다.
선택적 체인 절단 테스트는 같은 고정 연산 예산에서 일반 루프와 중첩 루프를 비교하고 잔여 루프를 실행하며 디코드 모드를 구분하고 체인 길이 0의 동작이 유지되는지 확인합니다. 상관관계 반례는 기본 설정에서 성공하고 옵션 활성화 시 출력을 거부해야 합니다. 반복 네이티브 호출과 반환 슬롯, 의존성 재생, 늦게 도착한 선행 노드를 두 설정으로 실행합니다. 공개 플래그 테스트는 두 소스 ABI와 백엔드, 기본값 및 알 수 없는 플래그, 확장을 무시하는 이전 API, 보고되는 불리언 값을 확인합니다.
NativeStackSpecialization.NarrowAddressDemandRetainsCompletePointer는 조건부 레지스터 및 프레임 슬롯 포인터 병합, 두 바이트 순서, 모듈러 래핑과 높은 루트 주소, 스택 복원 및 프레임 120바이트를 검사합니다. 관련 반례는 손상된 포인터를 거부하며, 쿼리·연산·평가·정밀화 예산이 정확히 충분하거나 한 번 부족한 경우와 의존성 탐색 및 문맥 한도 소진을 검사합니다.
유한 값 관찰자 테스트는 조기 거부, 상수, 빈 투영 및 마지막 UNSAT 쿼리를 검사합니다. 불변 읽기 회귀는 반례 이후 런타임 로드를 유지하고, 다른 읽기 범위에 대해 캐시된 주소 도메인을 재검증하며, 잘못된 인증서에서 부분 증거를 게시하지 않습니다.
아핀 제어 테스트는 8회 질의 예산에서의 하위 비트 조건, 두 바이트 순서의 레지스터 및 프레임 슬롯, 모듈러 래핑, 프레임 바이트 관측 및 스택 복원을 다룹니다. 리터럴 상수가 아닌 모순 조건은 지원하지 않는 분기를 제거해야 하며, 하위 32비트가 같고 상위 비트가 다른 두 루트 값은 두 간접 분기 대상을 모두 보존해야 합니다.
FiniteQueryCache.*는 정확히 충분한 저장 한도와 한 단위 부족한 한도, 적중에 따른 사용 순서 갱신, 크기가 다른 여러 기록의 교체, 반복 제거, 변수 이름을 바꾼 질의를 검사합니다. 중복 저장, 미스, 잘못된 결과, 지나치게 큰 후보는 사용 순서를 유지합니다. 반환된 증명 사본은 해당 캐시 항목이 제거된 뒤에도 유효합니다.
ControlStateRecovery.*Marginal*은 독립적인 대상 및 업무 영역의 곱이 결합 한도를 초과하는 경우, 잔여 코드의 구체적 출력, 결합 관계 확장 후 늦은 선행 노드가 추가하는 대상, 도달 가능한 대상의 누락, 초과 또는 불완전한 열거 시 전체 영역 제거를 다룹니다. 독자적으로 작성한 픽스처는 영역 변경에 따른 재분석과 실패 시 부분 그래프를 공개하지 않는 동작을 검증합니다. 프레임 슬롯 변형은 결합 관계 확장 후 두 바이트 순서에서 별칭 쓰기에 따른 무효화를 검증합니다.
InterpreterTransferChain.*는 상관값, 유일 및 동적 분기, 뒤늦은 선행 노드, 프레임 경계, 별칭 거부와 예산을 검사합니다. 추가 네이티브 CALL/RET 테스트는 반복 출현, 반환 슬롯 바이트와 스택 복원을 검사합니다. 생성자 재생 및 네이티브에서 LLVM으로의 검증은 계약 불일치, 증거 변경, 잘못된 결과와 누락된 스택 쓰기를 다룹니다.
NeverDX86NoIndexAddressTests는 32/64비트 주소 폭에서 인덱스 없는 x86 SIB 주소 지정을 검사합니다. 무시되는 배율 비트, 대상 폭, 로드/스토어, 완전한 미정의 출력 메타데이터, 세그먼트 오프셋과 주소 출처를 확인합니다. 의사 레지스터를 베이스 또는 잘못된 폭의 인덱스로 사용하면 거부하며, REX.X가 선택하는 실제 R12 인덱스는 유지합니다. EVEX 브로드캐스트 및 마스크 이동 테스트도 이러한 형식, 비활성 메모리 접근 억제와 모순된 SIB 메타데이터를 검사합니다.
시프트 회귀는 모든 8비트 원시 횟수, 0회 플래그 조합, 두 x86 모드, 모든 스칼라 폭, CL 대상 별칭, AH/CH/DH/BH, 확장 레지스터와 메모리를 다룹니다. 바이트 단위 기호 실행을 반복 1비트 산술과 비교하여 정의된 결과와 가드를 검증합니다. 관계 테스트는 복사와 새 플래그, 스필, 루프 재방문, 미정의 값에서 나온 횟수, 분기 거부, 잘못된 인코딩, 다이제스트와 예산 실패를 확인합니다. 유한 불변 읽기 테스트는 1/2/4/8바이트, 입력별 선택, 경로별 단일 주소, 전체 읽기 증거와 한도 결합을 확인하고 의존·누락·쓰기 가능·파일 바이트 없음·재배치·무한 후보를 거부합니다.
코어 테스트는 컨텍스트 분리, 고정점 합류, 동적 루프, 겹치는 레지스터, 별칭 무효화, 유한 대상 디스패치 및 거부 시 부분 교체를 내보내지 않는지 확인합니다. 소스 테스트는 직접 작성한 레지스터형·스택형·유한 주소 x64 머신을 어셈블하고 두 C 경로를 복원하여 정의되지 않은 동작 트랩을 켠 O0/O2로 컴파일한 뒤 독립적인 부호 없는 산술과 메모리 참조 구현과 실행을 비교합니다. 유한 주소 fixture는 입력으로 선택한 레코드와 커서/키 상관관계를 검증하며 네이티브 검사는 SysV/Win64를 다룹니다. 공개 CLI, 복원 예산과 지원하지 않는 입력의 보고서도 확인합니다. 교차 대상 Clang과 LLD가 필요하며 원래 ELF 실행에는 x64 Linux 호스트도 필요합니다. 도구 누락이나 호스트 불일치로 건너뛴 범위는 통과한 검증이 아닙니다.
ControlStateRecovery.LongTransparentLoop*는 독립적으로 작성한 20단계 루프, 동적 산술 참조 구현, 알 수 없는 선택자 거부 및 예산 소진을 검증합니다. LongTransparentPhasesKeepExactBitDemands는 선택자와 같은 바이트의 무관한 비트가 제어 요구가 되지 않고 관찰 가능한 런타임 데이터로 남는지 확인합니다. ProducerClosureChargesWorkBeforeAnotherRestart는 새 그래프가 시작되기 전의 역방향 탐색과 재실행에도 공유 예산을 적용하며 부분 결과를 게시하지 않는지 검증합니다.
X86ShiftCarry.*는 반복적인 1비트 시프트를 기준으로 좁은 정수의 산술 오른쪽 시프트 캐리, 마스킹된 횟수, APX 대상 레지스터 및 플래그 억제 동작을 검사합니다.
NarrowArithmeticShiftCarrySurvivesBothSourceBackends는 정의되지 않은 동작 트랩을 활성화하여 O0/O2에서 두 복원 C 경로를 실행하며 모든 바이트 값과 원시 시프트 횟수를 다룹니다.
NeverDLLVMCIntrinsicSemanticTests는 i1/8/16/32/64/128 부호 있는/없는 정수 min/max도 O0/O2에서 실행하여 대입 및 인라인 결과, 피연산자 생성 순서와 단일 평가를 검사합니다. 지원하지 않는 스칼라 너비와 잘못된 피연산자는 명시적으로 실패해야 합니다.
HighControlFlowSemantics.*는 루프의 종료 지점이나 뒷부분을 이동할 때 다른 점프가 참조하는 레이블을 보존하는지 검사합니다. 루프 앞뒤 종료 지점으로 직접 진입하는 경우와 break 교체를 다루며, 생성된 C를 O0/O2로 실행해 독립적인 반환값 기준과 비교합니다.
HighCPointerAddresses.Required* / UnknownConditionsFailOnlyWhenRead는 추론된 필수 레지스터 인수의 끝에 있는 알 수 없는 슬롯이 유지되는지 검사합니다. 알 수 없는 필수 인수나 조건을 평가하면 명시적으로 트랩해야 하며, 생략된 피연산자, null 피연산자 및 중첩 피연산자를 조용히 0으로 바꾸면 안 됩니다. 알려진 값과 읽히지 않음이 입증된 추가 피연산자는 계속 실행할 수 있습니다. 트랩은 진단 경계이며 복원된 동작의 동등성을 증명하지 않습니다.
NeverDIntegerABITests는 Windows x64, Linux x64, Linux ARM64용 원본 Clang fixture를 빌드합니다. 실제 10개 인자 함수로 레지스터/스택과 호출 프레임을 검사합니다. Unicorn/KVM/WHP 행렬에서 사용할 수 없는 호스트/ISA 조합은 명시적 skip이며 통과로 간주하지 않습니다. NeverDExecutionBudgetTests는 시간에 의존한 sleep 없이 공유 continuation 예산, reservation, 절대 deadline을 검사합니다.
NeverDCPUEmulationTests는 ARM64 명령, 제어, load, context, alias, 캐시 무효화, 유한 루프를 다룹니다. software 프로필은 FP/SIMD와 TLS도 실행합니다. NeverDUserExecutionTests는 CPL3/EL0 권한, alias, 보호 fault, context 및 공간 전환을 검증합니다. NeverDServiceRequestTests는 SYSCALL/SVC가 전송 전에 가로채지고 상태가 보존되며 요청이 한 번만 소비됨을 확인합니다. 이는 handoff protocol 테스트이지 OS 서비스를 완전히 구현했다는 뜻이 아닙니다. NeverDExecutionConfigurationTests는 공통 resolver, 빌드 지원과 실제 probe 구분, 미지원 설정의 fail-closed 동작을 검사합니다. 공개 SDK/CLI 테스트에는 Windows model이 필요하지 않습니다. NeverDThreadPointerTests는 FS base, TPIDR_EL0, context 복원, 권한을 검사합니다. NeverDKvmCancellationTests는 종료되지 않는 x64 guest로 활성 KVM 중단, 재개, 호출자 signal 상태 유지를 검증하고 KVM이 없으면 명시적으로 skip합니다.
cmake --build build-cpu --target NeverDKvmRunTests NeverDKvmCancellationTests --parallel 4
ctest --test-dir build-cpu -L '^NeverDKvm(Run|Cancellation)Tests$' --output-on-failurecmake --build build-cpu --target NeverDIntegerABITests NeverDExecutionBudgetTests NeverDCPUEmulationTests NeverDUserExecutionTests NeverDServiceRequestTests NeverDExecutionConfigurationTests --parallel 4
ctest --test-dir build-cpu -L '^NeverD(IntegerABI|ExecutionBudget|CPUEmulation|UserExecution|ServiceRequest|ExecutionConfiguration)Tests$' --output-on-failureARM64 하드웨어나 hypervisor가 없으면 native coverage skip이며 통과가 아닙니다. Unicorn과 교차 컴파일은 native KVM/WHP 실행 증거가 아닙니다.
NeverDParallelExecutionTests는 처리기 호출 중첩, 쓰기 대기 중 취소, 독립 CPU 상태, 물리 별칭 경쟁과 전용 전송 준비를 검사합니다. NeverDRunControlTests는 독립 WHP binding의 동시 자원 임대와 공유 binding의 직렬화를 검사합니다. NeverDMMIOAtomicTests는 원래 x64 원자/갱신 명령과 전체 ARM64 LSE 사례의 장치/RAM 결과, 넓은 쓰기 관찰 두 번, 오래된 미리보기, 제공자 실패와 commit/stop 경쟁을 비교합니다. KernelMMIOFailure는 별칭, 동일 값 쓰기, 중복 커밋, 전원, 매핑 해제와 소유자 소멸을 검사합니다. 사용 불가 플랫폼은 명시적으로 건너뜁니다. 래퍼의 합류는 동시 호출을 증명할 뿐 하드웨어의 동시 명령 완료를 증명하지 않습니다. ARM64 KVM/WHP에는 해당 호스트가 필요합니다.
cmake --build build-cpu --target NeverDParallelExecutionTests NeverDMMIOAtomicTests NeverDRunControlTests --parallel 4
ctest --test-dir build-cpu/unittests/emulation -L '^NeverD(ParallelExecution|MMIOAtomic|RunControl)Tests$' --output-on-failure독립 프로세스 테스트는 실제 x64/AArch64 ELF fixture를 빌드합니다. NeverDLinuxProcessTests는 시작, 프로그램 헤더 정책, 서비스 이어달리기, 바이너리 출력, 게스트 fault, 자원 중지를 확인합니다. NeverDProcessPublicTests는 분석 이미지를 바꾸지 않고 C API/CLI를 확인합니다. NeverDExecutionSessionTests는 메모리/예산을 공유하는 CPU 두 개와 요청/fault exactly-once 소비를 검사합니다. NeverDX64MemoryUpdateTests는 메모리 산술, SETcc, BT, XMM/MXCSR, 쓰기 observer, REP 경계, 준비된 장치 읽기를 검사합니다. DriverBackendParityTests.cpp는 원본/재배치 WDK fixture를 실행하고 관찰 가능한 전체 보고서를 Unicorn과 비교합니다. fixture/backend가 없으면 명시적으로 skip합니다.
checked x64는 마스크된 legacy ADD, SUB, MUL, DIV, SQRT, MIN, MAX의 SS, SD, PS, PD 형식도 허용합니다. X64SSEInstructions.def가 operand 너비, 정렬, 허용 규칙을 관리합니다. MaskedSSEArithmeticMatchesIndependentHostExecution은 독립 host CPU oracle로 register/RAM 형식, 네 반올림 모드, FTZ, signed zero, subnormal, NaN을 검증하며, SSEMemoryObserverStopsBeforeResultAndStatusChanges는 효과 반영 전 중단을 검증합니다. 마스크되지 않은 예외, x87, AVX는 허용하지 않습니다.
X64PackedIntegerTests.cpp는 X64PackedIntegerCases.def의 독립 인코딩과 180개 고정 벡터 결과를 네이티브 x64 컴파일러 intrinsic과 별도로 대조합니다. 레지스터 및 페이지 끝의 RAM 별칭 사례는 다른 XMM, 정수 센티널, FLAGS, MXCSR과 소스 바이트를 보존합니다. 관찰자 중지·실패와 복구 가능한 읽기 결함은 상태를 보존하며 복구 후 한 번 재시도합니다. 비정렬은 #GP(0)를 발생시키며 MMX, LOCK 및 MMIO는 계속 콜백 전에 거부합니다. 네이티브 CI에서 WHP의 두 권한 수준을 필수로 실행합니다.
X64PackedShiftTests.cpp와 독립 X64PackedShiftCases.def는 즉시 횟수 16개와 가변 횟수 21개에서 열 종류의 시프트를 독립 스칼라 계산 및 네이티브 SSE2 intrinsic과 대조합니다. 횟수/대상 별칭, 상위 비트 무시, 정렬, 관찰자, 복구 가능한 결함, 장치 거부를 검증합니다. X64VectorTestSupport.h는 패킹 산술 테스트와 레지스터 및 RAM 검증을 공유합니다. 네이티브 CI에서 WHP의 두 권한 모드를 필수로 실행합니다.
X64VectorMaskTests.cpp는 독립적인 원시 인코딩을 스칼라 비트 추출 및 네이티브 SSE intrinsic과 비교하며 모든 원본 비트와 16 GPR × 16 XMM 조합을 두 REX.W 값으로 검사합니다. 전체 공개 레지스터 스냅샷, RAM 및 데이터 관찰자로 0 확장과 상태 보존을 검증합니다. 명령 중지, 콜백 실패 및 미지원 형식은 부수 효과를 반영하지 않아야 합니다. KVM/WHP 네이티브 검증은 두 권한 모드를 모두 요구합니다.
X64ShuffleTests.cpp는 X64ShuffleCases.def의 독립 인코딩을 사용하고 스칼라 레인 선택을 네이티브 intrinsic과 비교합니다. 전체 256개 제어 값, 레지스터와 자기 원본, 페이지 끝의 별칭 메모리, 모든 XMM 레지스터 쌍, 전체 공개 CPU 상태와 RAM, 관찰 콜백 중지·예외, 권한, 정렬 오류와 재시도를 검사합니다. MMX, VEX/EVEX, LOCK, 장치 피연산자는 부작용 없이 거부해야 합니다. 네이티브 KVM/WHP 검증은 두 권한 수준의 모든 사례를 요구하며 사용할 수 없는 호스트/ISA 조합은 명시적으로 건너뜁니다. UNPCKLPS, UNPCKHPS, UNPCKLPD, UNPCKHPD는 같은 상태·오류 검사 및 독립 스칼라·네이티브 대조를 사용합니다. 메모리 원본과 모든 XMM 대상의 조합도 검사합니다.
X64PartialMoveTests.cpp와 X64PartialMoveCases.def는 독립적인 스칼라/네이티브 로드·스토어 기준값, XMM 16개, NaN·비정규 수의 원시 비트를 검증합니다. 비정렬 접근, 별칭, 페이지 경계 오류, 권한 복구, 관찰자 중단·실패와 재시도에서 전체 CPU 상태와 RAM 두 페이지를 비교합니다. 페이지 끝 피연산자는 8바이트만 필요하고 저장에는 읽기 권한이 필요 없습니다. 레지스터 별칭, 거부 형식, 장치 콜백도 따로 검사하며 양쪽 권한 수준의 네이티브 KVM/WHP 사례는 필수입니다.
X64IntegerFloatTests.cpp는 독립적인 X64IntegerFloatCases.def 인코딩, APFloat 기대값, FP 상태를 저장·복원하는 네이티브 명령을 사용합니다. 두 정수 너비, 네 반올림 모드, 누적 정밀도 상태, FTZ, 모든 GPR/XMM 쌍과 전체 CPU/RAM 보존을 검사합니다. 비정렬·페이지 경계·페이지 끝 소스, 권한 복구, 관찰자 중단·실패와 재시도에서 정확한 범위를 확인합니다. 양쪽 권한 수준의 네이티브 KVM/WHP 사례는 필수입니다.
X64FloatIntegerTests.cpp는 독립적인 X64FloatIntegerCases.def 인코딩, APFloat, 네이티브 레지스터·메모리 명령으로 반올림과 버림 변환을 검사합니다. 두 정수 너비에서 부호 경계, 중간값, NaN, 무한대, 비정규 수, 모든 반올림 모드, 누적 상태, FTZ를 다룹니다. 모든 GPR/XMM 쌍, 전체 CPU/RAM 상태, 정확한 페이지 끝 읽기, 복구 가능한 페이지 경계 오류, 관찰자 취소·재시도를 검사합니다. 두 권한 수준의 네이티브 KVM/WHP 결과는 필수입니다.
X64SSEComparisonTests.cpp는 독립적인 X64SSEComparisonCases.def 인코딩, APFloat 순서, 호스트 FLAGS와 FP 상태를 저장·복원하는 네이티브 명령을 사용합니다. 21개 원시 입력의 모든 쌍으로 NaN·비정규 우선순위, 0, 무한대, 인접값을 검사합니다. 모든 XMM 쌍과 별칭, 누적 MXCSR, 반올림 독립성, DF 보존, 전체 CPU/RAM 상태, 정확한 페이지 끝·경계 읽기, 관찰자 취소·재시도를 확인합니다. 두 권한 수준의 네이티브 KVM/WHP 결과는 필수입니다.
X64SSEPredicateTests.cpp는 X64SSEPredicateCases.def의 독립 조건, X64SSEComparisonCases.def의 공유 원시 입력, APFloat 순서와 원본 네이티브 명령을 사용합니다. 모든 입력 쌍, 혼합 레인의 예외 우선순위, 스칼라 상위 레인, XMM 별칭, 전체 CPU/RAM 상태, 페이지 끝·경계 읽기, 정렬 우선순위와 관찰자·결함 재시도를 검사합니다. 직접 Capstone 검사는 모든 제어 바이트, 두 구문, 두 디코딩 API와 32/64비트 모드를 다룹니다. 두 권한 수준의 네이티브 KVM/WHP 결과는 필수이며 예약 제어값, VEX/EVEX, 장치 피연산자는 제외됩니다. 값 행렬은 명령과 비교 조건별로, 반올림·제어 행렬은 명령별로 나눕니다. NativeCPUTests.def는 기존의 모든 조합을 필수로 유지하며 게스트 제한과 CTest의 15초 제한은 바뀌지 않습니다. 컴파일 시 각 명령·조건 조합이 정확히 한 번 나타나는지 검사합니다.
X64SSEPrecisionTests.cpp는 독립적인 X64SSEPrecisionCases.def 인코딩, APFloat 정밀도 반올림과 원본 네이티브 명령을 결합합니다. 범위 검사는 제한 없는 지수로 반올림하며, 유한값으로 향하는 오버플로와 정규값으로 반올림되는 작은 결과도 다룹니다. 양 부호, NaN 페이로드, 모든 반올림/FTZ/누적 상태, 패킹 레인 집계, XMM 별칭, 전체 CPU/RAM 상태, 정확한 소스 폭, 정렬 우선순위, 페이지 결함, 관찰자 취소·재시도를 검사합니다. 두 권한 수준의 KVM/WHP 사례는 필수입니다.
X64PackedFloatTests.cpp는 독립적인 X64PackedFloatCases.def 인코딩, 부호 있는 APFloat 기댓값과 원본 네이티브 명령을 사용합니다. 모든 입력 쌍, 정수 경계, 정밀도 중간값, 반올림, 누적 상태와 FTZ를 검사합니다. 두 권한 수준에서 별칭, 모든 XMM 쌍, 전체 CPU/RAM, m64의 모든 페이지 분할, 정확한 페이지 끝, 정렬 우선순위와 관찰자·결함 재시도를 확인합니다. 모든 KVM/WHP 사례가 필수입니다.
X64PackedFloatIntegerTests.cpp는 독립적인 X64PackedFloatIntegerCases.def 인코딩, 공유 X64FloatIntegerCases.def 입력, APFloat/APSInt와 원본 네이티브 명령을 결합합니다. 43개 원시 입력의 모든 쌍은 signed32 경계, 중간값의 인접 값, NaN, 무한대와 비정규 수를 다룹니다. 별도 행렬은 각 레인의 정확·비정확·무효·비정규 입력을 독립적으로 바꿉니다. 모든 반올림/FTZ/누적 설정, XMM 별칭, 전체 CPU/RAM, 정렬된 페이지 끝, 정렬 우선순위와 관찰자·결함 재시도를 검사합니다. 두 권한의 KVM/WHP는 필수입니다.
DAZBackends는 비교, 조건식, 스칼라 정수/부동소수점, 패킹된 정수/부동소수점 및 정밀도 변환 행렬에 DAZ 활성화 검증을 추가합니다. X64DAZTestSupport.h는 독립적인 APFloat 입력 정규화를 제공하고 네이티브 기준 명령 실행 전에 호스트의 MXCSR_MASK를 확인합니다. 부호 있는 0, 비정규 수, NaN, 혼합 레인, 모든 반올림 모드, FTZ 및 누적 상태를 비교하면서 원본 바이트, 관련 없는 레지스터, FLAGS와 전체 RAM의 보존을 확인합니다. 레지스터, 별칭 및 페이지 경계 피연산자는 기존 접근 관찰 검사를 유지합니다. KVM/WHP는 두 권한 수준의 모든 DAZ 사례와 17개 원본 호스트 명령 기준 사례를 필수로 요구하며, 이식 가능한 실행에서는 지원되지 않는 호스트를 명시적으로 건너뜁니다. 기존 DAZ 비활성화 사례와 시간 제한을 유지합니다.
X64AlignmentTests.cpp는 허용된 aligned SSE 명령의 비정렬 피연산자가 데이터 관찰자, 권한 검사 또는 장치 콜백 전에 복구 가능하거나 종료되는 #GP(0)를 보고하는지 검증합니다. 오류는 공개 x64 레지스터 전체, PC와 RAM을 보존합니다. 주소 폭에 따른 순환 후 FS/GS 기준 주소를 더하고, 주소를 고치면 원래 명령을 재시도합니다. 직접 KVM/WHP 머신 테스트가 하드웨어 경계를 독립적으로 검증합니다. Windows ring3는 분류된 operand_alignment 오류를 전달하며, 다른 원인의 #GP는 아직 지원하지 않습니다.
X64SIMDExceptionTests.cpp는 checked 허용 판정을 우회하여 두 권한 수준에서 KVM/WHP의 네이티브 #XM 전달을 검증합니다. X64SIMDExceptionCases.def의 원본 사례 여덟 개는 정확한 미소 결과와 지수를 제한하지 않을 때 정밀도가 정확한 오버플로를 포함해 여섯 예외 유형을 다룹니다. 레지스터 및 RAM 형식은 지정된 MXCSR 상태를 제외하고 오류 시 전체 GPR, XMM, x87, FLAGS, FS/GS와 게스트 메모리를 보존합니다. 예외를 마스킹한 뒤 원래 명령을 재시도하며, 누적 상태를 유지한 채 피연산자를 수정해 이전 플래그가 예외를 다시 일으키지 않는지 확인합니다. 공개 checked 및 드라이버 계약도 원래 오류와 재시도 사례를 실행합니다. WindowsSIMDExecutionTests.cpp는 실제 네이티브 오류, 게스트 VEH/VCH 명령과 건너뛰기·마스크 후 재시도·피연산자 수정 후 계속 실행을 검증하며, 진입 제어 상태와 저장 컨텍스트를 별도로 확인합니다. 시작 반례는 누락된 오류, 잘못된 벡터와 변경된 목적지를 거부하고 기능을 게시하지 않습니다.
check_windows_simd.py는 WindowsSIMDCases.def와 스칼라 사례 목록으로 독립적인 자체 Windows x64 실행 파일을 빌드합니다. 6,144개 관측은 레지스터/RAM 피연산자, 모든 예외 마스크 조합, 모두 지우거나 설정한 고정 상태 플래그와 세 경로(건너뛰기, 마스크 후 재시도, 마스크를 유지하며 피연산자 수정 후 재시도)를 다룹니다. 어셈블리 진입점은 저장된 CONTEXT와 별도로 실제 VEH/VCH MXCSR 및 x87 제어 상태를 기록합니다. 호스트 상태를 복원하기 전에 정확한 오류 PC, 상태 보존, 수정된 컨텍스트와 재시도 결과를 검증하고 CI는 원시 기록과 소스 해시를 보존합니다. --build-only는 컴파일 증거일 뿐입니다. 이 관측은 checked 실행의 마스킹되지 않은 SIMD를 활성화하거나 ARM64 네이티브 실행을 입증하지 않습니다.
WindowsSIMDStatusCases.def는 네이티브 Windows에서 관측한 63개 비어 있지 않은 활성 상태 조합을 고정합니다. WindowsSIMDMappingTests.cpp는 정확한 코드와 매개변수, 일관되지 않은 오류 및 잘못된 제어 값의 거부를 검증하며 오류 경계를 주입하여 예외 레코드, CONTEXT의 두 제어 값과 마스킹 후 계속 실행을 확인합니다. Windows CI의 자체 프로그램은 고정된 결과를 독립적으로 검증합니다. 주입 테스트는 Unicorn의 예외 전달을 입증하거나 checked 실행의 마스킹되지 않은 SIMD를 활성화하지 않습니다.
cmake --build build-cpu --target NeverDLinuxProcessTests NeverDExecutionSessionTests NeverDX64MemoryUpdateTests NeverDThreadPointerTests --parallel 4
ctest --test-dir build-cpu -L '^NeverD(LinuxProcess|ExecutionSession|X64MemoryUpdate|ThreadPointer)Tests$' --output-on-failure사용할 수 없는 백엔드는 명시적으로 skip합니다. 교차 컴파일과 Unicorn ARM64는 native KVM/WHP 증거가 아닙니다.
NEVERD_ENABLE_DRIVER_EMULATION=ON과 BUILD_TESTING=ON을 함께 활성화하면 전용 실행 스위트와 공유 C API/CLI 검사를 빌드할 수 있습니다.
cmake --build build-release --target \
NeverDDriverEmulationTests NeverDDriverEmulationPublicTests --parallel 4
ctest --test-dir build-release -L '^NeverDDriverEmulation' --output-on-failurefixture는 게스트 초기화, 성공/실패 반환, 미지원 동작, 메모리 오류, 엄격한 시나리오 파싱, 제한된 실행을 검증합니다. 또한 create, 전송, cleanup, close, unload를 거치며 동기 buffered/direct I/O, READ/WRITE, 독립적인 파일 수명, MDL 권한, 동적 export 해석, 게스트 가변 인수와 구조화된 CPU 오류를 검증합니다. JSON과 프로세스 종료 코드를 확인하려면 emulate-driver CLI를 사용하세요. 프로덕션 빌드는 BUILD_TESTING=OFF에서도 이 기능을 활성화할 수 있으며, libneverd가 테스트 전용 Unicorn 구성에 의존해서는 안 됩니다.
추가 테스트는 드라이버 소유 비페이지 풀 MDL, 설명자와 버퍼의 독립적인 수명, 레지스트리 조회 레이아웃과 짧은 버퍼, 핸들 권한, 삭제와 누수, 출력 없는 IOCTL의 전체 64비트 information_hex를 검증합니다. 실제 샘플 검증에는 Zero의 동기 직접 읽기·쓰기와 통계 조회도 포함됩니다.
백엔드 테스트는 전체 CPU 컨텍스트(레지스터, 플래그, SIMD, FPU, CR8), 공유 메모리와 외부/장애 컨텍스트 거부를 검증합니다. 컴파일된 driver_dispatcher.c는 실제 DPC·작업 항목 콜백, 타이머 경계, 알림/동기화 이벤트와 타이머, 사유 Executive의 비경고 KernelMode 대기, 시간 초과/지연, 여러 차단 스택, 설정 직후 재설정해도 유지되는 깨우기, 콜백 인수와 잘못된 IRQL/수명을 검증합니다. 작업 항목의 보류/완료, 큐, 정체와 공유 예산 검증도 유지합니다. 이는 문서화된 부분집합의 증거이며 완전한 Windows 비동기 지원은 아닙니다.
DriverThreadPriorityTests.cpp는 원본 컴파일 드라이버 driver_thread_priority.c를 명시적 Unicorn/KVM/WHP의 driver 및 checked 계약으로 실행하여 대기/준비 스레드의 우선순위 변경, 할당량 내 이벤트/타이머 깨움, 동순위 순환, DISPATCH_LEVEL 차단과 낮은 우선순위 기아 중의 타이머 진행을 확인합니다. 두 카운터 루프 실행을 비교하여 남은 할당량이 정확히 유지됨을 검증합니다. 모델 테스트는 부호 있는 ABI, 실패 시 상태 유지, 종료된 객체 참조, 중첩 식별자 및 독립 콜백의 스택 재사용을 다룹니다. 네이티브 사례는 NativeDriverTests.def에서 필수이며 로컬에서 사용할 수 없는 백엔드는 명시적으로 건너뜁니다.
DriverMutexThreadTests.cpp는 driver_seh_mutex.def의 원본 WDK 모드 네 가지를 실행합니다. SEH 필터의 재귀 획득, 필터 또는 예외 finally가 획득한 소유권 유지, 다른 시스템 스레드의 mutex 해제 후 차단된 필터 재개를 검증합니다. Unicorn/KVM/WHP의 driver 및 checked 계약에서 일반/활성 CFG 이미지, 기본/재배치 주소, 협력식 및 1/17 명령 시간 할당량을 다룹니다. 모델 테스트는 중첩 스택 폐기 후 APC 비활성화, 다른 스레드의 해제 거부, 가장 바깥쪽 반환 검사도 확인합니다. KVM/WHP 사례는 NativeDriverTests.def의 필수 항목입니다.
KernelWaitSetTests.cpp는 Unicorn 없이 16개 모델 사례로 부분 WaitAll, 첫 준비 객체 WaitAny, 저장된 인덱스, 시간 초과 정리, 잘못된 후속 객체/저장소, 64개 경계, IRQL, 종료 스레드 보존과 동기화 타이머 두 개를 검증합니다. DriverMultipleWaitTests.cpp는 driver_wdm_multiple_wait.c와 DriverMultipleWaitCases.def의 독자적인 WDK 모드 7개를 Unicorn/KVM/WHP, 두 드라이버 계약, 일반/CFG 이미지, 재배치와 협력식/1/17 명령 퀀텀에서 실행합니다. 모델/네이티브 결과 30개는 NativeDriverTests.def의 필수 항목입니다. 회귀 테스트는 성공 또는 시간 초과 뒤의 중복 완료, 저장 상태 변경, 지연 대기의 중복 완료도 검증합니다.
KernelMultipleWait.DispatcherScalarParametersIgnoreUpperRegisterBits는 상위 비트 오염, 부호 경계, 오버플로와 객체 상태 보존을 검사합니다. DriverMultipleWaitCases.def의 naked 꼬리 호출 래퍼는 driver_wdm_multiple_wait.c의 실제 WDK 가져오기를 통해 같은 유효 ABI 호출을 실행하며 활성 CFG, 재배치와 명령 단위 선점을 포함합니다.
driver_context_limits.c: API IRQL 상한은 KernelAPIIRQL.def에 정의되며 인수별 제한은 담당 모델이 검사합니다. DPC는 레지스트리 API나 페이징 풀 할당·해제·접근을 사용할 수 없습니다. Unicode DbgPrint 변환은 PASSIVE_LEVEL이 필요하며 지원되는 ANSI 출력과 비페이징 작업은 DISPATCH_LEVEL에서 사용할 수 있습니다. 콜백 스택에는 경계가 있어 이탈한 스택 포인터가 다른 차단 작업자의 스택을 침범할 수 없습니다. 장치 확장의 활성 타이머는 조기 장치 회수를 막습니다. 일반 IRQL 전환을 제공하는 기능은 아닙니다.
KernelDeviceStackTests.cpp는 소유/연결 관계의 독립성, 최상단 선택, 실패 원자성, 스택 용량, 불투명 필드, 핸들 수, 분리·삭제를 넘는 작업 항목/요청 유지, 파일과 디스패치 대상의 차이를 검사합니다. 원본 driver_wdm_stack.c는 실제 WDK 헤더와 인라인 Copy/Skip/SetCompletion을 사용하며 일반/활성 CFG 이미지는 선택적 NEVERD_WDM_STACK_FIXTURE/NEVERD_WDM_STACK_CFG_FIXTURE로 지정합니다. DriverWDMStackTests.cpp는 재배치, 실제 하위 상태, 완료 순서/조건, 지연 pending 전달, 작업자/DPC, 대기, STATUS_MORE_PROCESSING_REQUIRED, 직접 MDL 유지, 중첩 완료, 잘못된 커서/제어를 검증합니다. DriverScenarioPublicTests.cpp는 구성된 CFG 이미지를 포함해 C API/CLI 전달과 C API 유지/중첩 완료를 검사합니다. 산출물이 없으면 명시적으로 건너뛰며 Linux 근거는 동일 드라이버 스택 범위만 입증합니다. PDO/PnP/전원 지원을 뜻하지 않습니다. KernelIRPStackTests.cpp는 개수 기반 커서, 전체 인라인 Copy 범위, 소비된 위치 지우기, 상태/pending 전달, MPR 및 중첩 완료, continuation 소유자, 보존 경로를 검사합니다. 실제 READ/WRITE와 파일 수명 주기도 인라인 Copy로 검증합니다.
DriverPnpScenarioTests.cpp는 JSON/네이티브 검증 일치, 필수 초기 사실, ID/개수 제한, 필드 조합, 최종 버스 상태, nullable 관측 보고서를 검증합니다. KernelPnpDeviceTests.cpp, KernelPnpRequestTests.cpp, KernelPnpCompletionTests.cpp는 제공자 소유권, AddDevice 성공/실패/누수, 초기 IRP, 파일 허용, 상태 롤백, 지연 완료, MPR/중첩/대기 continuation, 실패 원자성을 검증합니다. 원본 실제 WDK driver_wdm_pnp.c는 선택적 NEVERD_WDM_PNP_FIXTURE/NEVERD_WDM_PNP_CFG_FIXTURE를 사용합니다. DriverWDMPnpTests.cpp는 일반/활성 CFG 재배치 이미지에서 AddDevice, 파일 I/O, 순서 있는 제거, 지연 시작/제거, 시작/query 실패, 누수 유무에 따른 AddDevice 실패를 실행합니다. 산출물 누락은 명시적으로 건너뜁니다. 실행 근거는 Linux에 한정되며 문서화한 리소스 없는 PnP 부분집합만 입증합니다. DriverScenarioPublicTests.cpp는 일반/활성 CFG 이미지의 7개 요청 지연 PnP 보고서를 C API와 CLI로도 검증합니다.
V9 schema 테스트는 여덟 부 기능 이름의 왕복과 공유 최종 상태 검증을 확인하고 QueryStop 0x119를 이미지 로딩 전에 거부합니다. 확장 모델/실제 픽스처는 query-stop 롤백, cancel-stop, 중지/재시작, 갑작스러운 제거, 정확한 성공 상태, 중지/제거 대기 소프트웨어 I/O, 제거 후 게스트 거부, 장치 식별자와 혼합 AddDevice 결과를 검증합니다. DriverScenarioPublicTests.cpp는 일반/활성 CFG 픽스처에서 16개 요청을 C API 및 CLI로 실행해 소프트웨어 IOCTL 성공 바이트, 제거 후 게스트 실패, 최종 cleanup/close/remove를 보존합니다. 공개 실행은 순차적이므로 현재 생산자가 없는 보류 IRP를 나중 start/cleanup 요청으로 해제할 수 없습니다. Remove 종료 조건은 프로필 경계이며 일반 Windows I/O 허용 정책이 아닙니다. 근거는 Linux에 한정됩니다.
KernelRemoveLocksTests.cpp는 독립 소유권, NULL/중복 Tag, retail/DBG 크기, 즉시/지연 drain, 실패한 획득의 의무, 원자성, 용량 및 퇴역을 검증합니다. KernelRemoveLockBridgeTests.cpp는 연결 전 초기화, 확장부 범위, 불투명 영역, IRQL 및 위험한 Delete/Detach의 변경 전 거부를 검사합니다. 실제 driver_wdm_remove_lock.c의 retail/DBG와 일반/active-CFG4종은 NEVERD_WDM_REMOVE_LOCK_FIXTURE, NEVERD_WDM_REMOVE_LOCK_CFG_FIXTURE, NEVERD_WDM_REMOVE_LOCK_DBG_FIXTURE, NEVERD_WDM_REMOVE_LOCK_DBG_CFG_FIXTURE로 지정합니다. DriverWDMRemoveLockTests.cpp는 패킷 퇴역 후 release, drain 이후 버스 완료, 콜백 반환 전 준비, 워커 대기 및 깨끗한 AddDevice 실패를 확인합니다. C API/CLI는 기존 PnP 스키마로 수신/완료/최종 제거를 구분합니다. 산출물 부재는 명시적으로 건너뛰며 Linux 증거는 완전한 Driver Verifier나 일반 동시 drain을 의미하지 않습니다.
DriverPowerScenarioTests.cpp는 필수 전원 사실, JSON/네이티브 일치, 불투명32비트 context, FIFO 제한 및 독립 자식 보고를 검증합니다. KernelPowerRequestTests.cpp와 KernelPowerCompletionTests.cpp는 패킷 배치, 경로 플래그, 수명과 알림 상태 구분, FIFO 매칭, 최종 콜백 소유권, MPR, 대기 및 해제 경계를 검사합니다. 정품 WDK의 자체 driver_wdm_power.c는 선택적 NEVERD_WDM_POWER_FIXTURE/NEVERD_WDM_POWER_CFG_FIXTURE를 사용합니다. DriverWDMPowerTests.cpp는 일반/active-CFG 재배치, 직접/중첩 Query/Set, 독립 지연 완료, S0가 D0보다 먼저 완료되는 순서, 대기를 넘는5인수 스냅샷, 워커 출처 자식, null 콜백, query 거부, PDO별 초기값/FIFO 및 누락 사실 실패를 확인합니다. DriverScenarioPublicTests.cpp는 잘못된 입력 사전 검사와 C API/CLI의6시나리오/3자식 절전·복귀를 추가합니다. 산출물이 없으면 명시적으로 건너뛰며 Linux 실행 증거는 문서화된 페이지 가능·리소스 없는 전원 부분집합에 한정됩니다.
KernelUsbIdleTests.cpp는 소유권·D2·대여·첫 원인, KernelUsbIdleBridgeTests.cpp/KernelUsbIdleReceiptTests.cpp는 실제 IRP·취소·복합 용량·수신/완료 순서, DriverUsbIdleScenarioTests.cpp는 입력과 보고를 검증합니다. DriverWdmUsbIdleTests.cpp는 실제 driver_wdm_usb_idle.c와 NEVERD_WDM_USB_IDLE_FIXTURE/NEVERD_WDM_USB_IDLE_CFG_FIXTURE로 idle, D0/D3, 취소, 깨우기, 재등록/재시작, 독립/복합 기능 및 PDO/FDO 경로를 검사합니다. DriverWdmUsbIdlePublicTests.cpp의 USB 시나리오는 C API/CLI, 일반/active-CFG, 선호/재배치를 다루며 아티팩트가 없으면 명시적으로 건너뜁니다. 실행 증거는 Linux만 해당하며 KMDF USB 지원을 뜻하지 않습니다.
KernelFrameworkUsbIdleTests.cpp, KernelFrameworkUsbIdleStorageTests.cpp, KernelFrameworkUsbIdleBridgeTests.cpp는 정책·실제 저장·형식화된 스케줄링을 검사합니다. 실제 driver_kmdf_usb_idle.c는 USB idle IRP를 직접 보내지 않습니다. DriverKMDFUsbIdleTests.cpp는 허가 없음, 관리 I/O와 지연 D2/D0, 콜백 전/중 StopIdle, arm 실패, Maximum 능력, 원격 깨우기와 복합 구성원을 검사합니다. DriverKMDFUsbIdlePublicTests.cpp는 KMDF USB 시나리오를 NEVERD_KMDF_USB_IDLE_FIXTURE/NEVERD_KMDF_USB_IDLE_CFG_FIXTURE로 C API/CLI, 일반/active-CFG, 선호/재배치 실행합니다. 누락은 명시적으로 건너뛰며 실행 증거는 Linux뿐입니다. 모델 테스트는 wake-arm 콜백 성공 후 할당이 고갈되어도 실제 disarm과 WAIT_WAKE 취소를 수행하고 D2 응답을 소비하지 않는지 확인합니다.
DriverKMDFUsbPoFxTests.cpp는 초기 SystemManaged/WithHint, 별도 PoFx/USB 허가, D0 취소, 지연 D2/D0와 실제 worker F0 응답, StopIdle, READ 이전 깨우기 복구, arm 실패, 제거와 재시작을 검사합니다. DriverKMDFUsbPoFxPublicTests.cpp는 USB PoFx 시나리오를 C API/CLI, 두 모드, 일반/active-CFG, 기본/재배치에서 실행합니다. DriverKMDFUsbIdleTests.cpp는 전달 회귀를 보존하고 직접 READ의 D0Entry 이후 전달을 확인합니다. KernelFrameworkRequestTests.cpp는 매핑, caller-context 소유권, 수동/중지 큐와 IRQL을 검사합니다. 할당 고갈과 독립 게이트는 모델 브리지 테스트가 증명하며 실제 fixture는 arena를 고갈시키지 않습니다. 누락 fixture는 명시적으로 건너뛰고 실행 증거는 Linux뿐입니다. KernelFrameworkUsbPoFxBridge.RemovalPowerUpFailureAcknowledgesRequiredWithoutReleasingIdleWait는 RemovePending 중 실제 D0Entry 실패를 따로 검사합니다. 정확한 Required 응답과 quiesce로 F0/ActiveCondition 없이 정리하며 일반 SET_POWER 실패나 자체 surprise removal 지원을 뜻하지 않습니다.
KernelPowerCompletionTests.cpp, KernelProviderWaitWakeTests.cpp, KernelWdmWakeEventTests.cpp, DriverWdmWaitWakeTests.cpp: 네이티브 WAIT_WAKE 시나리오는 실제 WDK driver_wdm_wait_wake.c를 NEVERD_WDM_WAIT_WAKE_FIXTURE/NEVERD_WDM_WAIT_WAKE_CFG_FIXTURE로 실행합니다. START 발행, 인수, 자동 D0 없는 깨우기, 재발행, 취소, MPR, DPC 취소 후 작업자 D0, 정확한 이벤트 캡처 및 독립 공급자를 검사합니다. 일반/active-CFG 및 선호/재배치 주소 실행 증거는 Linux에 한정되고 파일 부재는 명시적으로 건너뜁니다.
KernelPowerCompletionTests.cpp는 APC/DPC 승인, 용량 실패의 원자적 재시도, 공급자만 있는 동기/지연 및 콜백 유무, 캡처 경로와 MPR을 검사합니다. 실제 DriverWdmWaitWakeTests.cpp는 DPC 취소 콜백의 직접 D0, APC/DPC Query/Set, IRQL/CR8 유지, 호출 반환 후 PASSIVE 실행, 상승 IRQL WAIT_WAKE 거부를 검사합니다. 상승 IRQL 시나리오는 DriverWdmWaitWakePublicTests.cpp에서 C API/CLI, 일반/active-CFG, 선호/재배치를 실행하며 증거는 Linux만 해당합니다.
DriverResourceScenarioTests.cpp는 JSON/네이티브 명시 사실, 정수 폭, 개수, 물리/레지스터 중첩, 정렬, ID, 빈 뱅크와 설정 직렬화를 검사합니다. KernelMMIOTests.cpp, KernelMMIOFailureTests.cpp, KernelResourceBridgeTests.cpp, UnicornMMIOTests.cpp는 뱅크/매핑 소유권, 별칭, 세대, packed 목록 수명, 제공자 시점, 재시작 값 보존, 갑작스러운 제거/전원 접근성, 정확한 CPU/API 트랜잭션과 실패 원자성을 검증합니다. 자체 정품 WDK driver_wdm_resources.c는 NEVERD_WDM_RESOURCE_FIXTURE/NEVERD_WDM_RESOURCE_CFG_FIXTURE를 사용합니다. DriverWDMResourceTests.cpp는 실제 스칼라/REP 접근자, 일반/active-CFG 재배치, 하위 구간 별칭, 페이지 끝 매핑, STOP/재시작과 잘못된 접근을 실행합니다. C API/CLI는 이미지 로드 전에 잘못된 사실을 거부하고 동일한14요청 재시작 시나리오에서 유지된 IOCTL 출력과 정확한 map/unmap 횟수를 확인합니다. 공통 driver-register-bank-scenario.json에는 이 fixture의 레지스터/IOCTL 프로토콜이 필요합니다. 산출물 누락은 명시적으로 건너뛰며 증거는 Linux에 한정됩니다. 호스트 물리 메모리나 일반 장치 백엔드는 실행하지 않습니다.
DriverDMAScenarioTests.cpp는 명시적 기능, 논리 도메인, 바이트/개수/시간 제한, 엄격한 이벤트 방향, 설정/관측 분리를 검증합니다. KernelPhysicalMemoryTests.cpp와 BackendBackingTests.cpp는 공유 페이지 할당 경계, 고정 참조, CPU 권한 불변, MMIO/재진입 배제, 전체 범위 검증 실패 원자성을 확인하며 KernelRequestMDLTests.cpp는 구성된 설명자 별칭이 같은 물리 식별자를 사용하는지 검사합니다. KernelDMATests.cpp, KernelDMABridgeTests.cpp, SchedulerDMATests.cpp는 실제 RAM 바이트, 어댑터 연결 테이블 호출, 인라인/대기 FIFO 소유권, 별개인 콜백/매핑 수명, 페이지 조각, 잘못된 방향, 해제 사전 검증, 독립 PDO 도메인, 세대/전원 실패를 실행합니다. 직접 작성한 실제 WDK fixture driver_wdm_dma.c는 NEVERD_WDM_DMA_FIXTURE/NEVERD_WDM_DMA_CFG_FIXTURE를 사용합니다. DriverWDMDMATests.cpp와 C API/CLI는 실제 어댑터 포인터, 공통/SG 저장소, 별도로 설정한 DMA/인터럽트 이벤트를 실행합니다. 공유 driver-dma-scenario.json은 이 fixture 프로토콜이 필요합니다. 산출물이 없으면 명시적으로 건너뜁니다. 실행 증거는 Linux에 한정되며 실제 호스트 DMA, PCI, 일반 장치 엔진을 보장하지 않습니다. pluginsdk/python/tests/test_driver_dma_integration.py는 NEVERD_TEST_LIBNEVERD, NEVERD_TEST_WDM_DMA_FIXTURE, NEVERD_TEST_WDM_DMA_CFG_FIXTURE로 기존 소유 JSON 바인딩을 실행하여 바이트, 콜백 순서, 보고된 실패를 검증합니다.
KernelSEHTests.cpp는 순수 스택 해제 계획, 범위 순서, 비휘발성 GPR 복원, 제한된 스택 및 명시적 미지원 메타데이터를 검사합니다. KernelExceptionTests.cpp는 정확한 API 인수 수, 하위 32비트 상태, 형식화된 예외, IRQL 상한과 변하지 않는 모델/CPU 상태를 확인합니다. 실제 WDK /GS- driver_wdm_seh.c는 선택적 NEVERD_WDM_SEH_FIXTURE/NEVERD_WDM_SEH_CFG_FIXTURE를 사용합니다. DriverWDMSEHTests.cpp는 일반/활성 CFG/재배치 이미지에서 직접 또는 헬퍼를 통한 예외, 중첩 처리기, 재발생, 실제 필터, 스택 해제 finally, 검색 순서, 안정적인 예외 레코드, 지원하는 CPU 오류의 후속 실행과 전체 CPU 상태 복원을 검사합니다. 중첩 필터와 충돌한 finally는 연결된 논리 스택을 사용하며 관련 없는 CPU 오류는 명시적으로 거부합니다. C API/CLI는 driver-seh-scenario.json을 실행해 null API 결과와 실제 게스트 처리기 메시지를 검증합니다. pluginsdk/python/tests/test_driver_seh_integration.py는 NEVERD_TEST_LIBNEVERD, NEVERD_TEST_WDM_SEH_FIXTURE, NEVERD_TEST_WDM_SEH_CFG_FIXTURE를 사용합니다. 외부 이미지가 없으면 명시적으로 건너뛰며 증거는 Linux에 한정되고 사용자 버퍼나 일반 SEH 지원을 입증하지 않습니다.
KernelDMAChannelTests.cpp, KernelDMAChannelBridgeTests.cpp, 공유 SchedulerDMATests.cpp는 혼합 할당 FIFO, 콜백 반환 폭, 순수 수용/해제 검증, 레지스터 재사용, 연속 페이지 조각, 작업 전체 플러시, CurrentIrp 스냅샷과 패킷/MDL/장치 수명을 확인합니다. 직접 작성하고 실제 WDK로 빌드한 driver_wdm_dma_channel.c는 선택적 NEVERD_WDM_DMA_CHANNEL_FIXTURE/NEVERD_WDM_DMA_CHANNEL_CFG_FIXTURE를 사용합니다. DriverWDMDMAChannelTests.cpp는 일반/활성 CFG/재배치 드라이버로 실제 MapTransfer 및 FlushAdapterBuffers 호출, 공통/SG/채널 공유 할당량, 명시적 장치 트랜잭션, IRQ/DPC 완료, 순차 작업, 두 PDO와 실패 사례를 실행합니다. C API/CLI는 두 매핑 조각 전체를 가로지르는 단일 트랜잭션을 포함하여 7개 요청의 driver-dma-channel-scenario.json을 실행합니다. pluginsdk/python/tests/test_driver_dma_channel_integration.py는 NEVERD_TEST_LIBNEVERD, NEVERD_TEST_WDM_DMA_CHANNEL_FIXTURE, NEVERD_TEST_WDM_DMA_CHANNEL_CFG_FIXTURE로 같은 공개 JSON 인터페이스를 사용합니다. 산출물이 없으면 명시적으로 건너뛰며 Linux 증거는 시스템 DMA 컨트롤러나 임의 HAL 매핑/플러시 패턴의 지원을 입증하지 않습니다.
DriverInterruptScenarioTests.cpp는 명시적 raw/변환 설명자, 혼합 및 인터럽트 전용 할당, 엄격한 이벤트 필드/개수, 원본 식별자와 독립 BOOLEAN 관측을 검증합니다. KernelInterruptsTests.cpp, KernelInterruptBridgeTests.cpp, SchedulerInterruptTests.cpp는 독점 튜플 일치, 불투명 토큰, 세대/연결 캡처, 이벤트 수명, 선택한 Ex 필드만 읽기, 같은 잠금과 IRQL 복원, 콜백 소유권, 같은 시각 ISR 우선순위와 변경 전 용량 실패를 검증합니다. KernelFrameworkRequestTests.cpp는 호출을 공개하거나 참조를 소비하지 않는 순수 취소 사전 검증 및 일괄 토큰 용량을 확인합니다. 실제 WDK로 빌드하는 자체 fixture driver_wdm_interrupts.c는 NEVERD_WDM_INTERRUPT_FIXTURE / NEVERD_WDM_INTERRUPT_CFG_FIXTURE를 사용합니다. DriverWDMInterruptTests.cpp는 일반/active-CFG 재배치, 기존 11인수 ABI, Ex 버전 1/2/4, 실제 ISR→DPC 완료, AL 하위의 FALSE, 동기화/수동 잠금, 독립 PDO, 재시작 세대와 잘못된 하드웨어 사실을 실행합니다. C API/CLI 테스트는 이미지 로드 전에 잘못된 선언을 거부하고 7개 요청의 driver-interrupt-scenario.json을 실행해 대기 IOCTL 바이트와 별도 전달 관측을 확인합니다. 이미지 누락은 명시적으로 건너뜁니다. 실행 증거는 Linux에 한정되며 공유/레벨/MSI 인터럽트나 명령어 단위 선점을 입증하지 않습니다.
DriverGuardTests.cpp와 네 가지 원본 driver_guard.c 변형은 활성/비활성 CFG, 기준 주소 재배치, check/dispatch ABI와 잘못된 대상을 검증합니다. KernelFrameworkTests.cpp, KernelFrameworkControlTests.cpp, KernelFrameworkQueueTests.cpp, KernelFrameworkRequestTests.cpp는 바인딩, 실패 시 롤백되는 장치 생성, 큐 라우팅, 논리적 버퍼 길이와 정리 순서와 IRP/컨텍스트 수명을 검증합니다. 원본 driver_kmdf_lifecycle.c와 driver_kmdf_control.c는 실제 WDK 1.33 헤더로 선택적으로 컴파일하고 진짜 FxDriverEntry 라이브러리를 통해 링크합니다. CMake 캐시 경로에서 수명 주기 이미지에는 NEVERD_KMDF_FIXTURE / NEVERD_KMDF_CFG_FIXTURE를, 일반 및 활성 CFG 제어 장치 이미지에는 NEVERD_KMDF_CONTROL_FIXTURE / NEVERD_KMDF_CONTROL_CFG_FIXTURE를 지정합니다. 외부 산출물이 없으면 명시적으로 건너뜁니다. DriverKMDFLifecycleTests.cpp, DriverKMDFControlTests.cpp와 DriverScenarioPublicTests.cpp의 C API/CLI 사례는 실제 콜백, 버퍼/직접 I/O, 작업 항목을 통한 대기 요청 완료, 실패 상태, 언로드와 재배치된 CFG 실행을 검증합니다. 실행 증거는 Linux에 한정되며 완전한 KMDF나 PnP/전원 관리 지원을 입증하지 않습니다.
이전 취소 API 테스트는 취소, 중첩 정리와 최종 파괴까지 API 연속 실행을 유지합니다. 이미 취소된 요청에서 Ex는 계속 콜백 없이 취소 상태를 반환합니다. KernelFrameworkRequestAccessorTests.cpp와 KernelRequestMDLTests.cpp는 공유 64비트 Information, 완료 시 길이 검증, 원래 큐/IRP 식별, NULL WDF 파일 핸들, 유지된 핸들의 getter 결과, 버퍼 MDL 캐시와 첫 방향 ByteCount, 직접 설명자 식별과 지연 매핑, 완료 시 무효화 및 WDM 완료 우회 거부를 검증합니다. 실제 제어 장치 fixture의 L, M, D, C 모드는 일반/활성 CFG 이미지에서 이전 API를 통한 취소, 버퍼 MDL/정보, 직접 READ/WRITE MDL과 완료 후 접근을 실행합니다.
취소 테스트는 전송 요청에만 허용되는 가상 기한과 보고서 필드, 완료 우선 및 이미 취소된 경로, 표시/해제 결과, 큐 등록과 전달 완료 상태의 완료 권한, 콜백 대기와 내부 참조 수명을 검증합니다. 스케줄러 테스트는 DPC/취소/작업 항목 순서, 용량, 식별자 분리와 중단/복원을 독립적으로 검증합니다. WDM 취소는 여전히 명시적 모델 오류입니다.
add_neverd_unittest는 GoogleTest 실행 파일 하나를 만들고 발견한 각 사례에 실행
target 이름과 같은 CTest label을 지정합니다.
| 소스 영역 | Target 및 CTest label | 범위 |
|---|---|---|
unittests/TestProcessTests.cpp |
NeverDTestProcessTests |
교차 플랫폼 하위 프로세스 호출, quoting, redirect, 종료 코드 |
unittests/libc |
NeverDLibCTests |
알려진 libc 이름과 분류 |
unittests/safety |
NeverDSafetyTests, NeverDSafetyIntegrationTests |
싱크 카탈로그, 신원 우선순위, 인수 사전 필터, 복사 오버플로 헌트, 힙 수명 감사, 필수 PE/ELF/Mach-O × x86-64/AArch64 6셀 매트릭스 |
unittests/lift |
NeverDLiftTests |
Decoder/lifter LowIR 모양, IR 단계, loader, relocation, 포맷 fixture, 디컴파일, 대표 patch 흐름 |
unittests/semantic의 대부분 파일 |
NeverDSemanticTests |
명령어, ABI, 제어 흐름, C 표현식, lift/recompile 차등 의미론 |
unittests/evm |
NeverDEVMOpcodeTests, NeverDEVMBytecodeTests, NeverDEVMLoaderTests, NeverDEVMABITests, NeverDEVMAnalyzerTests, NeverDEVMDecoderPropertyTests, NeverDEVMProxyTests, NeverDEVMCallTests, NeverDEVMSemanticTests, NeverDEVMEmitterTests, NeverDEVMIntegrationTests |
hardfork metadata, input normalization, ABI/signature ambiguity, CFG/SSA/recovery, decoder boundary 전수 검사와 hostile input, proxy/call fact, interpreter semantics, LLVM/C/Solidity differential execution, public API routing |
unittests/sbf |
NeverDSBFMetadataTests, NeverDSBFProgramImageTests, NeverDSBFLoaderTests, NeverDSBFAnalyzerTests, NeverDSBFVerifierTests, NeverDSBFISAConformanceTests, NeverDSBFAgaveConformanceTests, NeverDSBFSemanticTests, NeverDSBFEmitterTests, NeverDSBFLLVMEmitterTests, NeverDSBFLLVMDifferentialTests, NeverDSBFSourceDifferentialTests, NeverDSBFMalformedCorpusTests, NeverDSBFUpstreamConformanceTests, NeverDSBFExternalOracleTests, NeverDSBFSolanaModelTests, NeverDSBFIntegrationTests |
v0-v4 메타데이터와 ELF 레이아웃, 엄격한 verifier/loader 동작, 고정된 ELF 아티팩트 23개, 독립 official oracle, 모든 opcode 가용성, 적대적 입력, CFG/복원, 실행된 LLVM/C/Rust 차분 |
PatchFullSubstRTTests.cpp |
NeverDPatchFullTests |
네 ISA×세 object 포맷 재작성/난독화 동등성 |
unittests/semantic의 집중 변환 파일 |
NeverDSwitchXformTests, NeverDIndCallXformTests, NeverDCFGLoopXformTests, NeverDTwoTableXformTests, NeverDAvxUpperXformTests |
큰 의미론 바이너리에서 분리한 빠른 재링크 probe |
unittests/corpus(submodule) |
NeverDWindowsEHCorpusTests, NeverDRustEHCorpusTests, NeverDGoEHCorpusTests, NeverDCxxItaniumEHCorpusTests, NeverDObjCEHCorpusTests, NeverDAdaDEHCorpusTests |
pin 된 실제 바이너리 545개에서 읽어내는 예외 및 런타임 metadata. 각 바이너리는 manifest에 복원이 넘어야 할 하한을 선언한다 |
등록의 기준은
unittests/CMakeLists.txt,
unittests/lift/CMakeLists.txt,
unittests/semantic/CMakeLists.txt,
unittests/evm/CMakeLists.txt,
unittests/sbf/CMakeLists.txt,
unittests/safety/CMakeLists.txt입니다.
다른 모든 스위트는 테스트 대상을 직접 빌드하지만 corpus는 그렇지 않습니다. 이것은
실제 툴체인이 이 저장소가 닿을 수 없는 호스트에서, 닿을 수 없는 타깃을 대상으로
만들어낸 바이너리들의 submodule이며, 각 파일은 다이제스트로 pin 되고 옆의 manifest가
그 복원이 넘어야 할 하한을 선언합니다. "-O2로 strip 된 armv7 공유 오브젝트에서
NeverD가 무엇을 읽어내는가" 같은 물음에 논쟁이 아니라 답을 줄 수 있는 곳은 여기뿐
입니다.
이 스위트들은 configure가 그것들을 찾도록 지시받았을 때에만 빌드되므로, 이 플래그가 곧 그것들이 테스트되고 있는지의 전부입니다.
cmake -S . -B build-corpus -G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_TESTING=ON \
-DNEVERD_ENABLE_BINARY_CORPUS_TESTS=ON
cmake --build build-corpus --target check-neverd-corpus --parallel 4check-neverd-corpus는 모든 라인을, check-neverd-windows-eh-corpus,
check-neverd-rust-eh-corpus, check-neverd-go-eh-corpus,
check-neverd-cxx-itanium-eh-corpus, check-neverd-objc-eh-corpus, check-neverd-ada-d-eh-corpus는 각각 한 라인을
실행합니다. CI의 세 호스트 모두 이 플래그로 configure 하고 여섯 라인을 전부
실행합니다. 바이트는 어디서나 같지만 그것을 읽는 쪽은 같지 않으며, 한 호스트에서의
corpus 실행은 나머지 두 호스트에 대해 아무것도 증명하지 않습니다.
scripts/audit_ci_test_inventory.py는 여섯 label 중 하나라도 빠진 inventory를
거부합니다. corpus를 조용히 읽지 않게 된 빌드는 어떤 테스트도 잡을 수 없는
회귀이기 때문입니다. 사라진 것이 바로 그 테스트입니다.
live EVM opcode audit는 다음 명령으로 실행합니다.
python3 scripts/audit_evm_opcode_metadata.pypublic CLI가 받는 유일한 option은 --manifest-output이며 remote/ref/toolchain override를 제공하지
않습니다. 출력 manifest의 closed contract는 schema 3입니다.
로컬과 CI의 표준 경로는 공식 https://github.com/ethereum/go-ethereum.git에
git fetch --depth=1 --force를 실행해 default
branch의 remote HEAD에서 방금 얻은 정확한 SHA만 detached worktree에서 검사합니다.
실행마다 예측할 수 없는 이름의 private temporary bare repository를 쓰고, official fetch의
authority ref와 exact SHA를 detached worktree 수명 동안 유지한 뒤 repository와 worktree를 함께
폐기합니다. shared persistent Git repository나 cache는 없습니다. local_docs,
기존 checkout, submodule은 감사 경로가 아니며, pin된 submodule은 live drift를 찾아야 할 때
낡습니다.
각 Git command는 상속된 GIT_*를 먼저 전부 지우고(GIT_CONFIG_* 포함), 검토한 값만
설정합니다. GIT_CONFIG_NOSYSTEM과 GIT_CONFIG_GLOBAL은 system/global config를,
GIT_ATTR_NOSYSTEM과 command scope의 core.attributesFile은 system/global attributes를,
core.hooksPath는 hooks를 끕니다. 예상 밖 private-repository config, graft,
objects/info/alternates, refs/replace는 검증을 실패시키고,
GIT_NO_REPLACE_OBJECTS도 replacement lookup을 비활성화합니다.
probe는 params.Rules가 export한 모든 bool field를 반사하고 각 fork에서
LookupInstructionSet(params.Rules)를 호출해 256 byte slot 전부를 스캔합니다.
EVMUpstreamOpcodePolicy.def는 typed historical/unscheduled-EOF exclusion과 alias를,
EVMUpstreamSemanticsPolicy.def는 closed Rules inventory, fork mapping, base-stack exception,
EIP-8024 dynamic opcode family 선언을 각각 소유합니다.
CI는 dev push, pull request, manual dispatch, daily schedule에서만 같은 live audit를
실행합니다. Go probe는 매핑된 각 fork에서 공개 LookupInstructionSet(params.Rules) API를
호출합니다. EVMUpstreamOpcodePolicy.def는 name alias와 검토된 historical/unscheduled-EOF
exclusion을, 직교하는 EVMUpstreamSemanticsPolicy.def는 fork rule, stack semantics 예외,
EIP-8024 dynamic opcode family의 membership/activation을 소유합니다. closed manifest는 정확한 revision, fork activation, byte/name,
base_min_stack, net_stack_delta를 검사하며 알 수 없거나 중복된 field, fork, name, byte를
거부합니다. allocation은 operation.undefined만으로 판정하고 HasCost는 defined zero-cost
operation에도 false이므로 cost cross-check로만 씁니다. 모든 defined && !HasCost slot은
선언된 fork부터 EVM_GETH_ACTIVE_WITHOUT_COST와 정확히 일치해야 합니다. cost가 있는 undefined
slot, 검토하지 않은 defined slot, marker 소실은 fail closed입니다.
CI 실패 시 정확한 revision, manifest, log가 artifact로 올라갑니다. parser와
drift diagnostic에는 독립적인 Python unit coverage가 있습니다.
EVMUpstreamSemanticsPolicy.def는 export된 boolean params.Rules field마다 정확히 하나의
EVM_GETH_RULE_FIELD를 두고 MappedForkSelector, NoOpcodeAllocation,
ExcludedSelectorExpectedError로 분류합니다. probe는 field 하나만 켜서 LookupInstructionSet을
호출합니다. 앞의 두 category는 nil error, 세 번째는 error여야 하며 반환된 전체 256-slot
opcode/stack fingerprint는 ExpectedFork와 일치해야 합니다. 현재 IsEIP155, IsEIP2929,
IsEIP4762, IsPetersburg는 Frontier fingerprint인 no-allocation fields이고, IsUBT는 error와
Cancun fingerprint가 기대값입니다.
EVMEIP8024Immediates.def는 계속해서 single/pair의 각 byte에 대한 immediate semantics의 유일한
authority이며, 각각 256개 byte 전부를 명시적으로 분류합니다. production은 직접 lookup합니다.
live audit는 go -overlay로 core/vm에 virtual wrapper를 주입해 실제 private
operation.execute handler를 얻고, active table/family마다 DUPN, SWAPN, EXCHANGE의
3x256 candidates와 3 missing-operand cases를 실행합니다. acceptance, PC delta,
marker-derived operand/stack mutation, valid case의 정확한 underflow, operand 누락 시 0x00을
확인하며 Python은 formula를 다시 쓰지 않고 같은 .def와 비교합니다.
EVM_HARDFORK_LATEST의 canonical target은 하나뿐입니다. closed
EVMUpstreamForkAliases.def는 Prague→Pectra, Osaka와 BPO1~BPO5→Fusaka,
Paris/Shanghai/Cancun/Amsterdam/Bogota→자기 자신을 정의하며 알 수 없는 이름은 fail
closed입니다. 기록된 하나의 audit_unix_time으로 MainnetChainConfig.LatestFork(time)
(NeverD latest와 일치해야 함)와 LatestFork(max uint64)의 alias/probed canonical fork를
검사합니다. probe는 실제 canonical fork jump tables와 mainnet active/scheduled jump tables를
열거해 table별로 완전 비교하고 dynamic family 또는 fork의 inactive 상태도 명시적으로
기록합니다. table/family/probe의 일부만 얻은 partial result는 받지 않고 fail closed입니다.
manifest는 authority=official-fresh-fetch, 공식 URL,
요청한 HEAD, SHA를 고정합니다. public CLI에 remote/ref/toolchain bypass는 없고 probe는
GOTOOLCHAIN=local을 사용합니다.
Go request/response와 Python controller는 hostile metadata를 allocate하기 전에
input/collection/string hard limits를 적용하고 한도를 넘는 input, array, string을 fail
closed합니다. 별도로 bounded diagnostic output을 강제하여 너무 긴 display에 full-content
digest와 explicit truncated marker를 포함합니다. 모든 command에는 bounded child output과
공통 deadline이 적용되며 timeout 또는 output-limit 위반은 전체 process group과 하위
process tree를 kill하고 pipe를 drain합니다. 모든 .def parser는 unparsed, unknown, duplicate, missing,
out-of-range entry를 거부하고 fail closed합니다.
현재 schema-3 live receipt는 schema_version=3, audit_unix_time=1787534659,
authority=official-fresh-fetch, remote=https://github.com/ethereum/go-ethereum.git,
ref=HEAD, revision 02b73d4ea7181464175e0a6cbecc0a3a2655a562, local Go 1.24.0,
stack_limit=1024, diagnostics=[]를 기록합니다. 21 fork tables와 20 Rules probes를
다루며 분류는 15 mapped/4 no-op/1 expected-error입니다. 두 mainnet active/scheduled
record는 모두 upstream BPO2를 보고하며 closed map으로 NeverD Fusaka에 대응됩니다.
EIP-8024의 23 table targets 가운데 Amsterdam/Bogota만 active이며
1536 candidate executions와 6 missing-operand cases를 생성합니다. three handler symbols는
두 active target에서 일치합니다. Python audit는 67/67, C++ Opcode 10/10입니다. macOS 실제
run은 sandbox-exec 안에서 성공했고 마지막 go run은 offline이었습니다. Linux workflow는
bubblewrap을 강제합니다.
모든 Go stage인 go env, go mod init, go mod edit, go mod tidy, go mod download,
go run은 capability-root filesystem sandbox를 통과해야 합니다. read capability에는 private
probe, fresh geth, 검증된 resolved GOROOT, 필요한 system runtime root의 정확한 집합만 포함되고
isolated environment root만 쓸 수 있습니다. network는 필요한 dependency stage에만 허용되며 final
run은 offline입니다. test는 host HOME/workspace에 sentinel을 놓고 접근이 거부되며 어떤 output에도
그 내용이 나타나지 않음을 요구합니다. Linux는 / broad bind가 없는 동형의 bubblewrap policy를
검증합니다.
python3 -m unittest -v scripts.tests.test_audit_evm_opcode_metadataCMake에 등록된 EVM test target 11개는 다음과 같습니다.
NeverDEVMOpcodeTests
NeverDEVMBytecodeTests
NeverDEVMLoaderTests
NeverDEVMABITests
NeverDEVMAnalyzerTests
NeverDEVMDecoderPropertyTests
NeverDEVMProxyTests
NeverDEVMCallTests
NeverDEVMSemanticTests
NeverDEVMEmitterTests
NeverDEVMIntegrationTests
NeverDEVMDecoderPropertyTests는 decoder가 달라지는 각 fork의 모든 2-byte input에 대해
완전한 decode와 정확한 JUMPDEST boundary를 비교하고, 길이가 제한된 결정적 hostile input을
모든 fork에 통과시킵니다.
EVM control-flow 변경에서는 fixed-point 및 height-domain contract를 먼저 실행합니다.
cmake --build build --target NeverDEVMAnalyzerTests --parallel 4
build/bin/NeverDEVMAnalyzerTests \
--gtest_filter='EVMAnalyzer.StackHeightDomain*:EVMAnalyzer.WholeProgram*'이 case들은 block을 가로지르는 internal return, finite multi-target merge, loop convergence,
deterministic edge ordering, path-sensitive whole-stack lane, correlation preservation, unknown
jump, exact invalid target, fail-loud budget, strict/relaxed stack fault를 포함합니다.
MayReachable은 CFG candidate일 뿐 확정 semantic fact를 만들지 못합니다. 이어서 11개 EVM
target과 live upstream audit를 모두 실행하세요.
MedIR/HighIR dataflow 변경에서는 constant-phi, selector, typed-operand, malformed-graph, deep-chain contract도 실행합니다.
build/bin/NeverDEVMAnalyzerTests \
--gtest_filter='EVMAnalyzer.MediumIR*:EVMAnalyzer.HighIR*:EVMAnalyzer.*Selector*:EVMAnalyzer.*MedIR*:EVMAnalyzer.RecoversStorageAndEventFactsFromTypedOperands:EVMAnalyzer.RecoversComputedCalldataArgumentOffset:EVMAnalyzer.*Return*:EVMAnalyzer.*Receive*'이 case들은 equal/conflicting cyclic phi, 인접하지 않거나 block을 가로지르는 selector expression, 두 equality operand order, exact ABI width check, typed storage/event/calldata operand, malformed MedIR의 deterministic handling, 16,384-value iterative producer walk를 검증합니다.
unittests/lift/CMakeLists.txt는 빌드 중 C와 assembly 소스를 교차 컴파일합니다.
Clang target triple이 x86-64, i386, AArch64, ARM32 ELF object, PE/COFF object와
링크된 image, PIC/no-PIC Mach-O i386 object를 만듭니다. LLD가 있으면 선택한
object를 patch 테스트용 실행 파일로도 링크합니다. NeverDLiftTests는
lift-test-objects target에 의존하므로 일반적인 테스트 바이너리 빌드가 생성
fixture를 갱신합니다.
대부분의 lift 테스트는 NeverDLiftFixture.h로 빌드된 neverd CLI를 호출하고
LowIR, MedIR, HighIR, LLVM IR, 생성된 C 또는 재작성 바이너리를 검사합니다. 집중된
수동 실험은 NEVERD 환경 변수로 CLI 경로를 override할 수 있습니다. 일반 CTest는
CMake에 포함된 실행 파일을 사용합니다.
unittests/safety/fixtures/binaries에는 x86-64와 AArch64용 PE, ELF, Mach-O
이미지가 체크인되어 있으며, 각 포맷이 제공하는 PDB 또는 dSYM 동반 파일과 함께
이미지마다 링커 MAP이 하나씩 들어 있습니다. MAP은 strip된 빌드가 유일하게
남기는 신원 정보이므로, 각 셀은 MAP을 명시적으로 지정한 분석도 함께 수행하여
타입도 소스 줄 번호도 남지 않았을 때 발견이 무엇을 주장할 수 있는지 고정합니다.
NeverDSafetyIntegrationTests는 모든 호스트에서 여섯 셀을 전부 실행합니다.
필요한 이미지나 동반 파일이 없으면 구성 단계에서 실패하며, 호스트 툴체인에 따른
건너뛰기 경로는 없습니다.
여섯 개의 동등한 바이너리는 하나의 소스 파일에서 나옵니다. make는 호스트
네이티브 smoke fixture만 다시 만듭니다. 체크인된 전체 행렬을 재생성하려면 다음을
사용합니다.
make -C unittests/safety/fixtures matrix전체 재생성에는 Clang의 Linux/Windows 크로스 타깃, LLD의 COFF 도구, 두 Darwin
아키텍처, 그리고 dsymutil이 필요합니다. 디버그 경로는 재매핑되고 CodeView
명령줄 기록은 비활성화되므로, 체크인된 동반 파일이 개발자 작업 공간의 절대
경로를 담지 않습니다.
Windows 테이블 기반 예외를 변경할 때는 표현 테스트와 링크된 PE patch 테스트가 모두 필요합니다. 집중 lift-suite 필터는 정규화된 unwind/SEH/C++ 모델, 손상 입력 처리, 예외 CFG edge, HighIR, LLVM WinEH 생성, 예외 디렉터리 교체, Guard CF/EH continuation 재구성을 검사합니다.
cmake --build build --target NeverDLiftTests --parallel 4
build/bin/NeverDLiftTests \
--gtest_filter='COFFException*:*PatchCOFF_X64.ReconstructsGuardedSEHAndContinuationTable:*PatchCOFF_X64.ReconstructsNativeFH3StateGraph:*PatchCOFF_X64.RejectsInteriorExceptionDirectoryPadding:*PatchCOFF_X64.RebuildsSortedExceptionDirectoryInAppendedSection'보호된 x64 assembly fixture에는 Clang Windows target과 lld-link가 필요하며 CMake
link는 /guard:cf와 /guard:ehcont를 사용합니다. cross-linker 누락으로 인한 skip은
final-image 경로의 증거가 아닙니다. 통합 사례가 통과하면 다시 작성된 PE를 재로드할 수
있고 runtime-function, unwind, load-config, Guard CF, Guard EH continuation 테이블이
정렬되고 파일에 존재하며 실행 가능한 target만 가리킨다는 것을 입증합니다.
링크된 FH3 fixture는 고정 상태 테이블, HighC 주석, personality 보존, 생성된 catch target, 재로드한 IP-to-state 그래프로 네이티브 C++ closure를 독립적으로 검사합니다.
분석/네이티브 지원 표와 fail-closed patch 계약은 Windows 예외 재구성을 참조하십시오.
Windows 테이블 모델이 아닌 모든 것은 하나의 집중 target 에 모여 있습니다.
NeverDLanguageEHTests 는 DWARF 프레임 체인, Itanium 언어별 데이터 영역,
ARM EHABI, Darwin compact unwind, Go 런타임 프레임 메타데이터, Rust panic
기구, 그리고 세 가지 Objective-C 런타임을 다룹니다.
cmake --build build --target NeverDLanguageEHTests --parallel 4
build/bin/NeverDLanguageEHTests --gtest_filter='ObjC*'이 스위트의 테이블은 컴파일이 아니라 바이트 단위로 조립합니다. 검증하려는 조합
대부분은 단일 toolchain 이 한꺼번에 내보내지 않기 때문입니다. Objective-C 가
가장 분명한 사례입니다. 세 런타임 모두 Itanium LSDA 를 내보내고, 차이는 타입
테이블 슬롯에 무엇이 들어가는지 뿐이며, 그 차이는 정도가 아니라 전면적입니다.
Apple 의 슬롯은 objc_typeinfo 를 가리키며 그 첫 두 필드는 의도적으로
std::type_info 를 흉내 냅니다. GNUstep 의 Objective-C++ 슬롯은 진짜
std::type_info 파생 타입을 가리키고, GNU 런타임의 슬롯은 포인터조차 아닌
클래스 이름 문자열 그 자체입니다. 한 런타임의 규약을 다른 런타임의 테이블에
적용해도 실패하지 않습니다. 전혀 다른 것의 중간에서 읽어낸 클래스 이름을 보고할
뿐입니다. 그래서 슬롯을 읽기 전에 프레임의 personality 로 런타임을 먼저
확정합니다.
같은 스위트는 뭉뚱그리기 쉬우면서 뭉뚱그리면 틀리는 두 가지 구분도 고정합니다.
@catch(id) 와 @catch(...) 는 서로 다른 핸들러이며 — 앞의 것은 임의의
Objective-C 객체를 받고 외래 예외는 그 옆으로 지나가게 둡니다 — 런타임마다
표기가 다릅니다. 둘 다 catch-all 로 보고하는 디코더는 원래 지나쳤을 예외에
핸들러를 붙이는 셈입니다. 또한 setjmp/longjmp call-site 테이블은 주소가 아니라
호출 지점 색인을 담으므로, SJLJ personality 를 알아보지 못한 판독기는 오류를
내지 않고 프로그램이 지정한 적 없는 보호 구간과 landing pad 를 지어냅니다.
그 형식을 알아보는 것과 해독을 거부하는 것은 다릅니다. SJLJ 항목 하나는 ULEB128
한 쌍 — 디스패치 선택자와 action 오프셋 — 이며, 이 action 오프셋의 의미는 주소
형식에서와 완전히 같습니다. 따라서 action 체인도, catch 타입도, 예외 명세도, 코드를
전혀 가리키지 않는 표에서 그대로 읽어낼 수 있습니다. 읽어낼 수 없는 것은 각 항목이
지키는 구간뿐인데, 그것을 말해 주는 것은 함수가 자기 call-site 슬롯에 수행하는
저장이지 표 안의 무엇이 아니기 때문입니다. 이 스위트는 여기서 믿어서는 안 되는
바이트 하나도 못박습니다. call-site 인코딩으로 GCC 는 DW_EH_PE_uleb128 을,
LLVM 은 DW_EH_PE_udata4 를 적지만 둘 다 그 뒤로는 ULEB128 을 내보내며, 어떤
personality 도 그 바이트를 읽지 않습니다 — 그러니 디코더도 읽어서는 안 됩니다.
personality 의 정체도 함께 못박습니다. 위의 모든 표를 어떻게 읽을지 결정하는 것이
바로 그것이기 때문입니다. GNAT 은 GCC 가 모든 프런트엔드에 부여하는 세 가지 철자
— _v0, _sj0, _seh0 — 로 자기 루틴의 이름을 짓고, Windows 에서는 한 심벌을
등록하면서 다른 심벌로 전달하므로 네 가지 철자가 모두 Ada 로 귀착해야 합니다. D 는
그 거울상으로, 세 개의 컴파일러, 한 루틴에 대한 세 개의 이름, 그리고 그 뒤에 있는
것은 동일한 표입니다.
의미론 fixture는 텍스트 모양이 아니라 동작을 테스트합니다.
- 작은 C/assembly 사례를 작성하거나 LLVM IR을 구성합니다.
- Clang/LLVM으로 요청한 대상을 위해 컴파일합니다.
- 원래 machine code를 Unicorn에서 실행하고 예상 반환값이나 fixture가 정의한 상태를 캡처합니다.
- NeverD로 로드하고 lift하여 LLVM IR을 출력한 뒤 다시 machine code로 컴파일합니다.
- 같은 ABI, 입력, 메모리 배치, CPU 모델로 재생성 코드를 실행합니다.
- 관측 가능한 결과를 비교합니다.
주요 구현은
SemanticRoundTripFixture.h입니다.
patch-full fixture는 patch 작업과 같은 rewrite backend인
Codegen::compileForRewrite를 사용한 뒤 전체 4×3 ISA/포맷 grid에서 baseline과
변환 코드를 비교합니다.
결정적인 NeverD 의미론 실패는 실패 테스트여야 합니다. skip은 명시적인 외부 기능 경계에만 사용하고 이유를 읽으세요. 교차 linker가 없는 녹색 요약은 해당 포맷 경로가 실행되었음을 증명하지 않습니다.
interpreter test는 deterministic 256-bit oracle입니다. emitter suite는 LLVM을
compile/execute하고 C23을 Clang으로 같은 host harness에 lower하며 solc, anvil,
cast, jq가 있으면 generated Solidity를 local node에 deploy합니다. status, storage,
instruction trace count를 비교합니다. 별도 raw-bytecode corpus는 Anvil native EVM에서
pre-Fusaka ALU, calldata/memory copy, overlapping MCOPY, Keccak, return data를 실행합니다.
Low/Med 테스트는 path-sensitive whole-stack execution lane과 phi lane identity를 보존하고
MaxAbstractInstructionTransfers를 포함한 budget exhaustion을 hard error로 만듭니다.
strict는 증명된 Reachable lane의 unknown/fork-inactive opcode만 거부하며
MayReachable은 definite fact를 만들지 않습니다. HighIR의 selector/receive/fallback은 root
lane과 성공 terminal로 제한됩니다. 공유 selector는 독립 standard evidence가 아니며,
standard별 KnownFunctionVariantInfo와 성공 terminal의 정확한 return shape가 일치할 때만
variant와 return list를 선택합니다.
interpreter는 opcode별 side effect 전에 typed stack preflight를 수행합니다.
EVMForkSemantics.def는 byte 0x44를 Paris 이전의 DIFFICULTY, Paris부터의
PREVRANDAO로 정의합니다. REVERT, fault, step limit, resource exhaustion은 state를
rollback합니다. allocation failure는 ExecutionFaultKind::ResourceExhausted이고 entry
snapshot 자체를 만들지 못하면 HasPersistentStateSnapshot은 false이며 commit할 수 없습니다.
public API test는 canonical
Code/Fork/Instructions/JumpDestinations와 모든 LowIR table, range, ID, lane, edge
reference를 각각 변조합니다. execute는 instruction lookup 전에 llvm::Error를 반환해야 하고,
lowerToMedIR는 index 생성이나 입력 비례 allocation 전에 전체 malformed/over-budget LowIR를
거부해야 합니다. lowerToMedIR는 option validation, resource validation, structure validation을
이 순서로 수행하고 field별 canonical decode replay 및 lowerCanonicalLowToMedIR보다 먼저
완료해야 합니다. public HighIR recovery는 외부 LowIR/MedIR를 replay 검증하며 analyze만 자체
canonical IR에 lowerCanonicalLowToMedIR와 recoverCanonicalHighIR를 사용할 수 있습니다.
따라서 recursive/duplicate replay를 피하면서 모든 HighIR option/resource budget을 계속 적용합니다.
interpreter는 EVMInterpreterLimits.def의 모든 limit를 exact boundary/+1로
검증합니다. MaxSteps는 전용 StepLimit를 유지하고, MaxMemoryBytes, MaxTraceEntries,
MaxLogEntries, aggregate MaxLogDataBytes, runtime MaxPersistentStateEntries exhaustion은
ResourceExhausted로 transaction effect를 rollback합니다. 초기 aggregate
MaxHostReturnDataBytes나 persistent state 초과는 API error입니다. 초기 MaxCalldataBytes,
BlockHashes/Balances/CodeHashes/ExternalCode/BlobHashes 전체의 aggregate
MaxHostEnvironmentEntries, aggregate MaxExternalCodeBytes도 API error입니다.
const execute preflight는 environment, snapshot, result copy 전에 이를 거부합니다. return-data
ArrayRef view와 정렬 table의 lower_bound lookup도 buffer copy나 PC map 없이 검증합니다.
별도의 LowIR boundary test는 aggregate diagnostic limit MaxLowDiagnostics와
MaxLowDiagnosticBytes를 검증하며 linear decode/CFG construction이 정확한 count/final byte를
precharge하고 zero를 거부하는지 확인합니다.
HighIR safety test는 lane별 정렬 Any/Exact/Excluded domain, equality match/exclusion, raw
XOR(selector, constant)의 false-edge match/true-edge mismatch, zero word/calldata size/call
value refinement, unknown condition fail-closed를 다룹니다.
EQ와 raw XOR 두 back-jump regression은 다른 function이 arguments, mutability,
return shape, region을 오염시키지 않음을 보장합니다. EVMAnalysisLimits.def의
MaxHighDispatchCandidates, aggregate MaxHighRecoveredArguments, MaxHighDiagnostics,
MaxHighDiagnosticBytes, MaxHighReferenceVisits, MaxHighMemoryTransferCells,
MaxHighMemoryValueVisits는 exact boundary/-1로 검증됩니다. fixed malformed diagnostic을 포함한
모든 output diagnostic은 allocation 전에 count와 최종 byte를 과금해야 합니다.
LowIR와 HighIR diagnostic budget은 독립적으로 검증하며 default root CFG region은 block-PC list를
reserve/copy하기 전에 MaxHighRegionBlockReferences를 과금해야 합니다.
외부 CALL/CREATE result는 nondeterministic host outcome으로 두 개의 정확한 CFG edge를 검사하므로
ERC-1167 fallback recovery가 유지됩니다. 읽을 수 없는 selector condition은 Unknown으로 남아
fallback/function fact를 만들 수 없습니다.
control-flow test는 EVMLowFaultKinds.def의 InvalidJumpDestination을
end-of-code JUMPI에 적용합니다. invalid target에서 확실히 true면 successful tail 없이 definite
fault이고 확실히 false면 성공합니다. unknown은 성공 가능한 false path를 남기며 lane 전체를 definite
fault로 표시하지 않습니다.
ABI test는 EVMABIParserLimits.def의 grammar boundary와 EVMABITableLimits.def의 public table
cardinality/text boundary를 exact limit/+1로 검증합니다. 또한 invalid kind/standard/evidence enum,
metadata mismatch, noncanonical signature/return list, 잘못 independent로 표시된 shared selector,
dangling/duplicate variant, word width가 아닌 event-topic APInt를 indexed selector/sorted topic
lookup 전에 거부합니다.
NeverDEVMOpcodeTests는 metadata architecture도 강제합니다. 할당된 opcode의
encoding/typed-value roundtrip, family boundary, hardfork alias, derived stack/host
maxima를 검증합니다.
SBF 메타데이터 테스트는 모든 버전 기능, opcode 충돌 경계, Murmur3 syscall hash, 재배치, ELF machine, 레지스터, VM 주소 상수를 검증합니다. Loader fixture는 vendored 바이너리 없이 레거시 v0-v2 section 레이아웃과 section이 없는 엄격한 v3/v4 program-header 레이아웃을 모두 생성합니다.
NeverDSBFISAConformanceTests는 v0-v4 각 version의 모든 byte encoding을 독립적으로
감사한 typed manifest와 대조합니다. NeverDSBFExternalOracleTests는 activation 및
boundary 결정을 별도로 build한 official Anza process와 비교합니다.
NeverDSBFUpstreamConformanceTests는 pinned Anza revision의 ELF 23개 모두에 명시적
outcome을 부여합니다.
NeverDSBFSemanticTests는 검증된 명령 바이트를 직접 실행하고 MedIR을 사용하지 않으므로, 정규화된 IR을 변경하거나 손상해도 source oracle과 backend가 우연히 일치할 수 없습니다. 비단조 v2 시맨틱, 메모리, syscall, 내부 call frame, fault, trace, resource limit을 다룹니다. LLVM module은 검증하며, 생성 C는 warning을 error로 처리하고 Rust는 -D warnings로 컴파일합니다. 공개 API 테스트는 생성된 엄격한 SBF ELF에서 모든 IR 단계, 디스어셈블리, CFG, 메타데이터, LLVM, C, Rust를 통과합니다.
custom target은 의존성을 빌드한 뒤 host CPU에서 정한 병렬도로 CTest를 실행합니다.
| CMake target | 선택 범위 |
|---|---|
check-neverd |
등록된 모든 테스트 |
check-neverd-semantic |
NeverDSemanticTests만 |
check-neverd-sbf |
모든 NeverDSBF*Tests target/case |
check-neverd-patch-full |
NeverDPatchFullTests만 |
check-neverd-switch-xform |
NeverDSwitchXformTests만 |
check-neverd-cfgloop-xform |
NeverDCFGLoopXformTests만 |
check-neverd-twotable-xform |
NeverDTwoTableXformTests만 |
cmake --build build-release --target check-neverd
cmake --build build-release --target check-neverd-semantic
cmake --build build-release --target check-neverd-sbfNeverDIndCallXformTests와 NeverDAvxUpperXformTests에는 현재
check-neverd-* 편의 target이 없습니다. 아래처럼 빌드하고 label로 선택하세요.
check-neverd-semantic에도 별도 변환이나 patch-full 바이너리는 포함되지 않습니다.
완전한 집계에는 check-neverd를 사용하세요.
소유 실행 파일을 먼저 빌드한 뒤 label을 선택합니다. 관련 없는 큰 의미론 target을 다시 링크하지 않아도 됩니다.
# Lifter, loader, and format tests
cmake --build build-release --target NeverDLiftTests --parallel 4
ctest --test-dir build-release --build-config Release \
-L '^NeverDLiftTests$' --output-on-failure --parallel 4
# Main semantic binary
cmake --build build-release --target NeverDSemanticTests --parallel 4
ctest --test-dir build-release --build-config Release \
-L '^NeverDSemanticTests$' --output-on-failure --parallel 4
# A label-only focused transform binary
cmake --build build-release --target NeverDIndCallXformTests --parallel 4
ctest --test-dir build-release --build-config Release \
-L '^NeverDIndCallXformTests$' --output-on-failure --parallel 4
# 모든 집중 EVM target/case
cmake --build build-release --target \
NeverDEVMOpcodeTests NeverDEVMBytecodeTests NeverDEVMLoaderTests \
NeverDEVMABITests NeverDEVMAnalyzerTests NeverDEVMDecoderPropertyTests \
NeverDEVMProxyTests NeverDEVMCallTests NeverDEVMSemanticTests \
NeverDEVMEmitterTests \
NeverDEVMIntegrationTests --parallel 4
ctest --test-dir build-release --build-config Release \
-R 'EVM' --output-on-failure --parallel 4
# 모든 집중 Solana SBF target/case
cmake --build build-release --target check-neverd-sbf --parallel 4GoogleTest에서 파생된 CTest 이름으로 단일 회귀를 실행합니다.
ctest --test-dir build-release --build-config Release -N \
-L '^NeverDLiftTests$'
ctest --test-dir build-release --build-config Release \
-R '^COFFARMPipeline\.ARM32ThumbLiftAndDecompile$' \
--output-on-failure유용한 selector:
| 명령 | 목적 |
|---|---|
ctest --test-dir build-release -N |
발견한 사례를 실행하지 않고 나열 |
ctest --test-dir build-release -L '<regex>' |
테스트 바이너리 label 선택 |
ctest --test-dir build-release -R '<regex>' |
사례 이름 선택 |
ctest --test-dir build-release --output-on-failure |
실패 진단만 표시 |
ctest --test-dir build-release --stop-on-failure |
첫 실패 후 중단 |
ctest --test-dir build-release --parallel 4 |
최대 네 사례 병렬 실행 |
GoogleTest discovery는 DISCOVERY_MODE PRE_TEST를 사용하므로 CTest가 나열하기 전에
해당 테스트 바이너리가 있어야 합니다. 사례별 timeout과 독립 discovery timeout은
cmake/AddNeverD.cmake에 정의되며 측정된 무거운 사례가 있는 스위트만 늘릴 수 있습니다.
| 변경 영역 | 먼저 시작 | 다음 고려 |
|---|---|---|
| 아키텍처 lifter 또는 decode | NeverDLiftTests의 이름 있는 사례 |
해당 ISA 의미론 왕복 |
| LowIR CFG, 함수 감지, jump table | Lift CFG/switch 사례 | NeverDSwitchXformTests, NeverDCFGLoopXformTests, NeverDTwoTableXformTests |
| MedIR, ABI, 플래그, 타입, SSA | MedIR/호출 규약 lift 사례 | ISA 교차 NeverDSemanticTests 사례 |
| HighIR 또는 구조화 C | HighIR/decompile 사례 | NeverDCFGLoopXformTests 및 생성 C 컴파일 검사 |
| PE/ELF/Mach-O loader 또는 입력 relocation | 해당 unittests/lift 포맷 fixture |
해당 셀의 전 단계 로드/디컴파일 테스트 |
| Rewrite codegen 또는 출력 relocation | RewriteCodegenRTTests 사례 |
NeverDPatchFullTests 및 가능한 링크된 patch fixture |
| patch가 쓰는 LLVM IR 변환 | 집중 변환 바이너리 | NeverDPatchFullTests 조합 pass grid |
| C API 또는 CLI | 직접 SDK/query 테스트 및 unittests/semantic/CLIEndToEndTests.cpp |
관련 pipeline/포맷 스위트 |
| EVM loader, opcode, IR 또는 backend | 가장 작은 소유 NeverDEVM*Tests target |
모든 EVM target과 생성 C/Solidity 컴파일 검사 |
| SBF loader, ISA, IR 또는 backend | 가장 작은 소유 NeverDSBF*Tests target |
모든 SBF target과 생성 C/Rust 컴파일 검사 |
| Libc 인식 | NeverDLibCTests |
동작 변경 시 의미론 call/ABI 사례 |
| 힙 수명 감사 또는 복사 오버플로 헌트 | NeverDSafetyTests |
NeverDSafetyIntegrationTests의 전체 6셀 |
| 프로세스 실행 또는 quoting | NeverDTestProcessTests |
지원 host마다 영향받는 CLI/의미론 사례 하나 |
테스트는 가장 낮은 안정 경계에서 계약을 표현해야 합니다. LowIR 모양 테스트는 lifter 귀속에 유용합니다. 그럴듯한 두 IR 모양이 다르게 동작할 수 있다면 의미론 왕복이 필요합니다. 작은 opcode, CFG, 관측 상태 assertion으로 충분할 때 함수 전체 golden dump를 피하세요.
CI는 Linux, macOS, Windows에서 테스트를 켠 Release를 빌드하고 발견 inventory를
audit한 다음 플랫폼별 label 제외를 적용합니다. 프로필은
.github/workflows/ci.yml과 scripts/audit_ci_test_inventory.py에 있습니다.
NeverDSafetyTests와 NeverDSafetyIntegrationTests는 모든 matrix 호스트에서
필수이며, 각 실행은 체크인된 동일한 PE, ELF, Mach-O × x86-64, AArch64 fixture를 읽습니다. 비싼 모든 스위트를 대표하는 단일 matrix shard는 없으므로 필요한 교차 도구를 갖춘 머신에서는 로컬 check-neverd가 가장 명확한 전체 병합 전 신호입니다.
이 current list는 위의 짧은 SBF list를 대체합니다. source differential suite는 clang
외에 rustc가 필요하며 compiler skip은 coverage 누락입니다. 전체 aggregate에는
NeverDSBFProgramImageTests, NeverDSBFMalformedCorpusTests,
NeverDSBFISAConformanceTests, NeverDSBFUpstreamConformanceTests,
NeverDSBFLLVMDifferentialTests, NeverDSBFSourceDifferentialTests와 metadata,
loader, analyzer, semantic, emitter, integration target이 포함됩니다. integrated
profile은 변동하는 총계 대신 named target과 결과를 기록합니다.
sanitizer profile은 build-sbf-asan-ubsan에 별도로 build합니다. revision이 고정된
prebuilt package에 필요한 fork-only header가 포함되므로 integration도 같은 fail-fast
ASan/UBSan profile에서 실행합니다.
cmake --build build-sbf-asan-ubsan --parallel 4 --target \
NeverDSBFMetadataTests NeverDSBFProgramImageTests NeverDSBFLoaderTests \
NeverDSBFAnalyzerTests NeverDSBFISAConformanceTests \
NeverDSBFVerifierTests NeverDSBFAgaveConformanceTests \
NeverDSBFSemanticTests NeverDSBFEmitterTests NeverDSBFLLVMEmitterTests \
NeverDSBFLLVMDifferentialTests NeverDSBFSourceDifferentialTests \
NeverDSBFMalformedCorpusTests NeverDSBFUpstreamConformanceTests \
NeverDSBFSolanaModelTests NeverDSBFIntegrationTests
ASAN_OPTIONS=abort_on_error=1:detect_leaks=0:strict_string_checks=1 \
UBSAN_OPTIONS=halt_on_error=1:print_stacktrace=1 \
NEVERD_SBPF_ROOT=/path/to/sbpf \
NEVERD_AGAVE_CONFORMANCE_ROOT=/path/to/firedancer-test-vectors \
NEVERD_AGAVE_CONFORMANCE_REVISION=68bb4af40235562e8852fa23d5727e49c2a0b862 \
ctest --test-dir build-sbf-asan-ubsan --output-on-failure --parallel 4 \
-L '^NeverDSBF'gate는 Anza sbpf
2510663bb8d894e8e3094be351e4bb4b604f1f84, Agave
ef210d67f2fabeee1730498188fa78854260c679, Solana SDK
122f32e571ce39face4beffaccea733e37c207fd를 고정합니다. official ELF manifest는
23/23을 통과하고, NeverDSBFExternalOracleTests는 1,411 opcode/boundary case를
SBFOfficialOracleProtocol.def, SBFOfficialVerifierCases.def,
SBFOfficialExecutionConstants.def를 통해 대조합니다.
SBFOfficialELFMutations.def가 malformed ELF의 table-driven contract이며 변동하는
총계는 고정하지 않습니다.
별도 축인 41-case strict ELF differential은 strict-v3 matrix 전체를 official
verify-elf-batch와 NeverD에 통과시킵니다. 이 41 case는 1,411 total에 포함하지 않습니다.
NeverDSBFAgaveConformanceTests는 Firedancer test-vectors의
68bb4af40235562e8852fa23d5727e49c2a0b862를 인증하고 loader fixture 1,955 sol_compat_elf_loader_v1개
(accept 1,399, reject 556)를 대조하고, 승인된 각 ELF에 대해 entry_pc, text_off,
text_cnt, rodata_hash, calldests_hash를 비교합니다. 이 gate는 후속 instruction verifier를 실행하지 않습니다.
추가 official execution matrix는 별도입니다. active (Version,Opcode) case 정확히
508개와 boundary case 58개를 합쳐 exact execution case 566개입니다. 1,411개의
verifier probe나 41-case strict ELF differential을 대체하지 않으며 그 합계에도 넣지 않습니다.
Linux Release CI는 --print-pinned-revision, --print-test-vectors-revision,
--print-toolchain을 사용하고 NEVERD_SBPF_ORACLE과
NEVERD_AGAVE_CONFORMANCE_ROOT를 export하므로 두 external gate가 필수입니다. 명시
oracle/corpus env가 없는 local run은 case를 discover하지만 skip할 수 있습니다.
SBF_RUNTIME_VERSION에 따라 RuntimeVersionPolicy::ChainProfile은 historical
cluster/slot을 반영하며 official feature account activation에 맞춰 maximum ISA를
V0→V1→V2→V3으로 전진시킵니다. 현재는 V3입니다. 명시 v4는 offline 분석용
RuntimeVersionPolicy::UpstreamToolchain을 사용합니다. 현재 10 MiB
상한은 정확히 10'485'760 byte이고, 65,536은 historical provenance/test뿐입니다.
SBFFaultCodes.def는 execution fault의 안정된 값을, SBFSourceStatuses.def는 별도
계층인 generated-source ABI를 소유합니다.
10,000 scale fixture가 worklist, function ownership, multi-latch를 보호하며 machine별
시간은 고정하지 않습니다. cluster/account/slot row는 일반 test를 deterministic 및
offline으로 유지하면서 RPC activation audit를 가능하게 합니다.
neverd mobile INPUT --list-classes를 측정하기 전에 NeverDMobileTests를 Release로 빌드하고 해당 라벨을 실행합니다.
판독기 테스트는 희소 메타데이터, Unicode, 잘못된 참조, 지원하지 않는 메서드 본문, 체크섬 및 예산을 검증하며,
아카이브 테스트는 전체 추출과 선택 페이로드 쿼리를 구분합니다. CLI 테스트는 접두사 필터, JSON 범위, 기존 출력 보존,
multidex 실패 원자성을 검사합니다.
독립적인 fixture/측정 하네스는 시간 샘플을 받아들이기 전에 각 프로세스의 전체 설명자 목록을 검증합니다.
python3 -m unittest scripts.tests.test_benchmark_mobile_inventory -v
python3 scripts/benchmark_mobile_inventory.py \
--output-dir /tmp/neverd-inventory-benchmark \
--class-count 6000 --dex-count 3 --code-units 64 \
--extra-string-bytes 8388608 --resource-bytes 16777216 \
--repetitions 7 --neverd build-release/bin/neverd실행마다 새 출력 디렉터리를 사용합니다. --generate-only는 fixture와 manifest를 쓰고 시간을 측정하지 않습니다.
--workload는 선택적 --peer-command 'tool {input} {prefix}'에 사용할 공통 입력 종류를 고르며, 입력 준비는 측정 명령 밖에서 수행합니다.
보고서에는 해시, 명령, 모든 새 프로세스 샘플, 따뜻한 캐시 가정, GNU time이 있는 Linux에서는 최대 자식 프로세스 RSS를 보관합니다.
이 RSS는 여러 프로세스를 사용하는 도구의 합산 최고값이 아닙니다. 합성 APK는 쿼리 컨테이너이며 설치 가능한 앱이 아닙니다.
목록 속도는 참조 검색 속도나 Java 복원 품질을 증명하지 않습니다.
하이브리드 CPU에서는 하네스와 그 자식 프로세스를 같은 허용 CPU에 고정하여 성능 코어와 효율 코어가 섞이지 않도록 합니다
(Linux의 taskset -c 4 python3 ... 등). 보고서는 상속된 CPU 선호도를 기록합니다.
참조 쿼리는 복원 판독기의 명령 경계와 코드 검증을 공유합니다. 이 경계를 변경하면 모바일 테스트 모음을 실행하세요. 판독기 테스트는 피연산자 풀 종류, 일치 모드, 메서드 소유 관계와 공유 코드, 참조처럼 보이는 페이로드/즉시값, 잘못된 입력 및 리소스 제한을 검증합니다. 공유 디버그 스트림은 각 소유 본문의 프레임, 범위 및 매개변수에 맞춰 검사합니다. 저장 공간 제한 테스트에 큰 멤버 목록과 분기가 많은 본문을 모두 유지하세요. 지속 인덱스와 임시 컨테이너 확장은 수명이 다릅니다. 순서가 바뀌거나 겹치는 항목, 같은 너비라도 호환되지 않는 프로토타입의 공유 코드, 정렬되지 않은 입력 저장 공간, 검색 블록 경계를 넘는 부분 문자열 일치도 검사해야 합니다. 비공개 디코더 데이터의 성능 변경은 전체 소유 복원 모델과 참조 발생 다중집합을 보존해야 하며, 지원하지 않는 복원 메타데이터의 실패 동작도 유지해야 합니다. 독립적으로 생성한 기대값과 실제 입력에서의 도구 간 일치를 구분하세요.
독립 참조 하네스는 명령을 생성하면서 예상 발생 위치를 기록합니다. 측정할 때마다 전체 메서드 식별 정보,
code unit 단위 PC, opcode, 대상 식별 정보, UTF-16 단위와 중복 횟수를 검사합니다.
독립적으로 예상한 NeverD의 검사 범위 집계 수와 code_scan_complete도 확인합니다.
NEVERD_REFERENCE_TEST_BINARY="$PWD/build-release/bin/neverd" \
python3 -m unittest scripts.tests.test_benchmark_mobile_references -v
python3 scripts/benchmark_mobile_references.py \
--output-dir /tmp/neverd-reference-benchmark \
--class-count 500 --methods-per-class 64 --matching-methods 2 \
--dex-count 3 --resource-bytes 16777216 \
--repetitions 7 --neverd build-release/bin/neverd--kind와 --workload로 사례를 선택합니다. --extra-strings 65536은 실제 32비트 문자열 인덱스를 검사합니다.
페이로드 미끼는 기본적으로 활성화됩니다. --no-payload-lookalikes는 같은 배치와 실제 참조를 유지하면서 미끼 페이로드 값을
바꾸어 공통 입력 비교에 사용합니다. 정확성과 측정 결과를 모두 보관하세요. 가짜 페이로드 참조를 반환하거나 실제 참조를 빠뜨리는
쿼리는 검증에 실패하며 측정값을 받아들이지 않습니다.
선택적 --peer-command는 {input}, {kind}, {query}가 포함된 argv 템플릿을 받습니다.
다른 도구의 의미가 다르면 쿼리 구문을 명시적으로 조정하고 전체 발생 다중집합을 비교하세요.
선언된 검증 범위를 유지하며 전체 코드 스캔을 수행했다고 주장하지 않습니다. 목록 벤치마크와 같은 새 디렉터리,
CPU 선호도, 새 프로세스, 따뜻한 캐시 및 RSS 조건이 적용됩니다. NEVERD_REFERENCE_TEST_BINARY가 빌드된 실행 파일을
가리키지 않으면 선택적 CLI 단위 테스트를 건너뛰므로 해당 생략을 보고하세요.
수동 Mobile SDK Export Evidence 워크플로는 고정된 Xcode SDK에서 collect_mobile_ios_sdk_declarations.py --exports-only를 실행합니다. iOS 기기 및 시뮬레이터 SDK의 Foundation, CoreFoundation, UIKit 링커 맵을 그대로 보존하고 대상, SDK 버전, SDK 설정 해시, 파일 크기, SHA-256을 기록합니다. 일반 선언 수집기도 이 맵을 보존합니다. 파일 누락, 빈 파일, 크기 제한 초과 또는 SDK 외부 파일은 수집 실패로 처리하며 완료된 증거는 유지합니다. 링커 맵은 심볼 내보내기 증거이며 호출 ABI나 메서드 복원 성공을 증명하지 않습니다.
수동 워크플로 Mobile Swift String ABI Evidence는 Xcode 26.5로 arm64 iOS 기기와 시뮬레이터용 고정 Swift 동등성·순서 비교 프로브와 C swiftcall 프로브를 컴파일합니다. collect_mobile_swift_string_abi.py는 소스, LLVM IR, 어셈블리, 컴파일러 식별 정보, SDK 설정 및 libswiftCore.tbd를 해시와 함께 보관합니다. 두 언어 모두 정확한 비교 임포트가 인수 5개를 받아 i1을 반환해야 하며, C는 그 결과를 명시적으로 1바이트로 확장해야 합니다. 잘못된 대상이나 시그니처, 명령 실패 및 시간 초과는 부분 증거를 남기고 수집을 실패로 처리합니다. 이 증거는 런타임 선언을 등록하거나 메서드 복원을 입증하지 않습니다. SDK 없이 python3 -m unittest scripts.tests.test_mobile_swift_string_abi로 수집기를 테스트할 수 있습니다.
SymSimplifyFinite.*는 8~512비트의 완전한 두 값 영역, 공유 사용의 비용 계산, 지원하는 모든 poison 생성 주석, 독립적인 volatile 읽기와 freeze, 명시적 undef/poison, 깊은 반복 순회, 예산과 난독화 표시를 검사합니다. 원본 및 단순화된 IR을 O0/O2에서 실행하여 모든 바이트 입력과 무작위 전체 폭 입력을 독립 판정 결과와 비교합니다. 변환 객체 테스트는 유한 값 예산이 다르면 캐시 식별도 달라야 함을 검사합니다.
병합 도메인 테스트는 8–512비트 중첩 select, 다이아몬드 PHI, 복사 순환과 함께 충돌하는 역방향 간선, 미정의 조건, 생성자 없는 성분, 독립 PHI/freeze 관측, 플래그가 있는 생성자 보존 및 정확한 노드·간선·작업량 경계를 검사합니다. O0/O2 실행 오라클은 모든 바이트 입력 쌍을 검사하고 전체 비트 폭의 피연산자를 바꾸어 선택, 합류, 제한된 상태 루프를 검증합니다.
두 값 테스트는 8–512비트 중첩 논리곱 마스크, 피연산자 교환, OR/undef 거부, 깊은 탐색 한도, 독립 작업량 및 난독화 표시 정책, 최초 변환의 정확한 예산 경계도 검사합니다. 실행 오라클은 모든 바이트 입력 쌍을 확인하고 무관한 64비트 데이터를 바꾸며 원본과 단순화 IR을 O0/O2로 비교합니다.
SymSimplifyPredicates.*는 4비트 오프셋, 부호와 입력을 전수 검사하고 불리언 구간 조합과 불연속 집합을 확인하며 O0/O2에서 독립적인 바이트/전체 폭 oracle을 실행합니다. poison 주석, 합류점의 숨은 미정의 입력, 독립 읽기/freeze, 보존된 루프 PHI, 공유 사용의 이득, 누적 예산, 높은 팬아웃, 재귀 제한과 난독화 표시를 다룹니다. 변환 객체 테스트는 두 캐시 키 모두에서 조건 분석 예산을 구별합니다.
SymExpr.*는 4비트 입력과 마스크를 전수 검사하여 최하위 위치가 아닌 상수 구간을 확인하고, 넓은 값, 중첩 구조 연산, 알려진 바이트와 미지 바이트의 재조합, 산술 올림 반례를 다룹니다. 예산 회귀는 넓은 노드를 재귀 경계에 배치하고 예산을 초과하는 상수 복사를 거부합니다. 미지 구간은 표현식 DAG를 확장하지 않고 기호 형태로 남아야 합니다. SymState.*는 두 바이트 순서 모두에서 도출된 스칼라 상수와 영역의 리터럴 상수를 구분하고, DAG 노드나 저장된 전체 워드가 바뀌지 않는지도 확인합니다.
SymReadability.*는 뺄셈과 보수 표기, 결합 연산 비용, 1비트 및 넓은 리터럴, 공유 트리 포화, 예산 제한 후보 선택, 표본 검증을 끈 상태의 3비트 완전 동치성을 검사합니다. SymMBASample.*는 모든 연산자, 결정적 대입, 사용하지 않는 넓은 입력에 대해 좁은 값과 임의 정밀도 검증을 AP 평가기와 비교합니다. 점수 버전이 다를 때 후보 품질을 비교하려면 두 출력을 같은 척도로 다시 세어야 합니다. SDK의 버전별 크기 카운터는 진단용입니다.
cmake --build build-release --target NeverDSymbolicTests \
NeverDSymSimplifyGuardTests NeverDLiftTests NeverDMBASourceTests \
NeverDHighCStoreForwardingTests NeverDMetadataJSONTests --parallel 4
build-release/bin/NeverDSymbolicTests
build-release/bin/NeverDSymSimplifyGuardTests
build-release/bin/NeverDLiftTests \
--gtest_filter='HighSymSimplify.*:HighFrameStoreForwarding.*:ELFARM32ModeTest.*'
build-release/bin/NeverDHighCStoreForwardingTests
build-release/bin/NeverDMBASourceTests
build-release/bin/NeverDMetadataJSONTests --gtest_filter='ELFARM32ModeCAPITest.*'프레임 spill 행렬은 두 C 백엔드에서 x86-32(ELF/COFF/Mach-O), ARM32(ARM 및 Thumb ELF), AArch64(ELF/COFF/Mach-O)도 검사합니다. 반복되는 비공개 프레임 로드는 덧셈이나 뺄셈으로 줄어야 하고, 두 최적화 수준에서 바이트 쌍, 워드 경계 쌍, 결정적 난수 워드에 대해 올바르게 실행되어야 합니다. Clang AST 검사는 전체 spill 함수에 남은 MBA 연산을 찾되 유효한 주소식을 구분합니다. HighFrameStoreForwarding은 접근 폭, 로컬 변수 변경, 메모리 쓰기, 별칭, 겹침, 순서가 지정된 메모리, 잘못된 그래프, 확장 예산을 검사합니다. HighCStoreForwarding은 부동소수점 재해석을 포함한 네 아키텍처에서 캐시 값의 정의를 살아 있게 하고, SymSimplifyGuard는 로드 동일성과 순서, volatile/atomic 및 poison 경계를 검사합니다. ELFARM32ModeTest는 ARM/Thumb 선택, 주소 정규화, 혼합 메타데이터 및 모순 증거 거부를 검사합니다. ELFARM32ModeCAPITest는 명시적인 SDK 오류와 Thumb 재로드 뒤 디코더 복구를 확인하고, InstructionMode는 디코더, 코드 포인터, 분기, 코드 생성 경계를 검사합니다. 크로스 타깃 Clang이 없으면 건너뛰며, 해당 형식의 성공 증거로 보지 않습니다.
NeverDHighControlFlowTests의 HighBoundPrivateFrameCopies.*는 호출 ABI 바인딩 이후 외부로 노출되지 않는 전용 프레임 슬롯을 통한 복사를 검증합니다. 분기, 슬롯 재사용, 서로 다른 가드 조건에서의 사실 일치를 포함합니다. x64와 AArch64에서 생성한 C를 -O0 및 -O2로 실행하고, 정의되지 않은 동작을 트랩하면서 독립적인 산술 결과와 비교합니다. 프레임 주소 노출, 알 수 없는 호출 ABI, 누락되거나 일치하지 않는 프레임 별칭, 진입 인수 재할당, 겹치는 접근, 순서가 지정된 메모리 또는 원자적 메모리, 잘못된 문장, 순환, 예산 소진 시 원래 함수를 보존하는지 확인합니다. 일반 값 변환을 PHI 복사로 표시해서는 안 됩니다.
NeverDHighControlFlowTests의 HighIntegerSignedness.*는 각 레지스터 또는 임시 지역 변수를 그 사용 대부분이 읽는 부호에 따라 부호 있음 또는 부호 없음으로 선언하는 후반 패스를 검사합니다. 랩어라운드 산술, 논리 시프트, 부호 없는 비교는 부호 없음을, 부호 있는 비교, 부호 있는 나눗셈, 산술 시프트, 부호 확장은 부호 있음을 지지하며, 정수가 아닌 사용이 하나라도 있는 지역 변수는 타입을 유지합니다. 생성된 C는 -O0과 -O2에서 정의되지 않은 동작 트랩을 켜고 실행하며, 부호 없음이 된 지역 변수의 부호 있는 비교를 포함해 독립적인 참조 산술과 비교합니다.
NeverDHighControlFlowTests의 HighValueForward.*는 HighC 작성기가 한 번만 쓰이는 값을 그 사용 위치로 접을 수 있는 경우를 검사합니다. 한 이름이 여러 SSA 값을 나타낼 수 있으므로 루프 조건은 루프가 대입하는 변수를 읽는 값을 유지하고, 다시 읽은 프레임 슬롯은 그 슬롯에 대한 저장을 넘어 값을 유지하며 다른 슬롯에 대한 저장은 넘어 접습니다. 사용 전에 원본이 다시 대입된 복사본은 그 값을 유지합니다. 각 경우는 -O0과 -O2에서 정의되지 않은 동작 트랩을 켜고 실행합니다.
NeverDHighControlFlowTests의 HighCIntegerConversion.*는 HighC 작성기가 C에 맡기는 정수 변환을 검사합니다. 바깥 변환이 유지하는 바이트를 유지하는 피연산자 안의 변환은 자체 캐스트를 출력하지 않고, 선언된 정수 지역 변수로의 대입과 return은 암시적으로 변환하며, 리터럴은 변환된 값으로 쓰입니다. 반면 포인터는 명시적 변환을 유지합니다. 메모리 저장은 대입처럼 변환되고, 타입이 지정된 더 넓은 매개변수로 전달되는 0 확장 인수는 그 확장을 유지합니다. 각 경우는 -O0과 -O2에서 정의되지 않은 동작 트랩을 켜고 기준 산술과 비교하여 실행합니다.
소스 투영은 이 정리 후에도 가변 인자 객체 목록을 다시 검증합니다. 빈 명령 주소 앵커는 허용하지만 숨겨진 효과나 제어 이동은 거부합니다. 동기화 정리는 동일하게 저장된 수신자의 단일 int64_t 또는 uint64_t 뷰를 허용하며, 축소·부동소수점 변환·주소 연산·재할당은 계속 거부합니다. Foundation 객체 집합과 정상 및 예외 잠금 해제 추적을 -O0와 -O2에서 모두 실행합니다.
checked x64의 DIV/IDIV는 실제 프로세서 결과와 #DE를 사용합니다. KVM은 비공개 supervisor IDT/IST, WHP는 명시적인 예외 비트맵을 사용하며 원래 컨텍스트와 제공된 오류 코드를 전송 오류와 구분합니다. OS는 복구 가능한 이벤트를 소비한 뒤 계속 실행할 컨텍스트를 설치합니다. Windows 드라이버는 0으로 나누기와 몫 오버플로를 STATUS_INTEGER_DIVIDE_BY_ZERO로 변환하고 실제 SEH filter, __finally, 재시도를 실행합니다. NeverDX64ExceptionTests는 Unicorn 없이 빌드되며 DriverWDMCPUException은 원본 WDK 사례를 검증합니다. 사용할 수 없는 ARM64 호스트는 명시적으로 건너뜁니다.
RAMTransaction은 물리 실행 임대 아래에서 명령이 선언한 쓰기 범위의 물리적 합집합만 보관합니다. 결과 관찰자 호출 전에 원래 RAM을 복원하며 취소, 전송 오류, 관찰자 예외는 부분 RAM이나 레지스터를 공개하지 않습니다. CPU 예외는 RAM 복원 후에도 아키텍처 예외 상태를 유지합니다. ARM64 단일·쌍 저장도 같은 계층을 사용합니다. x64는 8/16/32/64비트 XCHG, XADD, CMPXCHG를 실행하며 LOCK 또는 암시적 잠금 형식에는 자연 정렬을 요구합니다. NeverDRAMTransactionTests는 호스트 CPU와의 결과 비교, 복원, 별칭, 권한을 검증하며 사용할 수 없는 플랫폼은 명시적으로 건너뜁니다. 장치와 병렬 SMP는 제외되며 CPU 스냅샷은 이미 확정된 RAM을 복원하지 않습니다.
CMPXCHG8B와 CMPXCHG16B는 KVM, WHP 및 checked Unicorn의 드라이버·사용자 프로필에서 원래 명령을 실행합니다. 비교 성공 여부와 관계없이 읽기와 쓰기 권한이 모두 필요하며, 폴트는 쓰기 접근으로 분류합니다. CMPXCHG16B는 메모리 접근 전에 16바이트 정렬을 검사하고 위반 시 #GP(0)을 보고합니다. 두 결과 콜백은 하나의 RAM 트랜잭션에 속하므로 어느 쪽에서든 중지하거나 예외가 발생하면 레지스터와 RAM 변경을 공개하지 않습니다. 잠금 없는 CMPXCHG8B는 페이지 경계를 넘을 수 있지만 잠금 연산은 자연 정렬이 필요합니다. X64WideAtomicTests.cpp는 호스트 원본 명령 결과와 네이티브 폴트, 별칭, 접두사, 주소 계산, 복구 후 재시도와 취소를 검증합니다. 자체 Windows 드라이버와 ring3 PE 픽스처가 두 폭을 실행하며 WDK 픽스처는 _InterlockedCompareExchange128도 실행합니다. CPU 모델은 CMPXCHG16B를 지원해야 합니다.
NeverDEmulationArch는 ISA, 페이지 테이블과 FP 상태 배치를 소유하며 네이티브 및 Unicorn 전송이 공유합니다. x64 컨텍스트는 x87 제어, 상태, TOP, 물리 태그, 연산 코드, 명령/데이터 포인터와 8개의 80비트 레지스터를 보존합니다. FP0–FP7은 RegisterValue를 사용하고 스칼라 접근은 잘림을 거부합니다. FPTag는 물리 비어 있지 않음 비트맵입니다. NeverDX64FPTests는 모든 TOP, 정확한 연산의 호스트 FXSAVE/FXRSTOR 비교와 복원을 검사합니다. checked x87 명령 또는 모든 반올림 의미를 입증하지 않으며 없는 네이티브 호스트는 명시적으로 건너뜁니다.
driver-strict는 일치하는 Linux x64 host의 KVM과 Windows x64 host의 WHP를 지원합니다. auto는 해당 native transport를, cross-ISA는 Unicorn을 선택합니다. 명시적 Unicorn과 기존 V1 API는 portable software profile을 유지합니다. native 실행은 진입 전에 canonical address와 instruction effect를 검증하고, hardware가 없으면 fallback 없이 실패합니다. 지원되지 않는 instruction/OS behavior는 명시적 오류입니다. Windows x64 네이티브 CI는 Unicorn을 비활성화하고 필수 검사 359개를 모두 통과합니다. CPU 검사 131개, 내장 이미지 26개·WDK 이미지 46개·시나리오 사례 40개를 기본 및 재배치 주소에서 실행한 드라이버 결과 224개, SEH 경계 검사 4개를 포함합니다 (9d4c130c). native ARM64 실기 증거는 아직 없으며, 임의 driver나 Android/Darwin 호환성을 의미하지 않습니다.
위 네이티브 검증은 선언된 드라이버 진입점과 공개된 시나리오를 다룹니다. 아래의 기능별 회귀 테스트와 C API/CLI/Python 검사는 Windows 실행 결과가 명시된 경우 외에는 근거 범위가 Linux로 제한됩니다. 네이티브 사례 모음의 통과가 모든 테스트 변형의 Windows 검증을 뜻하지는 않습니다.
executionCapabilities(Contract, ISA, Backend)로 선택한 백엔드의 기능을 조회합니다. NativeLegacyX64는 네이티브 x64 드라이버 실행을 나타내며, NeverDNativeDriverTests는 기존 드라이버 모음을 검증합니다. 이 테스트는 Unicorn을 비활성화한 빌드에서도 실행할 수 있습니다.
기존 CI 워크플로는 일반 테스트 프로필 전에 전체 에뮬레이션 테스트 디렉터리를 실행하고 검색 목록, JUnit 결과 및 CTest 로그를 emulation-focused에 저장합니다. 다른 모듈의 실패가 이 실행을 막지 않습니다. 사용할 수 없는 하드웨어와 선택적 드라이버 자료는 명시적으로 건너뛰며, 소프트웨어 실행이나 컴파일 성공은 네이티브 실행의 증거가 아닙니다.
Linux의 NeverDUnicornDeadlineTests는 pthread 스케줄링을 제어해 실제 타이머 스레드가 게스트 진입 전에 완료되도록 합니다. x64, ARM32 및 ARM64에서 진입 전 취소가 게스트에 영향을 주지 않고 다음 실행이 독립된 예산을 사용하는지 검증합니다. 공개 엔진 API를 사용하며 엔진 내부 상태는 변경하지 않습니다.
NeverDX64ExceptionTests의 X64StateTransition은 네이티브 CPU에서 독립적인 RAM 읽기와 CR8 읽기를 수행합니다. TLS 기준 주소와 권한 수준을 번갈아 변경하고, 반복되는 나눗셈 예외 후 재개하며, 취소된 진입 후 TLS를 변경합니다. 네이티브 상태 전송을 바꾸면 해당 CTest 레이블과 별칭 재매핑, CPU 컨텍스트, FP 상태, 원본 드라이버 결과 비교를 함께 실행해야 합니다. KVM/WHP를 사용할 수 없으면 명시적으로 건너뜁니다.
NeverDKvmRunTests는 /dev/kvm 없이 KvmRunControl의 빌린 전송 콜백을 검증합니다. StateTransfersUseTheEntryThreadAndPrepareOnceAcrossRetries는 준비, 수집과 가로챈 호스트 진입이 같은 스레드를 사용하며 중단 후 재시도 중에도 준비를 한 번만 수행하는지 확인합니다. 다른 사례는 진입 없는 준비 실패, 수집 실패, 준비 중 정지와 활성 진입 취소를 검증한 뒤 새 실행이 이전 콜백을 재사용하지 않는지 확인합니다. 실제 취소, RAM 롤백, 예외와 기존 드라이버 테스트도 계속 포함해야 합니다. SequentialEntriesReuseWorkerWithoutRetainingPriorTransfers는 같은 기한 내의 여러 진입이 작업 스레드를 재사용하고 각 전송을 한 번만 수행하며 이전 상태 패킷을 변경하지 않는지 검증합니다.
KvmHandoffPolicy는 각 폴링 대기를 8 μs로 제한하고 연속 두 번 실패하면 블로킹 대기로 전환하며 256번의 인계 후 다시 시도합니다. 호출 스레드와 작업 스레드는 각각 적응하며 호출 스레드는 원래 기한과 중지 토큰도 확인합니다. 원자적 준비 플래그는 스케줄링 힌트일 뿐이며 패킷, 콜백 수명, 취소 확인은 계속 뮤텍스로 관리합니다. NeverDKvmRunTests는 무효 폴링의 상한, 복구, 상대 지연 변화, 패킷 재사용 전 취소 확인을 검사합니다.
KVM x64/ARM64는 KvmRunControl을 통해 같은 전용 vCPU 작업 스레드에서 상태 준비, KVM_RUN, 상태 캡처를 수행합니다. EINTR 재시도에도 준비는 한 번이며 취소나 캡처 실패는 게시할 수 없습니다. KvmAArch64Machine.cpp의 주소 변환 유지와 전체 스칼라·벡터 전송도 하나의 단일 단계 기한을 공유합니다. 호출 스레드는 완료 확인 후 커밋하며 ISA 해석, RAM 트랜잭션, OS 정책과 관찰자를 담당합니다. 네이티브 ARM64 실기 증거는 아직 없습니다.
ReusesCapturedStateAndInstallsHostChangesAcrossFaultsAndStops는 호스트가 일반 레지스터, 첫 번째와 마지막 XMM 레지스터, MXCSR 및 x87 제어어를 변경한 뒤 연속 실행과 실제 CPU 저장을 검증합니다. 정지된 진입 이후의 실제 FXSAVE64 바이트로 모든 물리 80비트 레지스터, TOP, 태그, 연산 코드와 포인터를 확인하며 반복 나눗셈 예외도 재사용을 무효화합니다. 이 머신 경계 테스트는 checked 프로필에 추가 x87 명령을 허용하지 않습니다.
NeverDKvmStateTransferTests는 실제 KVM 실행 후 레지스터 또는 XSAVE 읽기 실패를 주입하고 변경되지 않은 입력으로 재시도합니다. 독립적인 정수와 패킹된 바이트 결과로 수집 실패 후 이미 진행된 네이티브 상태를 재사용하지 않는지 확인합니다. 이 실행 파일만 ioctl을 래핑하며 네이티브 호스트가 없으면 명시적으로 건너뜁니다.
NeverDKvmStateTransferTests는 실제 KVM에서 KVM_CAP_SYNC_REGS 미지원, 개별 지원, 동시 지원 및 조회 실패를 검증합니다. SynchronizedCapturesRemoveOnlySupportedReadIoctls는 실제 읽기 횟수와 연속 스텝 뒤의 전체 CPU 상태를 확인합니다. CancelledWarmEntryRequiresFreshSpecialStateOnRetry는 취소 후 특수 레지스터를 다시 읽도록 요구합니다. 캡처 실패, 정수/SIMD 재시도, 추측 RAM 롤백, 예외 우선순위에도 같은 기능 행렬을 적용하며 네이티브 실행이 불가능하면 명시적으로 건너뜁니다.
Checked ARM64는 하나의 완전한 상태 커밋 경계를 사용합니다. Registers.def가 39개 스칼라 필드와 32개 128비트 벡터를 정의하며 captureAArch64State는 모든 읽기, 선언된 폭과 NZCV 정규화를 완료한 뒤 한 번에 게시합니다. Unicorn/KVM/WHP/HVF는 TPIDR_EL0, TPIDRRO_EL0, TPIDR_EL1, FPCR, FPSR를 포함한 같은 상태를 전송합니다. 네이티브 어댑터는 CPACR_EL1로 FP/SIMD를 활성화합니다. 읽기 실패나 진입 취소 시 호출자의 전체 상태가 보존됩니다.
ARM64 KVM/WHP/HVF 초기화는 전용 AArch64MachineProbe.def 프로그램을 실행합니다. NOP, 양의 무한대 방향으로 반올림하는 FP32 덧셈, 두 레인의 SIMD 덧셈입니다. 각 단계에서 39개 스칼라 필드와 32개 벡터를 모두 비교하여 TLS, NZCV, 결과 상위 비트 초기화, FPCR/FPSR 보존 및 누적 상태를 확인합니다. 감독자 전용 모니터 메모리와 하나의 전체 마감 시간을 사용합니다. 이 검사는 제한된 초기화만 검증합니다. Linux ARM64 KVM과 Windows ARM64 WHP의 워크로드 검증은 아직 남아 있습니다. macOS 네이티브 결과는 HVF 가이드에 기록되어 있습니다. 이 프로그램에는 키가 비활성화된 A/B 반환 주소 서명 및 인증과 보호되지 않은 페이지의 네 가지 BTI 명령도 포함됩니다.
프로브는 MRS CTR_EL0를 두 번 실행하고 DC CVAU, DSB ISH, IC IVAU, ISB를 실행하여 캐시 구성의 안정성과 전체 상태를 확인합니다. Checked EL0/EL1은 원래 명령어, 이름이 있는 기본 DSB 옵션, ISB SY를 허용합니다. CTR은 선택한 가상 CPU에서 읽으며 전송 방식에 따라 다를 수 있습니다. 캐시 대상은 현재 권한으로 읽을 수 있는 일반 RAM이어야 하며 비정렬 주소와 별칭도 허용합니다. 다른 대상은 미지원으로 거부하고 캐시 유지 작업은 데이터 읽기/쓰기 관찰 이벤트를 만들지 않습니다. 투영은 명령 실행의 일관성을 유지하지만 개별 캐시 내용이나 병렬 하드웨어 SMP를 모델링하지 않습니다. NeverDAArch64CacheTests는 전체 상태, 읽기 전용 페이지 끝, 거부, 중지, 컨텍스트, 예산 및 페이지를 넘는 RW/RX 별칭을 통한 guest 코드 갱신을 검증합니다. 사용할 수 없는 KVM/WHP 호스트는 명시적으로 건너뜁니다.
x64 KVM/WHP/HVF 네이티브 초기화는 비공개 supervisor 페이지에서 X64MachineProbe.def를 실행합니다. 하나의 기한 안에 NOP, 양의 무한대 방향으로 반올림하는 FP32 덧셈, 두 레인 SIMD 덧셈, FS/GS 로드와 CS/SS/CR8 읽기를 수행하며 각 단계에서 전체 스칼라, XMM, 물리 x87 및 제어 상태를 비교합니다. x64와 ARM64 검사는 물리 메모리의 독점 실행 임대를 요구합니다. MemoryProjection은 캐시 식별 정보(ISA, 주소 공간, 매핑 세대, 권한, 모니터 구성)와 ISA별 확정된 페이지 테이블 루트 이력을 소유합니다. 비공개 바이트를 다시 쓰기 전에 캐시를 무효화하므로 실패한 재구축의 부분 테이블이나 호출자의 오래된 루트를 재사용할 수 없습니다. 이 검사는 제한된 초기화만 검증합니다. Linux ARM64 KVM과 Windows ARM64 WHP의 워크로드 검증은 아직 남아 있습니다. macOS 네이티브 결과는 HVF 가이드에 기록되어 있습니다.
공유 XSAVE 디코더는 표준 형식과 압축 형식의 SSE 초기 상태를 구분합니다. XSTATE_BV[1]이 0이면 두 형식 모두 XMM을 초기화하지만 표준 형식은 MXCSR을 읽고 검증하며 압축 형식은 MXCSR을 초기화합니다. X64XsaveCases.def는 독립적인 데이터 배치와 직접 작성한 호스트 XRSTOR 프로그램을 제공합니다. X64XsaveTests.cpp는 거부 시 상태의 원자성을 확인하고 호출자의 FP/SSE 상태를 보존하면서 두 형식을 실제 호스트 실행과 비교합니다. 호스트 아키텍처나 필요한 명령 기능을 사용할 수 없으면 명시적으로 건너뜁니다.
X64FPState.def는 압축 AVX, AVX-512, CET_U/CET_S, AMX 전송 배치와 구성 요소의 64바이트 정렬을 선언합니다. 존재하는 확장 데이터는 모두 0인 초기 상태여야 하며, 없는 구성 요소의 데이터와 정렬 패딩은 상태를 정의하지 않습니다. 배치 비트가 오프셋을 결정하고 알 수 없는 배치, 초기 상태가 아닌 데이터, 잘못된 길이는 공개 전에 실패합니다. CompactedOffsetsFollowLayoutRatherThanPresentBits, WideLayoutIgnoresAbsentComponentsAndAlignmentPadding, InitialCETComponentsDoNotHideFPState, InitialWideComponentsDoNotHideFPState가 872바이트와 10752바이트 WHP 패킷을 검증합니다. 이 전송 지원은 해당 확장 명령 실행을 허용하지 않습니다.
WhpXsaveRegisters.def는 이름이 있는 x87/SSE 제어 레지스터로 완전한 XSAVE 패킷을 보완합니다. 마지막 연산 코드와 명령/데이터 포인터를 명시적으로 쓰고 호스트에서 읽습니다. 패킷의 0 필드는 보완할 수 있지만, 0이 아닌 메타데이터 충돌이나 공통 제어값 불일치는 상태 공개 전에 실패합니다. NamedMetadataRestoresOmittedPacketFields는 전체 FP 데이터를 유지하면서 누락 필드를 검증합니다.
네이티브 FOP/FIP/FDP는 호스트 x87 저장·복원 규칙을 따릅니다. 마스크되지 않은 대기 예외가 없으면 AMD는 이 필드를 0으로 만들 수 있으며 스냅샷은 관측값을 유지합니다. X64MachineProbe.def와 정밀 NOP/컨텍스트 테스트는 일관된 대기 예외를 설정하여 모든 필드를 유효한 상태에서 차이를 숨기지 않고 비교합니다. 호스트 프로세스 FXRSTOR64/FXSAVE64 참조는 두 상태를 검사하며, 백엔드는 호스트 결과를 입력 메타데이터로 대체하지 않습니다.
NativeGuestRAMDistinguishesEntryFromCaptureLoss는 실제 게스트 FXSAVE64가 RAM에 저장한 전체 FP/SSE 상태를 호스트 XSAVE 결과와 비교합니다. 두 API 모두 직접 설치와 게스트 내부 FXRSTOR64를 기본 포인터 저장 기능 및 명시적으로 선택한 호스트 지원 설정에서 검사합니다. 진입, 게스트 실행, 캡처 경계를 구분하며 값을 보정하지 않고 불일치를 실패로 유지합니다. 경계 행렬은 대기 중인 마스크되지 않은 x87 예외도 검사하며, 호스트 프로세스의 FXRSTOR64/FXSAVE64 참조 결과와 프로세서 공급업체를 기록하여 조건부 포인터 저장 의미와 WHP 전송 동작을 구분합니다.
공통 encodeX64XsaveState / decodeX64XsaveState 코덱은 표준·압축 FP/SSE 패킷, 물리 TOP 순환, 누락된 구성 요소의 초기 상태 및 원자적 검증을 소유합니다. WHP는 완전한 XSAVE API를 사용하며 WHvGetVirtualProcessorState / WHvSetVirtualProcessorState를 우선하고 이전 XSAVE API를 호환 경로로 사용합니다. 이전 개별 x87 레지스터 인터페이스는 완전한 패킷을 대체할 수 없습니다. 초기 상태가 아닌 확장 구성 요소, 잘못된 헤더·제어 값 및 잘린 캡처는 명시적으로 실패합니다. WHP 매핑 실패는 진단을 위해 HRESULT, GPA 및 크기를 보존합니다.
CheckedX64Instructions.def는 기존 CPU 백엔드에서 8/16/32/64비트 부호 없는 MUL과 CBW/CWDE/CDQE/CWD/CDQ/CQO를 허용합니다. NeverDX64IntegerTests는 독립적인 X64IntegerCases.def 인코딩과 예상값을 사용하여 두 권한 수준에서 부분 레지스터 보존, 32비트 제로 확장, 곱의 상위·하위 결과, 정의된 CF/OF 및 부호 확장 시 플래그 보존을 검증합니다. 일반 RAM 곱셈은 전체 접근 범위의 권한 검사와 읽기 관찰 콜백을 유지하며, 오류나 관찰 콜백의 중지는 암시적 출력 레지스터와 PC를 보존합니다. 장치 피연산자는 지원하지 않습니다. checked Unicorn에서도 실행하며 사용할 수 없는 네이티브 백엔드는 명시적으로 건너뜁니다.
X64BitInstructions.def는 16/32/64비트 레지스터 및 일반 RAM의 BT/BTS/BTR/BTC를 허용합니다. 레지스터 비트 인덱스는 피연산자 너비의 부호 있는 값으로 전체 워드를 선택하며, 즉시값은 기준 워드 안에 머뭅니다. 주소 너비에 따른 절단은 FS/GS 기준 주소를 더하기 전에 적용됩니다. 프로세서가 CF와 쓰기 값을 제공하고, RAMTransaction은 관찰 콜백이 수락할 때까지 결과를 비공개로 유지합니다. 전체 범위 권한 검사는 독립 페이지 할당과 별칭을 포함하며, 중지·콜백 실패·페이지 접근 거부 시 원래 CPU와 RAM을 보존합니다. LOCK은 자연 정렬된 메모리 수정 형식만 허용하며 MMIO와 하드웨어 병렬 SMP는 지원하지 않습니다. X64BitStringTests.cpp는 독립 인코딩을 실제 x64 호스트 실행과 비교하고 음수 인덱스, 너비 절단, 페이지 경계 접근, 취소, 잘못된 LOCK 형식을 검사합니다. Intel 명령어 참조를 참고하세요.
X64StringInstructions.def는 일반 RAM의 8/16/32/64비트 MOVS/STOS/LODS를 관리하며, CLD/STD는 다른 플래그를 보존하면서 방향만 바꿉니다. REP의 각 요소는 관찰 전에 전체 피연산자를 검사하고 재개 경계에서 확정됩니다. 후속 오류가 발생해도 완료한 요소는 유지되며, 중지나 콜백 예외는 현재 요소를 변경하지 않습니다. FS/GS는 주소 폭을 자른 뒤 소스에만 더합니다. AL/AX 로드는 상위 비트를 보존하고 EAX 로드는 0으로 확장합니다. 32비트 주소 모드에서 반복 횟수가 0이면 카운터 상위 비트가 0이어야 하며 MOVS/STOS의 참여 주소 레지스터도 동일합니다. 그렇지 않으면 실제 CPU 구현마다 결과가 다릅니다. MOVS/STOS/LODS의 REPNE 형식과 STOS/LODS 장치 피연산자는 아직 지원하지 않습니다. X64StringTransferTests.cpp는 독립적인 호스트 명령으로 폭, 방향, 중첩, 0회 반복을 비교하고 권한, 별칭, 주소 순환, 오류와 재개도 검사합니다. 자체 WDK 리소스 드라이버는 driver_resource_strings.def로 STOS/LODS의 네 폭을 모두 실행합니다.
X64StringInstructions.def는 일반 RAM의 8/16/32/64비트 CMPS/SCAS와 REPE/REPNE도 관리합니다. 각 요소는 관찰 전에 전체 읽기 범위를 검사하고 여섯 산술 플래그를 갱신하며 첫 종료 조건에서 멈춥니다. 데이터 오류는 이번 연속 REP 시작 시점의 플래그를 복원하면서 완료된 포인터와 카운터 변경을 유지합니다. 공개 API로 재개하면 게시된 CPU 상태에서 다시 시작합니다. 중지와 관찰 예외는 현재 요소를 변경하지 않으며 조기 종료 후 다음 요소를 읽지 않습니다. FS/GS는 CMPS 소스에만 적용되고 SCAS는 누산기와 사용하지 않는 소스 레지스터를 유지합니다. 장치 피연산자와 모호한 32비트 0회 반복 상위 비트는 제외됩니다. X64StringComparisonTests.cpp는 독립 호스트 명령으로 플래그, 방향, 별칭, 주소 순환, 권한과 복구를 비교하고 Linux x64 신호로 실제 오류 시점의 레지스터를 검사합니다. 자체 WDK 리소스 드라이버는 driver_resource_strings.def로 네 폭의 두 조건 반복 형식을 실행합니다. Intel 명령 참조를 참고하세요. Linux 네이티브 검증은 첫 요소 실행 전후의 오류를 검사하며, Intel의 진입 flags 복원과 Hyper-V의 AMD EPYC 7763에서 관측한 마지막 비교 flags 유지를 구분합니다(네이티브 관측). 알 수 없는 CPU 제조사는 명시적으로 실패합니다. checked 게스트는 모든 백엔드에서 진입 flags를 복원합니다.
활성 WHP CPU는 하나의 네이티브 파티션을 공유하며 마지막 해제와 재생성은 같은 레지스트리 잠금으로 직렬화합니다. WhpResourceCache.h는 협력 실행용 VP 0을 재사용하며 논리 CPU를 전환하기 전에 해당 VP와 매핑을 해제합니다. 병렬 CPU는 별도의 VP와 전용 GPA 영역을 유지합니다. 레지스터 전송, XSAVE 및 취소는 각각의 VP를 대상으로 합니다. x64는 호스트의 기본 XSAVE 기능 집합을 유지하고 WHvGetPartitionProperty로 실제 구성을 검증합니다. 기본 스케줄링은 협력 방식입니다.
NeverDX64FPTests는 전체 79개 시작 상태 손상 위치와 독립적으로 어셈블한 X64ProbeCases.def의 네이티브 실행, 단일 기한 및 게스트 RAM 보존을 검사합니다. NeverDProjectionCacheTests는 호출자 변경, ISA 순서, 루트 이력, 권한/모니터 구성, 매핑 세대, 주소 공간 식별 및 재구축 실패를 검사합니다. NeverDRunControlTests의 WhpXsaveTests.cpp는 새 API와 이전 API 패킷, 모든 TOP, 크기 범위 및 실패 시 상태 보존을 검사합니다. 이 메모리 프로토콜 테스트는 네이티브 WHP 증거를 대체하지 않으며 사용 불가능한 네이티브 전송은 명시적으로 건너뜁니다.
XSAVE 검증 진단은 크기 조회, 로컬 데이터 준비, 캡처 데이터 디코딩을 구분하고 API 이름, 반환 바이트 수, 용량, 제한된 헤더·제어 필드를 보존합니다. 독립적인 예상값은 WhpHostFailureCases.def에 있으며 게스트 레지스터 데이터는 출력하지 않습니다. InvalidInputReportsPreparationWithoutHostMutation은 잘못된 입력이 호스트를 호출하거나 호스트 데이터를 바꾸지 않는지도 검증합니다. 공유 ISA 코덱이 검증을 전담합니다.
WHP의 기능 조회, 파티션/가상 CPU 초기화, 레지스터/XSAVE 전송 및 실행 중 발생한 호스트 API 오류는 HRESULT와 WhpProtocol.def에 선언된 API 이름을 보존합니다. 기능 조회 실패는 형식이 지정된 사용 불가 결과를 유지합니다. WhpHostFailureCases.def는 취소와 동시에 발생한 호스트 오류 및 최신/레거시 XSAVE 조회·설치·캡처 실패에 대한 독립적인 예상 결과를 제공합니다. Windows 전용 CI는 네이티브 210건 통과를 요구합니다. 매핑 16건, 시작 2건, FP/컨텍스트 10건, 공유 CPU 7건, 정수 8건과 NativeInstallRetainsFPStateBeforeAnyGuestExecution의 두 API 변형입니다. 마지막 두 테스트는 게스트 실행 전에 전체 FP/SSE와 독립적으로 읽은 메타데이터를 비교합니다. 등록 누락, 건너뛰기, 비활성화 또는 미실행은 네이티브 증거 감사 실패로 처리됩니다. 추가 26개 검사는 두 권한 수준의 모든 X64BitStringTests.cpp 사례를 포함합니다. Windows PE64는 WHP 프로세스 64개와 독립 네이티브 Windows 대조 11개를 필수로 실행합니다.
NeverDMemoryLifecycleTests는 Unicorn과 독립적으로 빌드되며 네이티브 전용 구성에도 등록됩니다. Unicorn을 끄면 전용 소프트웨어 투영/장치 사례는 명시적으로 건너뛰지만, 호스트에 맞는 공유 CPU 사례는 유지됩니다. WhpMemoryTests.cpp는 WhpMemoryCases.def의 16개 사례로 네이티브 메모리 API를 분리합니다. 페이지/투영 크기, 공유/독립 할당, 미접근/상주 바이트, 첫 가상 프로세서의 존재 여부를 확인합니다. 각 사례는 두 논리 소유자를 유지하면서 매핑된 파티션을 반복 전환하고, 비활성 소유자를 제거한 뒤 남은 매핑을 다시 만들지 않고 사용할 수 있는지 확인합니다. 실제 매핑 오류는 HRESULT를 보존하며 테스트를 실패시킵니다. 이는 메모리 API 증거이며 명령 실행 증명은 아닙니다.
X64MachineProbe.def의 시작 진단은 실패한 명령과 불일치하는 모든 스칼라, TLS, 권한, x87 제어 필드, 물리 FP 레인 및 XMM 워드를 나열하고 예상값과 관측값을 보존합니다. DiagnosticIdentifiesStepFieldAndBothValues는 독립적인 예상 메시지로 검증합니다. 상태 비교는 완전한 일치를 계속 요구하며, 진단은 전송 손실과 명령 실행 문제를 구분합니다. 실패한 네이티브 프로브는 통과로 처리하지 않습니다.
WhpResourceTests.cpp는 캐시 재사용, 교체 전 제거, 실패 복구, 기한과 중지의 경합을 검증합니다. LogicalCPUSwitchingRestoresPhysicalFPAndTLS는 두 권한 모드에서 두 머신을 번갈아 실행하고 독립적인 물리 x87/XMM 및 FS/GS 상태를 확인한 뒤 한 머신을 제거하고 나머지를 재개합니다. Windows CI는 두 권한 모드의 WHP 사례를 모두 요구합니다.
NEVERD_ENABLE_SEMANTIC_TESTS의 기본값은 ON이며 unittests/semantic의 테스트 그룹과 통합 실행 대상을 제어합니다. Unicorn 없이 네이티브 CPU 테스트를 빌드하려면 BUILD_TESTING=ON을 유지하고 NEVERD_ENABLE_SEMANTIC_TESTS=OFF와 NEVERD_EMULATION_BACKEND_UNICORN=OFF를 설정합니다. 적절한 SDK 헤더가 있는 Windows ARM64/MSVC를 포함하여 네이티브 KVM/WHP 테스트를 계속 빌드할 수 있습니다. Windows ARM64에서 Unicorn을 활성화하려면 ARM64 LLVM-MinGW 도구 모음이 필요합니다. 이 빌드 분리는 ARM64 네이티브 실행 검증을 의미하지 않습니다.
네이티브 CPU 전용 CI는 고정 버전의 Capstone 소스를 초기화하고 검증된 LLVM 패키지를 사용합니다. NEVERD_ENABLE_SEMANTIC_TESTS=OFF와 Unicorn 어댑터 비활성화를 함께 설정하면 CPU 테스트의 구성, 빌드 및 링크에 Unicorn 소스가 필요하지 않습니다. 서명 데이터와 외부 코퍼스도 필요하지 않습니다. 기본 CI에서는 전체 의미론 테스트 그룹을 계속 활성화합니다.
ci.yml의 수동 프로필 native_cpu_only는 native_cpu_backend=whp로 Windows x64(기본값)를, native_cpu_backend=kvm으로 Ubuntu x64를 선택합니다. NativeCPUTests.def는 CPU·프로세스 요구 사항을 공유하고 백엔드 전용 대상과 사례를 별도로 선언합니다. run_native_cpu_ci.py --require-whp 또는 --require-kvm은 호스트를 확인하고 모든 대상을 빌드한 뒤 CTest를 실행하며 목록, JUnit, 로그와 결과별 수를 보존합니다. CTest가 성공해도 필수 사례가 없거나 건너뛰면 실패합니다. CI는 Unicorn을 비활성화하고 --with-drivers는 선택한 백엔드에서 동일한 원래 주소·재배치 드라이버 집합을 요구합니다. 컴파일과 초기화 탐색은 게스트 실행이나 ARM64 검증을 입증하지 않습니다. Ubuntu 프로필은 업스트림 서명된 Clang/LLD 21 패키지를 사용합니다. Clang 18/19의 CR8 선언은 고정된 WDK 헤더와 충돌합니다. Linux 네이티브 검증은 CMake 4.2.3을 사용합니다. NeverDNativeDriverTests는 NO_PRETTY_VALUES를 지정하여 매개변수 진단 출력과 관계없이 CTest가 선언된 사례 이름을 유지하도록 합니다.
네이티브 CI는 빌드 전에 sccache --zero-stats를 실행합니다. 탐색에 실패하면 C/C++ 컴파일러 실행기를 해제하고 기존 컴파일러 설정과 필수 테스트 목록을 유지합니다. 구성 또는 빌드 실패는 여전히 작업 실패로 처리합니다.
KVM 검증은 스스로 종료하지 않는 실제 vCPU의 취소와 KvmStateTransferCases.def의 상태 전송 결과 48개를 요구합니다. ioctl 캡처와 선택적 기능 질의 실패가 포함됩니다. 추가 동기화 레지스터 모드는 호스트가 지원할 때 실행하며, 지원하지 않으면 명시적으로 건너뜁니다. 안정적인 매개변수 이름은 ioctl 숫자나 튜플 형식에 의존하지 않습니다. 프로토콜 테스트는 네이티브 실행을 보완하며 대체하지 않습니다.
native-host-probe.yml은 Linux와 Windows x64/ARM64 호스팅 runner에서 독립적인 probe_native_host.py를 실행합니다. NativeHostProbe.def는 기능 조회, VM/vCPU 생성 및 정리 증거의 순서를 선언합니다. 보고서는 소스/바이너리 해시, 네이티브 호스트 ISA와 각 호스트 상태 코드를 보존합니다. setup_ready는 초기화만 증명하며 게스트 명령어는 실행하지 않습니다. API/장치 기능 부재는 unavailable로 기록하고 빌드, 초기화, 정리, 시간 초과 및 잘못된 증거는 작업 실패로 처리합니다. ARM64 호스트 가용성은 실행마다 확인해야 하며, 이 프로브는 ARM64 워크로드 검증을 대신하지 않습니다. 두 Linux 워크플로는 prepare_kvm_ci.py로 기존 KVM 문자 장치의 접근 권한을 현재 호스팅 runner 계정에만 부여하고 장치 식별 정보와 권한을 기록합니다. 로컬 및 자체 호스팅 환경은 거부하며 없는 장치를 만들지 않습니다.
windows-alignment-oracle.yml은 check_windows_alignment.py와 WindowsAlignmentCases.def로 독자적인 x64 Windows 예외 관측 72개를 수집합니다. 정렬을 요구하는 SSE 형식 아홉 가지에 대해 비정렬 주소/권한 사례 일곱 가지와 정렬되었지만 접근할 수 없는 페이지 대조 사례를 실행합니다. 예외 코드, 인수, 장애 PC, 저장된 컨텍스트, 원시 출력, 소스/바이너리 해시를 보존하고 입력과 RAM이 바뀌지 않았는지 확인합니다. 이는 OS 동작의 근거이며 KVM/WHP 실행 검증이나 SEH 지원 추가를 의미하지 않습니다.
native_cpu_only=true와 native_driver_tests=true를 지정하면 Unicorn 없이 NeverDNativeDriverTests를 활성화합니다. 구성 전에 build_wdk_driver_fixtures.py가 공식 Microsoft WDK/SDK 10.0.26100.6584 패키지 전체의 SHA-256을 검증하고 원본 소스에서 일반/CFG/DBG 드라이버 이미지 48개를 다시 빌드합니다. WDKDriverFixtures.def는 패키지 식별자, 컴파일러·링커 인수와 픽스처 연결을 선언합니다. 수정하지 않은 Microsoft 파일과 라이선스는 로컬 빌드/캐시 디렉터리에 보관하며 CI는 빌드 메타데이터와 로그만 업로드합니다. 매니페스트에는 도구 버전, 명령, 소스·헤더 해시와 출력 이미지 해시를 기록합니다.
NativeDriverTests.def는 DriverBuiltinImages.def와 DriverBackendParityCases.def의 115개 작업 전체에서 WHP 결과 230개를 요구합니다. 기본 이미지 27개, WDK 이미지 48개와 요청 시나리오 40개를 원본 및 재배치 주소에서 실행합니다. 전체 필수 목록은 5003 CPU + 230 WHP + 25 SEH + 77 scheduling + 30 wait sets = 5365입니다. 대기 집합 검사 30개는 이식 가능한 모델 사례 16개와 독자적인 네이티브 드라이버 사례 14개입니다. run_native_cpu_ci.py --with-drivers는 Unicorn을 끄고 정확한 목록과 JUnit 증거를 보존합니다. 필수 픽스처 누락이나 건너뛰기는 선택형 게이트를 실패시키며, 일반 빌드에서는 외부 픽스처가 선택 사항입니다. 고정 이미지의 예상 재배치 거부는 유지됩니다. ARM64 네이티브 게스트 실행은 아직 검증되지 않았습니다.
InterruptionRetainsPhaseCauseDeadlineAndLease는 서로 다른 시작 명령 두 개 앞에서 기한 만료, 중지, 두 원인의 동시 중단을 주입합니다. 정확한 단계 진단, 메시지 소유 수명, 오류 타입과 원인 비트, 단계 간 동일한 기한, 메모리 소유권 해제를 검사합니다. 실제 전송 실패와 상태 불일치는 계속 구분합니다. 네이티브 x64 시작 검증 예산은 5 s이며 일반 게스트 기한과 단일 단계 유예는 유지됩니다.
WhpResourcePolicy.def는 ISA 검증 전 WHP x64 및 ARM64 리소스 생성에 별도의 30 s 기한을 부여합니다. 동기 호스트 설정이 끝나면 리소스를 공개하기 전에 기한을 확인합니다. 명령 프로브와 일반 게스트 기한은 각자의 제한을 유지합니다. WhpResourceTests.cpp는 초기화 중단의 타입과 원인 진단, 취소 후 폐기, 호스트 오류 우선순위 및 일반 실행 기한의 유지를 검사합니다.
X64PopFlagsTests.cpp는 두 권한과 driver-strict에서 허용된 플래그 입력 256개와 초기 상태 2개, 인코딩 9개, 입력 64비트 전체, 읽기 전용·실행 가능 별칭, 페이지 경계 오류와 복구, 관찰자 중단·실패, 장치 스택 거부, 후속 네이티브 명령 경계를 검사합니다. X64PopFlagsOracle은 x64 호스트에서 원본 명령을 독립 실행해 CPL3/IOPL0과 정확한 스택 소비량을 확인합니다. driver_resource_flags.def는 원본 WDK 리소스 드라이버가 두 피연산자 폭으로 플래그를 설정·해제·복원하도록 합니다. 전체 정수·제어·x87·SSE 상태를 보존하지만 게스트 TF/NT/AC/ID 지원이나 ARM64 네이티브 실행을 입증하지는 않습니다.
X64StatusFlagsTests.cpp는 CLC/STC/CMC, LAHF/SAHF, AH 입력 256개와 허용 플래그 조합, 모든 REX, 전체 CPU 상태, 메모리 보존, 관찰자 중단·오류, 저장 문맥 및 네이티브 ADC/저장 재개를 검사합니다. 잘못된 LOCK은 부작용 없이 거부합니다. 독립 호스트 명령 검증은 CPUID를 확인한 뒤 접두사 24종을 검사합니다. 원본 WDK 리소스 드라이버가 다섯 명령을 실행하며 필수 네이티브 결과 22개가 추가됩니다. 사용할 수 없는 호스트·ISA는 명시적으로 건너뜁니다. 이식 가능한 Unicorn 프로필도 같은 일곱 사례를 실행합니다. 의존 라이브러리 직접 테스트는 16/32/64비트 AH와 LOCK 동작, 명시적 REX 레지스터, 롱 모드 기능 미지원 거부를 검사합니다.
X64DoubleShiftTests.cpp는 모든 허용 imm8/CL 횟수, 겹치는 레지스터와 확장 레지스터, 정의된 플래그, 페이지 경계 RAM 관찰, 취소, 권한·미매핑·장치 오류, LOCK·미정의 횟수 거부, 문맥 및 네이티브 ADC 재개를 검사합니다. 독립 호스트 검증은 원본 명령을 5,184회 실행하고 원본 WDK 드라이버의 프로브 12개가 레지스터와 RAM 형식을 검사합니다. 필수 네이티브 결과 145개가 추가됩니다.
X64ScalarShiftTests.cpp는 모든 바이트 횟수, 두 캐리 입력, 0·모든 비트 1·부호 있는 피연산자, 암시적 1 형식, AH/SPL 및 횟수 레지스터 별칭, 전체 CPU 상태, 정확한 RAM 범위, 관찰 콜백 롤백, 오류와 컨텍스트 재개를 검사합니다. 독립 네이티브 대조는 65,536회 실행을 확인합니다. WDK 리소스 드라이버에 독자적인 프로브 72개를 추가하며 KVM/WHP 검증은 이 명령군의 결과 769개를 필수로 요구합니다. 마스킹 후 횟수가 0일 때만 모든 플래그 보존이 보장됩니다. 0이 아닌 횟수로 RCL/RCR의 캐리 고리를 완전히 회전하면 피연산자와 CF는 유지되지만 OF는 미정의이므로 대조에서는 해당 비트만 제외합니다.
X64LoopTests.cpp는 독자적인 인코딩 21개, 카운터 순환, 4 GiB 이상의 부호 있는 상대 분기 대상, 전체 CPU/RAM 상태 보존, 관찰 취소, 별도 페이지에 걸친 명령 가져오기, 대상 가져오기 오류와 컨텍스트 복원을 검사합니다. 불완전한 명령은 실행 전에 거부하며 대상 가져오기 실패 시 완료된 분기의 카운터와 PC를 보존합니다. WDK 리소스 드라이버는 독자적인 프로브 12개를 추가합니다. KVM/WHP는 감독자, 사용자 및 드라이버 계약에서 이 명령군의 결과 379개를 필수로 요구합니다. 원래 호스트 명령 대조는 최대 1,008개 사례를 실행하고 횟수를 보고합니다. AMD의 66H 분기가 성립하면 호스트 OS의 예약된 낮은 주소를 향하므로 해당 형식은 낮은 대상을 명시적으로 매핑한 게스트 행렬에서 실행합니다. Intel과 AMD의 대상 너비 및 REX.W 우선순위를 별도로 검사합니다.
X64BranchTests.cpp는 16개 Jcc 조건과 상대 JMP, 9개 접두사 조합, 짧은/근거리 형식, 4 GiB 이상의 부호 있는 상대 대상, 전체 CPU/RAM 상태, 관찰자 중단/오류, 페이지 경계 디코딩, 대상 명령 인출 오류 및 컨텍스트 복원을 확인합니다. 독립 Intel 호스트 기준은 원래 명령을 9,792회 실행하며 AMD 낮은 대상 형식은 게스트에서 검사합니다. 두 디코더 모델 모두 완전/잘린 바이트를 검사하고 네이티브 프로브는 실패 시 결과 비공개를 확인합니다. 독자적인 WDK 리소스 프로브 4개가 드라이버 정책을 검사합니다. KVM/WHP 게이트마다 필수 결과 274개를 추가합니다. AMD 소프트웨어 모델 검증은 네이티브 AMD 또는 ARM64 실행 증거가 아닙니다.
X64StackTests.cpp는 9개 테스트군으로 42개 인코딩을 다루며 폭, 주소, 전체 상태, 관찰 순서, 취소, 권한, 페이지 경계, 물리 별칭, 오류 복구, 장치 거부 및 컨텍스트 복원을 검사합니다. 독립 호스트 기준은 원래 명령을 실행하고 WDK 리소스 프로브 6개는 드라이버 경로를 검증합니다. KVM/WHP 네이티브 게이트마다 필수 결과 1135개를 추가합니다. 사용할 수 없는 실행기는 해당 필수 네이티브 게이트 밖에서 명시적으로 건너뜁니다.
X64FrameExitTests.cpp는 14개 LEAVE 인코딩, 유효 접두사 순서, 전체 RBP 주소 지정, 전체 레지스터 상태, 읽기 전용 별칭, 페이지 경계 프레임 폴트와 복구, 권한, 관찰자, 잘못된 주소, 장치 거부 및 컨텍스트 재실행을 검사합니다. 독립 호스트 오라클이 원래 명령을 42회 실행하고 WDK 리소스 프로브 5개가 드라이버 실행을 검증합니다. 두 네이티브 게이트에 각각 필수 결과 379개를 추가합니다.
X64FrameEntryTests.cpp는 14개 인코딩, 중첩과 겹침, 물리 별칭, 쓰기 전용 검사, 페이지 경계 오류와 복구, 관찰자 취소, 권한, 접두사 거부 및 컨텍스트 재실행을 검증합니다. 독립 호스트 대조는 882개 정상 실행과 Linux x64의 84개 오류 실행에서 스택 바이트와 레지스터를 비교합니다. 전송 주입 테스트 2개는 취소·실패 롤백과 아키텍처 오류 반영을 구분합니다. WDK 리소스 프로브 6개는 원래 드라이버 명령을 실행합니다. 필수 결과가 KVM에 508개, WHP에 507개 추가됩니다.
DriverSIMDSEHTests.cpp는 원본 SSE 오류 여덟 종류를 지원되는 네 처분과 x87 수정 거부, 두 네이티브 계약, 일반/CFG WDK 이미지, 두 로드 주소로 실행합니다. 백엔드별 열 결과와 순수 커널 SSE 레코드 검사 세 개가 필수입니다. driver_seh_simd.def가 사례와 모드를 정의하고 비동기 언와인드 테이블이 오류 헬퍼를 포함합니다. Microsoft 커널 10.0.26100.9549의 명령 경로를 격리 실행하여 107,744개 분류와 8,192개 복원을 독립적으로 검증했습니다. 이는 전체 Windows 커널에서 드라이버를 실행한 증거가 아니며 ARM64 네이티브 KVM/WHP도 미검증입니다.
C SEH 범위는 끝 주소를 포함하지 않는 반개방 구간입니다. 유효한 __C_specific_handler 착지점이 보호 구간 안에 있을 수 있습니다. LLVM 20.1.8은 구간 끝에 EndLabel + 1을 기록합니다. Windows OS 모델은 원래 경계를 유지하며 재배치 후에도 실행 가능 여부, 소유 함수, 후속 실행 주소의 일치를 각각 검증합니다. KernelSEHContinuationCases.def는 원본 픽스처 배치를 보존하고 ScopeEndLabelMayOverlapTheHandlerLandingPad는 상수 처리기와 필터를 검사합니다. 관련 테스트는 끝 주소 제외와 잘못된 대상 거부 후 디스패치 상태를 소비하지 않고 재시도할 수 있음을 확인합니다. 이 순수 모델 검사는 Unicorn을 비활성화한 NeverDNativeDriverTests에서도 실행됩니다.
대상까지 스택을 해제할 때도 원래 범위 끝을 사용합니다. 처리기 대상이 finally 보호 구간 안에 남아 있으면 해당 범위를 벗어나지 않습니다. FinallyRespectsRawScopeEndAtHandlerTarget는 경계 양쪽을 검사하고 Windows x64에서는 ntdll.dll!__C_specific_handler와 직접 비교합니다. NeverD는 컴파일러가 생성한 범위를 수정하지 않습니다. Clang 20/21로 빌드한 원본 픽스처는 편향된 끝 주소가 선택된 대상을 포함하므로 T, J 모드에서 게스트 실패를 반환합니다. Clang 23 빌드는 두 정리 루틴을 모두 실행합니다. LLVM 변경 #144745는 기존 +1 편향을 제거합니다. 이 컴파일러별 결과는 백엔드 오류와 구분합니다.
빌드 목록은 모든 자체 WDM/KMDF C 픽스처와 선택적 WDK CMake 경로를 포함합니다. 공개된 각 driver-*-scenario.json은 DriverBackendParityCases.def에 일반 및 CFG 사례가 있으며 소스, 빌드 또는 시나리오 연결이 빠지면 목록 테스트가 실패합니다. Original은 시나리오의 로드 주소 재정의를 지우고 이미지의 기본 베이스를 확인하며 Rebased는 선언된 재배치 베이스를 확인합니다. 드라이버 소유 IRP 시나리오는 자식 요청을 의도적으로 취소하므로 정상 정리 후에도 DriverNativeOutcomes.def는 예상된 전체 실패 결과를 유지합니다.
python3 scripts/build_wdk_driver_fixtures.py \
--output build-driver-fixtures --cache build-driver-packages
cmake -S . -B build-native -G Ninja \
-C build-driver-fixtures/fixtures.cmake \
-DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=ON \
-DNEVERD_ENABLE_DRIVER_EMULATION=ON \
-DNEVERD_ENABLE_SEMANTIC_TESTS=OFF \
-DNEVERD_EMULATION_BACKEND_UNICORN=OFFNeverDAArch64StateTests는 모든 스칼라 필드와 벡터의 두 워드 손상, 권한 변경, 부동소수점 미실행 및 전송 오류 진단 보존을 검사합니다. NeverDAArch64FPTests의 OriginalProgramChecksCompleteStateAndOneDeadline은 독립적으로 어셈블한 AArch64ProbeCases.def 명령을 실제 전송에서 두 권한으로 실행합니다. 테스트는 PC와 무관한 명령을 게스트 코드로 옮기며 모니터 페이지의 사용자 접근을 허용하지 않습니다. Unicorn 실행과 명시적 native 건너뛰기는 native ARM64 시작 증거를 대신하지 않습니다.
CheckedAArch64Instructions.def와 AArch64InstructionEffects는 EL0/EL1에서 제한된 기본 FP32/FP64 연산·비교·이동과 고정 폭 SIMD를 허용합니다. FPCR는 네 가지 반올림 모드, FZ, DN을 지원하고 FPSR는 누적 상태와 QC를 보존합니다. 미지원 제어·상태 비트는 변경 전에 거부합니다. FP16 연산, SVE/SME, 마스크되지 않은 예외, 선택적 확장과 목록 밖 형식은 명시적으로 실패합니다. Windows ARM64 드라이버 로딩이나 다른 OS 환경은 추가하지 않습니다.
AArch64InstructionEffects는 최대 128비트 피연산자의 스칼라·FP/SIMD 단일/쌍 RAM 범위를 소유합니다. 공유 주소 공간은 CPU 진입 전 모든 페이지를 검사하고 RAMTransaction은 선언된 전체 물리 쓰기만 커밋합니다. 128비트 쓰기는 실행 전에 두 개의 64비트 값으로 순서대로 관찰됩니다. 정지와 오류는 RAM, 벡터와 주소 갱신을 보존합니다. Xn/Vn 번호 중복은 유효하며 쌍 접근 범위의 주소 래핑은 거부됩니다. NeverDAArch64MemoryTests는 독립적인 AArch64CrossPageCases.def와 AArch64VectorMemoryCases.def를 사용합니다.
NeverDAArch64StateTests는 두 권한에서 전체 상태의 71개 읽기 위치, 폭 정규화, 누락된 리더와 재시도를 검사합니다. NeverDAArch64FPTests는 AArch64FPCases.def 원본 명령으로 모든 벡터 레인, 패킹 연산, 스칼라·벡터 FP, 네 반올림 모드, FZ/DN, 누적 FPSR, 컨텍스트와 거부 조건을 검증합니다. NeverDAArch64MemoryTests는 모든 페이지 교차 위치, 관찰 순서와 정지, 거부된 페이지, 별칭 및 복원된 벡터 입력을 검사합니다. NeverDUnicornStateTransferTests (UnicornStateTransferCases.def, CapturesDeclaredWidthsWithoutStaleUpperBits)는 실제 실행 후 모든 스칼라·벡터 읽기 실패를 주입합니다. 사용할 수 없는 네이티브 경로는 명시적으로 건너뛰며 네이티브 ARM64 KVM/WHP 실기 증거를 대신하지 않습니다.
NeverDAArch64MemoryTests는 두 권한 수준에서 Unicorn, KVM, WHP의 스칼라/쌍 명령 18종을 확인합니다. 모든 페이지 경계 오프셋, 부호와 폭, 관찰자 순서, 두 번째 페이지의 권한 거부/누락, 명시적인 오류 소비와 재시도, 반복된 물리 별칭, 별칭 교체 후 컨텍스트 복원을 검사합니다. 변경 전에 유효한 페이지 경계 로드가 거부되는 현상을 재현했습니다. 사용할 수 없는 전송은 명시적으로 건너뜁니다. Unicorn 및 교차 컴파일은 ARM64 KVM/WHP 실기 증거를 대신하지 않습니다.
NeverDDriverGuardMetadataTests (DriverGuardCases.def)는 플래그가 0인 비활성 CFG 메타데이터, 두 로드 주소에서 유지되는 대체 포인터, 잘못된 슬롯/대상 및 누락된 재배치를 검사합니다. 실행 사례는 명시적인 Unicorn/KVM/WHP와 driver-strict, checked-x64-v1을 사용하며 사용할 수 없는 백엔드는 개별적으로 건너뜁니다. DriverPublicCLICases.def는 호환성을 유지하는 v1 C API와 비교하는 CLI에 --backend unicorn을 지정합니다. 네이티브 및 auto 선택은 별도의 공개 인터페이스 검증을 유지하며 호스트 API를 사용할 수 없을 때 자동으로 대체하지 않습니다.
checked Unicorn은 MachineRunControl을 사용하며 ARM64 유지보수, 게스트 실행과 전체 상태 읽기를 한 단계 시간 한도에서 처리합니다. UC_HOOK_CODE는 명령 진입에서 빌린 정지 토큰과 기한을 확인합니다. 동기 엔진 호출은 반환 전에 hook 참조를 해제하지만 기계 단계는 상태 게시까지 제어를 유지합니다. Unicorn과 WHP는 전체 CPU 상태를 임시 저장하고 성공한 단계의 게시 직전에 같은 제어 조건을 확인합니다. WHP는 준비 전에 시간 한도를 한 번만 만듭니다. 확인된 x64 CPU 예외는 상태 읽기 중 도착한 정지 요청보다 우선합니다. 읽기가 취소되면 checked RAM 트랜잭션은 추측 쓰기를 버리며 비제한 소프트웨어 계약은 그대로입니다. MachineInterruptedError는 확인된 취소와 호스트 또는 상태 읽기 실패를 구분합니다. 공통 checked CPU는 Stopped 또는 Deadline을 반환하고 CPU/RAM을 유지하며 재시도를 허용합니다. 동시 정지 요청이 있어도 실제 실패는 BackendFailure로 남습니다.
상태 읽기 회귀 테스트: NeverDUnicornStateTransferTests, NeverDUnicornMachineControlTests: StopDuringCaptureCannotPublishAndAllowsRetry, ExpiredCaptureCannotPublishAndAllowsRetry, CompletedStoreCannotPublishCancelledCapture, StopDuringCaptureCannotHideRealGuestException. UnicornPublicCapture.CancellationKeepsTypedExitStateAndRAMConsistent; NeverDKvmStateTransferTests: PublicCancellationRetainsStateRAMAndFailurePriority.
NeverDUnicornMachineControlTests는 실제 x64와 ARM64 엔진의 두 권한 수준에서 UnicornMachineControlCases.def의 원래 저장 명령을 실행합니다. RejectedEntryPreservesStateAndRAMAndAllowsRetry는 단계 전 취소, 실제 게스트 진입 시 정지 또는 기한 만료, 전체 입력 상태와 RAM 보존, 이후 한 번의 성공적인 저장을 검증합니다. 테스트 전용 진입 래퍼는 하이퍼바이저 없이 실행하며 네이티브 ARM64/WHP 증거를 제공하지 않습니다.
RunDeadline::invoke는 중지되었거나 기한이 지난 WHP 실행을 호스트 호출 전에 거부하고, 취소 중에도 실제 호스트 결과를 보존하며, 빌린 중지 토큰을 해제하기 전에 인터럽트 콜백의 종료를 확인합니다. KVM과 WHP는 실행 임대를 보유한 호출 스레드에서 완전히 캡처된 비공개 상태를 검증한 다음 동시에 도착한 중지나 기한을 분류합니다. 실제 호스트·캡처 실패와 인증된 x64 CPU 예외가 우선합니다. 일반 성공 상태는 취소 확인이 끝날 때까지 비공개로 유지하며, 확인된 중단은 추측적 CPU/RAM 효과를 버리고 재시도를 허용합니다. 준비, 네이티브 실행, 캡처는 하나의 스텝 유예를 공유합니다. 협력적 취소를 제공하지만 엄격한 실제 시간 상한은 보장하지 않습니다.
NeverDRunControlTests에는 이식 가능한 NativeEntryTests.cpp와 Windows에서 WHP를 활성화할 때의 WhpEntryControlTests.cpp가 포함됩니다. 메모리 내 호스트 콜백으로 Hyper-V 없이 실행 거부, 재시도, 늦은 취소, 실제 오류 보존, 완료 결과의 우선순위와 확인된 콜백 수명을 검증합니다. NeverDKvmRunTests는 호출 스레드의 완료, 오류 우선순위와 재진입 거부를 확인합니다. 실제 NeverDKvmStateTransferTests는 KvmStateTransferCases.def의 원래 명령을 실행합니다. ActualCPUExceptionOutranksStopDuringCapture와 PublicCPUExceptionOutranksStopDuringCapture는 실제 레지스터/XSAVE 읽기 후 중지하여 나눗셈 예외, 원래 컨텍스트, RAM과 명시적 복구를 보존합니다. Wine의 Windows ABI에서 실행한 이식 가능한 테스트는 스레드와 제어 증거만 제공하며 네이티브 WHP 실행을 입증하지 않습니다. 사용할 수 없는 네이티브 전송은 명시적으로 건너뜁니다.
NeverDInstructionFetchTests는 Unicorn, KVM, WHP로 x64/ARM64 checked 프로그램을 커널 모드와 사용자 모드에서 실행합니다. InstructionFetchCases.def는 피연산자 형식 전환, 상대 분기, 코드 별칭을 통한 게스트·호스트 쓰기, 컨텍스트 복원, 권한 철회, 독립 페이지 저장소, 페이지 끝 미리 읽기, 잘못되거나 잘린 인코딩, 재귀 실행 거부를 검사합니다. Windows 네이티브 CI에서는 모든 x64 WHP 사례가 통과해야 합니다. 사용할 수 없는 호스트/ISA 조합은 명시적으로 건너뛰며, 이식 가능한 ARM64 실행은 네이티브 ARM64 지원 증거가 아닙니다.
WhpStateTransferTests.cpp는 두 세대 XSAVE API에 전송을 주입하여 변경 그룹, 전체 캡처, 패딩 무시, 부분 실패, 취소, 예외 우선순위와 파티션 재생성을 확인합니다. ContinuedStepsReuseCapturedRegistersAndFP는 생략된 설치를 세고 PartialTransferFailuresPreserveStateAndForceFullRetry는 전체 복원을 요구합니다. 이는 프로토콜 검사이며 네이티브 실행 증거를 대신하지 않습니다. 기존 네이티브 FP·상태 전환·드라이버·ring3 테스트도 필수입니다.
CancelledDirectRunPublishesACompleteBoundary는 direct 실행의 취소 확인 시 전체 상태가 게시되는지 검사합니다. FailedDirectCapturePreservesStateAndForcesFullRetry는 취소 중 레지스터, XSAVE 또는 메타데이터 캡처가 실패하면 호출자 상태를 보존하고 전체 재시도를 요구합니다. 두 API 세대 모두 일부 레지스터만 게시하면 안 됩니다.
WhpStateTransferCases.def는 통합된 32개 레지스터 읽기의 모든 부분 접두부 실패와 일곱 메타데이터 필드의 충돌도 검사합니다. 두 XSAVE API 세대 모두 호출자 상태를 보존하고 재시도 시 전체 상태를 복원해야 합니다. 동일한 테스트에서 스텝당 레지스터 읽기가 한 번인지, XSAVE가 생략한 메타데이터를 해당 읽기로 복구하는지도 확인합니다.
windows-pe64-v1은 PEB/TEB, 정적·동적 TLS, DllMain, 이름 기반 Win32 API 및 명시적 비순환 DLL 그래프를 갖춘 제한된 Windows x64/ARM64 콘솔 프로세스를 지원합니다. 게스트 모듈은 이름/서수 코드·데이터 가져오기, DIR64 재배치, 전달 내보내기 및 실제 로더 목록 식별자를 지원합니다. LoadLibraryA / LoadLibraryW, FreeLibrary, GetProcAddress는 설정된 모듈 카탈로그를 사용합니다. CRT/GUI, ARM64 스택 프레임 기반 사용자 SEH, 스레드 및 일반 Windows 앱 호환성은 미완성이며 네이티브 ARM64 KVM/WHP 증거도 아직 없습니다.
입력 총 바이트와 이미지 전체 범위는 각각 memory_limit로 제한하고 런타임 매핑도 이미지 예산에 포함합니다. 준비 단계는 65,536개 레코드, 64 MiB 메타데이터 읽기, 이름 길이와 전체 작업 기한을 공유합니다. 호스트 I/O의 강제 시간 보장은 없습니다. 독자 EXE→DLL→DLL은 재배치, 서수, 공유 데이터, API 포인터, MEM_IMAGE, 목록, EXE TLS attach/detach를 확인합니다. NeverDWindowsProcessTests는 원본 네이티브 Windows 대조, NeverDPEProgramExportsTests는 잘못된 메타데이터와 예산, NeverDProcessPublicTests는 C ABI/CLI 일치를 검증합니다. 사용할 수 없는 백엔드는 명시적으로 건너뜁니다.
WindowsProcess.ClockServicesUseConsistentUnitsAndPreserveLastError는 원본 x64/ARM64 PE에서 QueryPerformanceFrequency, 단조 카운터, FILETIME, 순환 tick, 상대 지연 호출을 실행합니다. WindowsProcess.UnmodeledDelaysStopWithoutClaimingCompletion는 경고 가능 대기, 양수 절대 시각, INT64_MIN 간격이 완료 전에 거부되는지 확인합니다. NativeWindowsOracleRunsTheSameExecutable는 성공하는 시계 시나리오를 Windows에서 직접 실행합니다. 두 게스트 회귀는 Unicorn을 끈 KVM/WHP 인수 검사에서 필수입니다. 원본 샘플은 BOOLEAN 인수 레지스터의 사용하지 않는 상위 비트를 명시적으로 오염시키고 형식이 지정된 64비트 상수로 Windows ABI에서 기준 시각과 INT64_MIN이 잘리지 않도록 합니다.
ARM64 native backend build는 고정된 LLVM 소스를 사용하여 ubuntu-24.04-arm(KVM)과 windows-11-arm(WHP)에서 Unicorn을 비활성화하고 NeverDEmulationNative를 컴파일합니다. audit_native_backend_build.py는 선언된 각 네이티브 소스, 활성 백엔드 정의, 컴파일 명령, ARM64 ELF/COFF 오브젝트와 해시를 검사합니다. probe_native_host.py는 호스트 초기화 가능 여부와 리소스 해제를 기록하며, 사용할 수 없는 기능을 명시하고 초기화 오류가 발생하면 작업을 실패시킵니다. 이는 컴파일과 호스트 초기화를 검증하며 게스트 실행은 아직 검증되지 않았습니다. NeverDCapstoneCompilerOptions.inc는 한정자 진단 옵션을 Clang의 C 컴파일에만 적용하며 GCC와 MSVC는 각자의 경고 규칙을 유지합니다. native_arm64_only=true는 전체 x64 CPU 승인 검증 없이 이러한 ARM64 구성 요소 빌드와 초기화 프로브를 선택합니다. 빌드 감사는 Windows 8.3 별칭을 포함하여 소스 및 빌드 루트 경로를 정규화한 뒤 경로를 비교합니다. ARM64 구성 요소 작업은 빌드 감사 전에 선택한 KVM 또는 WHP 백엔드를 명시적으로 활성화합니다.
WindowsTestExecution.def는 Unicorn ARM64의 WindowsExclusive 비교를 RUN_SERIAL로 지정합니다. CTest 정책은 다른 게스트 작업과의 자원 경합을 피하면서 기존 60 s 게스트 기한과 모든 결과, 레지스터, 권한, 네이티브 해시 검사를 유지합니다.
run_native_cpu_methods.py는 NativeMethodExecution.def의 불리언 속성 RUN_SERIAL을 검증하고 메서드 그룹과 실행 간 계약 비교에 유지합니다. 메서드는 하나씩 실행하며 자식 프로세스가 종료되지 않으면 다음 메서드를 시작하지 않습니다. 알 수 없는 속성과 변경된 샤드 계약은 계속 검증에 실패합니다.
WindowsProcessLifetime은 같은 CPU와 실행 예산에서 의존 순서대로 DLL TLS 콜백과 DllMain, 이어서 EXE TLS와 진입점을 실행합니다. 모듈마다 독립 TLS 인덱스와 정렬된 블록을 할당하고 재배치·연결된 이미지에서 공용 64 KiB 영역으로 복사합니다. TLS 예약 인수는 0이며 시작/프로세스 종료 DllMain은 불투명한 비 NULL 값을 받습니다. 명시적 프로세스 종료는 초기화를 완료한 DLL을 로더 목록의 역순으로 분리한 뒤 EXE TLS를 호출하며 EXE 초기화 전에도 같습니다. 시작 DllMain(FALSE)는 분리 통지 없이 0xc0000142로 종료합니다. 오류와 예산 소진은 가짜 정리를 수행하지 않습니다. 게스트 DLL이 있는 PE 진입점 반환은 미지원 스레드 종료가 필요하므로 명시적으로 중단합니다. 0이 아닌 SizeOfZeroFill은 미지원이며 실제 TLS 템플릿의 0으로 초기화된 바이트는 지원합니다. 진입점 없는 DLL은 TLS attach를 받지만 프로세스 detach 통지는 받지 않습니다.
WindowsProcessExports는 정적 가져오기와 GetProcAddress에 같은 이름/서수 해석을 사용하여 코드, 데이터, 별칭, 연쇄 전달을 처리합니다. 실제로 참조하는 시작 전달만 카탈로그 모듈과 초기화 의존성을 추가하며 사용하지 않는 전달은 파일을 읽지 않습니다. 이름은 대소문자를 구분하며 없는 이름은 NULL/오류 127, 직접 조회한 없는 서수는 빈 슬롯을 포함해 NULL/오류 182, NULL 조회 인수는 오류 87을 반환하고 성공은 LastError를 보존합니다. 알 수 없는 모듈 핸들은 미지원입니다. 제한된 API 목록에서 정확한 제공자/이름별 진입점을 한 번 예약합니다. 각 이미지의 현재 PE 헤더와 내보내기 메타데이터를 검사하고 변경 또는 읽을 수 없는 바이트를 거부합니다. 체인은 최대 64개이며 준비 단계의 남은 메타데이터 예산과 실행 기한을 공유합니다. 빈 슬롯으로 전달하면 대상 이미지 기준 주소를 반환하고 LastError를 보존합니다. 서수 0으로 전달하면 오류 87을 반환합니다. 기준 주소는 데이터 주소이며 이미지 헤더 실행 권한을 부여하지 않습니다. 런타임 전달은 설정 카탈로그의 모듈을 로드하고 초기화를 마친 후 조회 결과를 반환할 수 있습니다. 실행 중 내보내기 테이블 변경은 여전히 지원하지 않습니다.
WindowsProcessLoader는 windows.modules의 ASCII DLL 기본 이름을 로드하며 명시적 참조, 공유 의존성과 시작 모듈 유지를 관리합니다. 전달 조회를 반복해도 참조가 추가되지 않습니다. 다시 로드할 때 카탈로그 슬롯에 새 상주 세대를 부여합니다. TLS와 DllMain은 같은 CPU에서 중단된 API 프레임 아래에서 실행되며 레지스터 복원은 게스트 메모리 쓰기를 보존하고 현재 반환 주소를 사용합니다. 동적 attach/detach 예약 포인터는 0입니다. 명시적 로드 중 attach 실패는 정리 후 오류 1114를 반환하되 성공한 독립 중첩 로드는 유지합니다. 언로드는 이미지 매핑과 TLS를 해제하고 재로드는 원본 내용을 복원합니다. 모델 밖에서 로더 목록이나 TLS 포인터를 바꾸면 명시적으로 실패합니다. 파일·이미지·메타데이터 작업 예산은 실패와 재로드에도 누적됩니다. 시스템 제공자는 매핑된 PE 베이스를 모듈 핸들로 사용합니다. 파일 시스템 검색, 비 ASCII 경로, LoadLibraryEx 플래그, 순환 가져오기, 초기화 또는 언로드 중인 같은 모듈의 재진입 상태 전환은 지원하지 않습니다.
GetEnvironmentVariableW, SetEnvironmentVariableW, GetEnvironmentStringsW, FreeEnvironmentStringsW, ExpandEnvironmentStringsW 는 PEB 프로세스 매개변수의 실제 게스트 환경 블록을 공유합니다. 이름은 대소문자를 구분하지 않는 ASCII이며 값은 UTF-16입니다. 변경 전에 입력, 용량, 쓰기 가능한 메모리를 검증합니다. 스냅샷은 이후 변경과 독립적이며 해제하면 게스트 메모리를 회수합니다. 모델의 블록 한도는 64 KiB이고 문자열과 확장에는 크기 및 실행 기한 검사가 적용됩니다. 알 수 없는 포인터 소유권, 잘못된 블록, ANSI 코드 페이지, 확장 버퍼 중첩은 지원하지 않습니다. WindowsEnvironmentTests.cpp는 사용 가능한 백엔드에서 자체 x64/ARM64 픽스처를 비교하며 CI는 독립적인 네이티브 Windows 오라클을 필수로 실행합니다.
WindowsProcessHeap은 프로세스 힙의 할당, HeapReAlloc, 해제와 크기 조회를 통합 관리합니다. 크기 변경은 유지되는 데이터를 보존하며 HEAP_ZERO_MEMORY는 추가 바이트를 0으로 만들고 HEAP_REALLOC_IN_PLACE_ONLY는 이동을 금지합니다. 재할당 실패 시 기존 블록을 보존하고 NULL을 반환하며 ERROR_NOT_ENOUGH_MEMORY(8)를 설정하여 네이티브 관측과 일치합니다. 독립적인 페이지는 축소와 해제 시 용량을 반환하며 단계별 확장과 제한된 복사는 실행 기한을 확인합니다. 사용자 정의 힙, 예외 생성 플래그, 알 수 없는 소유권, 접근 불가능한 복사 또는 초기화 범위는 명시적으로 중단합니다. WindowsHeapTests.cpp는 두 ISA, 강제 이동, 예산 재사용, 실패 원자성을 검증하며 CI는 동일한 자체 EXE를 네이티브 Windows에서도 실행합니다. PE 배치 사례는 공통 CTest 외부 제한인 120초를 사용하며 각 게스트의 유한 예산은 유지합니다. 힙 픽스처는 WHP의 전체 데이터 검사를 위해 프로세스마다 20초를 허용합니다.
WindowsSystemModules는 두 ISA에 대해 ntdll.dll, kernelbase.dll, kernel32.dll의 제한된 PE64 모델 이미지를 만듭니다. ASCII GetModuleHandleA / GetModuleHandleW, LoadLibraryA / LoadLibraryW, GetProcAddress는 매핑된 베이스를 공유하며 PEB/LDR과 MEM_IMAGE도 같은 이미지를 나타냅니다. 정적 가져오기, 이름 조회와 게스트 DLL 전달은 동일한 API 게이트와 내보내기 해석기를 사용합니다. 제공자는 고정 상주하고 게스트 초기화 콜백이 없으며 일반 게스트 DLL을 모두 해제한 뒤 진입점 반환을 막지 않습니다. 헤더 또는 내보내기 메타데이터가 바뀌면 조회를 중단합니다. 미지원 시스템 내보내기 이름과 0이 아닌 서수 조회는 명시적으로 중단하며 지원 이름의 대소문자 불일치와 빈 이름은 오류 127, NULL 조회는 87을 반환합니다. 생성 바이트와 주소는 모델 정책이며 Windows DLL 버전별 배치, 네이티브 서수와 제공자 간 별칭은 재구성하지 않습니다. WindowsSystemTests.cpp는 자체 x64/ARM64 EXE를 네이티브 Windows와 비교하고 초기 스레드 반환을 독립적으로 8회 관측합니다.
WindowsProcessExceptions는 같은 CPU와 프로세스 예산으로 AddVectoredExceptionHandler, RemoveVectoredExceptionHandler, RaiseException을 구현합니다. 순서가 있는 처리기는 등록·삭제, 중첩 예외, 모델 API 호출, DLL 로드와 프로세스 종료를 수행할 수 있습니다. x64/ARM64 데이터 접근 위반과 x64 정수 나눗셈 예외는 게스트의 CONTEXT 변경을 검증한 뒤 재개하며 범용 레지스터, SIMD 및 지원 FP 상태를 보존합니다. 소프트웨어 예외는 모델 공급자 내부의 실제 반환 명령으로 재개합니다. 보관된 등록은 128개, 중첩은 16프레임으로 제한합니다. 잘못된 처리 결과, 바뀐 예외 포인터, 미지원 필드와 한도 초과는 명시적으로 실패합니다. ARM64 스택 프레임 기반 SEH/언와인딩, 디버거 전달과 실행/가드 페이지 예외는 미지원입니다. WindowsExceptionTests.cpp는 자체 EXE/DLL을 네이티브 Windows와 비교하며 ARM64 KVM/WHP 실기기 증거는 아직 없습니다. 소프트웨어 예외 레코드에는 EXCEPTION_SOFTWARE_ORIGINATE(0x80)가 포함되며 호출자의 계속 불가 플래그와 별도로 처리됩니다. 원본 Windows 실행 파일은 소프트웨어 및 하드웨어 예외의 정확한 플래그 값을 검증합니다.
WindowsProcessContext는 각 디스패치 프레임의 발생 원인을 유지합니다. 지원하는 x64 데이터 접근·나눗셈 오류는 CONTEXT.EFlags에 RF(0x10000)를 표시하며, 소프트웨어 접근 위반 코드를 포함한 RaiseException은 현재 컨텍스트를 유지합니다. 발생 원인은 VEH/VCH와 SEH 검색·해제 과정에서도 유지됩니다. 유효한 계속 실행은 RF 없이 논리 CPU 플래그를 복원하며, 게스트의 RF 변경은 상태 반영 전에 거부됩니다. 이 제한된 프로필은 명령어 중단점이나 게스트가 제어하는 RF를 모델링하지 않습니다. WindowsExceptionTests.cpp는 저장 기록, 복원, 거부 시 CPU·RAM 불변성을 확인합니다.
Windows ring3는 독립적인 네이티브 관측에 따라 checked x64의 operand_alignment 오류를 매개변수 [read, UINT64_MAX]의 STATUS_ACCESS_VIOLATION으로 변환합니다. 저장 명령도 동일합니다. CPU 계층이 원인을 제공하며 Windows는 벡터 13으로 추측하거나 명령을 다시 디코딩하지 않습니다. WindowsAlignmentProcessTests.cpp는 원본 PE 명령으로 오류 시나리오 72개와 주소 수정 후 재시도 9개(72 + 9)를 실행하며 PC, RF, XMM, RAM을 검사합니다. 미분류 또는 일관되지 않은 오류는 거부합니다. 프로세스와 드라이버 오류 보고서는 nullable cause와 16진수 error_code를 보존하여 누락과 0을 구분합니다. 이 전달은 checked x64 사용자 프로파일에 적용됩니다. 각 오류와 주소 수정 후 재시도마다 전체 4096바이트 페이지를 내보내고, 호스트가 81개 스냅샷과 실제 완료 횟수를 모두 검증합니다. 게스트 제한 시간은 유지합니다. 네이티브 프로세스와 초기 스레드 관측은 CREATE_DEFAULT_ERROR_MODE를 사용합니다. GoogleTest가 설정하는 상속 가능한 SEM_NOALIGNMENTFAULTEXCEPT는 Windows가 측정 대상 오류를 자동 복구하게 만들 수 있습니다. 따라서 검증은 테스트 환경의 정책 대신 시스템 기본 동작을 관측합니다.
AddVectoredContinueHandler와 RemoveVectoredContinueHandler는 독립된 순서 목록을 관리하며 예외 처리기와 최대 128개 보존 등록 제한을 공유합니다. 벡터 예외 처리기가 실행 재개를 수락하면 계속 처리기는 같은 수정 가능한 예외 레코드와 CONTEXT를 봅니다. 중첩 예외와 DLL 알림을 포함한 콜백이 끝난 뒤 최종 컨텍스트를 검증합니다. 다른 종류의 처리기 API로 핸들을 제거할 수 없습니다. WindowsContinuationTests.cpp는 순서, 조기 종료, 등록 변경, 컨텍스트 복구, 중첩 전달, 로더 콜백과 프로세스 종료를 독자 EXE와 네이티브 Windows로 비교합니다. 검증한 Windows x64 벡터 경로에서는 EXCEPTION_NONCONTINUABLE이 설정되어도 재개할 수 있지만 스택 프레임 기반 SEH 동작의 근거는 아닙니다. 네이티브 ARM64 실행은 아직 검증하지 않았습니다.
RtlCaptureContext는 x64와 ARM64의 kernel32.dll, ntdll.dll에서 사용할 수 있습니다. 공유 WindowsProcessContext와 IntegerABI가 CPU 상태와 LastError를 바꾸지 않고 호출자의 PC/SP를 저장합니다. 네이티브 Windows 관찰로 x64 플래그 0x10000f, 사용하지 않는 home/디버그/벡터 영역의 보존, 기존 32비트 x87 주소 필드를 확인했습니다. ARM64는 LR을 PC에 저장하고 기록의 X0/LR을 0으로 만듭니다. 레지스터, SIMD, 부동소수점 제어는 게스트에서 가져오며 x64 선택자와 MXCSR 기능 마스크는 설정된 게스트 CPU를 따릅니다. 잘못되거나 정렬되지 않거나 일부에 접근할 수 없는 대상 기록은 쓰기 전에 실패합니다. WindowsContextTests.cpp는 직접 가져오기, 제공자 조회, VEH 콜백, 페이지 경계를 넘는 출력과 실패 원자성을 검증합니다. scripts/check_windows_context.py는 독자 실행 파일을 Windows x64/ARM64에서 실행하고 비어 있지 않은 x87 상태를 별도로 검증합니다. 이 ARM64 API 관찰은 네이티브 KVM/WHP 실행 증거가 아닙니다. 컨텍스트 복원, 스택 순회와 동적 함수 테이블은 여전히 별도 구현 과제입니다. WindowsProcessServices.def는 정확한 모듈 제한을 선언합니다. kernelbase.dll에서 이 심볼을 찾으면 네이티브 관찰과 동일하게 ERROR_PROC_NOT_FOUND(127)를 반환하며 존재하지 않는 내보내기를 추가하지 않습니다. RtlCaptureContext.
WindowsProcessSEH는 os/windows/exception/의 공통 X64SEH(드라이버 환경 없이도 사용하는 NeverDEmulationWindowsException)로 x64 __C_specific_handler와 UNWIND_INFO V1을 처리합니다. VEH 검색 후 필터, finally, 비지역 처리기 이동, 중첩/충돌 언와인딩과 재배치한 EXE/DLL 프레임을 지원하고 비휘발성 GPR/XMM을 보존합니다. 필터가 실행 재개를 선택하면 같은 CONTEXT로 VCH를 실행합니다. WindowsSEHTests.cpp는 독자적인 23개 시나리오를 네이티브 Windows와 비교하며 KVM/WHP/Unicorn은 같은 의미론을 사용합니다. 프로세스 예산 안에서 이미지 세대, 헤더, 언와인드/범위 바이트, 언어 처리기 코드 영역과 IAT 바인딩을 다시 검증합니다. 메타데이터 변경이나 보존된 이미지 언로드는 명시적으로 실패합니다. ARM64 프레임 SEH, C++ EH, 동적 함수 테이블, 일반 RtlUnwind/NtContinue 및 로더/VEH/VCH 콜백 경계를 넘는 언와인딩은 미지원입니다.
EXCEPTION_NONCONTINUABLE에 대해 x64 필터가 EXCEPTION_CONTINUE_EXECUTION을 반환하면 새 컨텍스트로 STATUS_NONCONTINUABLE_EXCEPTION(0xc0000025, 플래그 0x81, 연결 레코드 null)을 전달합니다. VEH를 다시 실행한 뒤 보존된 논리 스택을 다시 검색하며, 동일한 깊이 및 실행 예산 안에서 finally 순서와 EXE/DLL 프레임의 정체성을 유지합니다. 23개 네이티브 시나리오는 성공 실행 21개와 종료 2개를 포함합니다. 원래 CONTEXT를 복원해도 VEH/VCH가 이 2차 예외의 계속 실행을 수락하면 처리되지 않은 채 종료되며, 모델은 런타임 실패를 보고합니다. 소프트웨어 예외 주소는 저장된 PC와 같고 내부 디스패처 주소 및 레지스터 배치는 모델 정책입니다. Windows x64 CI.
WindowsDynamicTests.cpp는 원본 x64/ARM64 DLL과 EXE를 독립 네이티브 Windows 관측과 비교하여 참조 수, 공유 의존성, 중첩 로드, attach 실패 정리, 전달 조회, 프로세스 종료, 진입점 없는 DLL, 재로드 시 새 TLS를 확인합니다. 추가 회귀는 변경된 로더 메타데이터와 해제된 코드 포인터를 거부하고 누적 준비 예산과 중단 API의 미완료 결과를 보장합니다. Windows CI는 원본 기준 실행과 WHP 사례를 필수로 요구합니다. 교차 컴파일과 Unicorn ARM64는 네이티브 ARM64 실행 증거가 아닙니다.
GetProcAddress 전달 체인의 어느 위치에서든 라이브러리가 없으면 오류 127을 반환하며, 명시적 LoadLibrary로 카탈로그에 없는 모듈을 요청하면 126을 반환합니다. 네이티브 비교와 사용 가능한 각 백엔드는 선언된 41개 로더 시나리오 전체를 검증합니다. Windows에서는 DLL 변형마다 모든 DLL을 해제한 후의 진입점 반환을 16회 확인합니다. GetProcAddress 전달 대상 초기화 실패도 정리 후 127을 반환합니다. 프로세스 detach 콜백은 종료를 호출한 쪽의 스택 내용을 보존합니다.
WindowsExportTests.cpp는 원본 x64/ARM64 DLL과 EXE로 전달 코드/데이터/서수 호출, 별칭, 초기화 중 조회, 재배치, 대소문자별 누락, LastError, 순환 및 비상주 대상, 잘못된 포인터와 성공한 조회 이후 메타데이터 변경을 확인합니다. 같은 EXE를 독립 네이티브 Windows 기준으로 실행하며 네이티브 CI는 WHP 사례를 필수로 요구합니다. C ABI/CLI 테스트는 전체 보고서를 비교합니다. 네이티브 ARM64 하드웨어 증거는 아직 없습니다. 내보내기 표가 있는 EXE와 없는 EXE로 두 의존 그래프, PEB 목록 순서, detach 순서, 이름/서수/NULL 오류 코드를 확인합니다.
WindowsLifetimeTests.cpp는 고정된 추적을 독립 네이티브 Windows 프로세스 및 KVM/WHP/Unicorn 실행과 비교합니다. 정상 종료, 진입점 반환, 두 DLL의 초기화 실패, 네 곳의 조기 종료와 진입점 없는 DLL을 포함합니다. 콜백 오류, 공용 예산, 재배치 TLS 필드와 TLS 총용량도 확인합니다. 네이티브 진입점 반환 프로브는 초기 스레드 핸들을 보존하고 종료 코드와 정확한 스레드/프로세스 통지 순서를 64회 검증합니다. 남은 자식 스레드는 관찰 후 종료하며 프로세스 종료 코드를 진입점 반환값으로 취급하지 않습니다.
NeverDUnpackTests, NeverDUnpackExecutionTests, NeverDUnpackPublicTests는 패킹된 이미지의 복구를 다룹니다. 언패킹을 참고하십시오. UnpackGeneratedTests.cpp는 테스트가 직접 패킹한 프로그램으로 x86-64와 ARM64에서 진입점 규칙을 검사합니다. X64ReturnPrefixTests.cpp는 2바이트 근거리 복귀를 모든 전송 계층에서 검사하고, 그 밖의 접두사 붙은 복귀가 계속 거부되는지 확인합니다. WindowsDeferredTests.cpp는 불투명 진입점과 멈춘 프로세스의 관찰을, ExecutionSessionTests.cpp는 실행 감시를 검사합니다. DirectX64Tests.cpp는 부분 페이지 감시, 페이지 경계를 넘는 명령 가져오기, 한 번만 재개, 서비스 경계, 잘못된 명령과 시간 제한 시 상태를 검증합니다.
UnpackLibraryTests.cpp는 독립 x64/ARM64 DLL을 테스트 내부에서 패킹하여 의존 순서, 일반·생성 TLS 콜백, 연결 실패 정리, 입력/호스트 식별, 자체 파일 접근, 이름/서수/데이터/전달 내보내기 및 자체 가져오기 부재를 확인합니다. 네이티브 Windows는 별도 EXE에서 원본과 재구성 DLL을 로드하고 선언된 내보내기를 호출합니다. 검사 및 직접 WHP 사례는 필수입니다. CompletedGeneratedTLSCallsRequireTheAttachABI는 변경된 진입점/인수를 거부하고 GeneratedCallsNeedTheirReturnedStackAtTheContinuation는 잘못된 반환 스택을 거부합니다. 검증 범위는 언패킹이며 비가상화는 포함하지 않습니다.
ExportObserver는 상주 게스트 의존성의 실행 가능한 내보내기도 관측합니다. 모델링된 제공자는 서비스 디스패치로 관측하며 입력 자체 내보내기는 제외합니다. 모듈 변경 시 관측점을 갱신하고 현재 내보내기 식별로만 수정합니다. 기록 수는 선언된 가져오기 한도 이내입니다. DLL 테스트는 시스템 API와 게스트 의존성 헬퍼 모두를 수정하고 네이티브 로드로 에뮬레이션 주소가 남지 않음을 검증합니다.
WrappedEntriesRequireExplicitTransferEvidence는 DLL 래퍼가 깊은 스택으로 복원 진입점을 호출하는 경우를 다룹니다. 기본 결과는 no_entry입니다. 관측된 호출을 transfer로 선택하면 로드 가능한 DLL을 재구성합니다. 깊은 호출만으로 진입점과 초기화 함수를 구별할 수 없습니다.
WindowsDeferred.EarlierTLSCallbackMayGenerateALaterCallback는 IMAGE_SCN_CNT_UNINITIALIZED_DATA를 가진 독립 .gentls 섹션, 선언된 버퍼 범위와 정확히 일치하는 크기, 원시 데이터 크기와 포인터가 모두 0임을 요구합니다. WindowsDeferredCases.def가 저장소와 어셈블리를 정의하며 일반 .data는 분리됩니다. 생성 콜백과 생성 진입점 모두 x64/ARM64의 엄격한 거부 및 지연 실행 검사를 유지합니다.
ExtendedRegistersLoadOrdinaryImportsAgain는 짧은 형식과 패딩이 있는 R8-R15 로드를 검사 및 직접 x64 실행으로 검증합니다. 하위 레지스터 사례는 앞선 REX 모양 바이트와 CALL만 있는 주소 도우미를 다루며 패딩 호출은 CALL 뒤 임의 바이트를 건너뜁니다. ImportCallHelpersCannotDiscardPersistentEffects는 영구 부작용 보존을 요구합니다. PERebuildTests.cpp는 시작·결과 증거 누락과 겹친 시작을 거부하고 6~8바이트 구간의 정확한 API 반환 주소를 보존합니다.
OpaqueExportCallsAreRepairedBeforeTheExplicitStop는 알 수 없는 API를 우회하지 않고 순수 호출을 복원합니다. ExportObservationIncludesTheOpaqueBoundary는 정적·동적·서수 내보내기를 다루며 실행과 서비스 로그를 보존합니다. OpaqueExportObservationPreservesAnUnreadableReturn는 누락된 반환 정보를 만들지 않도록 요구합니다.
ExportIdentitySurvivesRebindingAndLateResolution은 불투명 내보내기의 바인딩 순서를 바꾸고 진입점 이후의 확인도 검사합니다. checked/direct x64 사례는 올바른 API 식별 정보와 명시적인 unsupported-service 중단을 요구합니다.
Windows 가상 메모리는 VirtualAlloc, VirtualFree, VirtualProtect, VirtualQuery와 현재 프로세스의 FlushInstructionCache를 지원합니다. OS 계층은 예약 영역을 소유하고 AddressSpace는 커밋된 페이지, 권한, 실제 저장 공간을 관리합니다. 테스트는 동적 코드 수정, 접근 오류, 메모리 한도 재사용을 검증합니다.
WriteProcessMemory는 현재 프로세스에 최대 4 KiB를 쓸 때 x64/ARM64에서 실측한 커밋된 페이지의 동작을 따릅니다. 각 영역의 보호 속성, 복사된 앞부분, 바이트 수와 LastError를 보존하며 ERROR_NOACCESS, ERROR_PARTIAL_COPY, RX 앞부분을 쓴 뒤 성공을 반환하는 동작도 재현합니다. WindowsMemoryWriteTests.cpp는 보호 속성의 25가지 조합을 모두 검사하고, check_windows_memory_write.py는 같은 자체 제작 실행 파일을 네이티브 Windows CI에서 검증합니다. 커밋되지 않은 대상 영역은 명시적으로 지원하지 않습니다.
NeverDEmulationWindowsProcess → os/windows/process/; NeverDWindowsProcessTests + NeverDProcessPublicTests: windows-pe64-v1.
분리 회귀 검사는 정확하거나 부족한 예산, 부분 워드, 양쪽 바이트 순서, 미접근 메모리 식별자, 완전한 아핀 슬롯 경계, 늦은 선행 경로의 덮어쓰기 및 기본 무효화를 다룹니다. C API/CLI는 v6 호환성과 무효 도메인을 검사합니다. HighC·LLVMC 출력을 O0/O2에서 실행하여 반환값, 메모리, 스택, 보존 상태를 확인하지만 네이티브 동등성 인증은 아닙니다.
유한 분기 회귀는 레지스터·프레임 상태, 양쪽 바이트 순서, 실제 도달 가능한 잘못된 경로, 늦게 도착한 선행 경로, 소진된 내부 조건과 인접 탐색 한도를 검사합니다. 방문 한도 테스트는 산술 상관관계, 중첩 루프, 디코드 모드, fallthrough 계수, 전체 작업 한도와 기존 플래그 우선순위를 다룹니다. CLI는 두 C 경로와 소스 ABI를 O0/O2로 실행하고, C/Python v8은 레이아웃·잘못된 필드·미래 꼬리 무시를 검사합니다. 회귀 테스트는 큰 무관한 유한 선택자 뒤의 네이티브 조건에 탐색 예산이 남고, 마지막 허용 개선을 이미 지명된 생산자에 우선 사용하는지도 확인합니다.
NeverDLLVMCPhiTests는 O0/O2에서 독립 및 상호 의존 루프 갱신을 실행하며, 0회 반복, 반복 경계와 무작위 전체 비트 폭 초기값을 검사합니다. 가독성 검사는 독립 갱신에 스냅샷 지역 변수가 없고 복합 교환에 필요한 스냅샷만 남도록 요구합니다. 기존 분기, switch, 이동된 분기 본문 및 교환 루프 사례도 선택된 간선과 동시 대입 의미를 검증합니다.
LLVMCInternalExitRegions의 독립 테스트 5개는 양 극성, 0회 실행, 종료/회귀 간선의 병렬 교환, 헤더/내부 종료의 네 중첩 조합과 헤더/본문/래치 관찰 순서를 검사합니다. 공유 목적지와 조기 계속은 실행 가능한 대체 출력을 검증하며 앞선 유효 루프가 있어도 부분 구조를 게시하지 않아야 합니다. 전체 모듈과 단일 함수 출력은 일치하고 LLVM은 바뀌지 않습니다. 원본 LLVM과 생성 C를 독립 부호 없는 오라클과 O0/O2에서 294,912회 비교하며 C에 미정의 동작 트랩을 적용합니다.
NeverDLLVMCPhiTests는 공통 루프 종료 지점의 서로 다른 후속 PHI 쌍, 관찰 호출 순서, 출력 메모리 및 호출자 IR 보존도 검증합니다. 전체 모듈과 선택 함수의 C를 O0/O2에서 독립 참조 구현과 비교 실행합니다. 다른 종료 비교와 추가 선행 블록은 보수적 처리를 검사합니다.
NeverDLLVMCPhiTests는 독립적인 O0/O2 oracle로 여러 역방향 간선의 연산 결합, 관찰 호출 순서, 메모리 수정 호출 전 값 스냅샷, 좁은 정수의 래핑과 부호 확장을 검사합니다. 전체 모듈 및 단일 함수 출력에서 호출자 IR 보존, 간선 불일치, 공유 루트, poison 속성, 미정의 피연산자, 가변 시프트, 제약된 intrinsic, 예외 함수, 예산 부족 시 전체 거부를 확인합니다. 모든 입력 연산이 같을 때만 회전 호출을 합칩니다.
NeverDLLVMCPhiTests는 구조화된 스칼라 영역을 O0/O2에서 실행합니다. 블록 순서가 뒤섞인 중첩 루프, 다이아몬드 분기, 0회 반복, 좁은 정수 래핑, 헤더 관측 호출, PHI 교환, 살아 있는 외부 값, 공유 증분 및 퍼널 시프트 경계를 검사합니다. 원본 IR 보존, 지역 변수 세 개로의 병합, 다중 출구·비가약·대형 그래프의 실행 가능한 폴백도 확인합니다. 독립적으로 합성한 사례이며 소스 출력 자체가 네이티브 복구의 증명은 아닙니다.
NeverDLLVMCValueTests는 타입을 추적하는 스칼라 루프 C와 독립적으로 직접 컴파일한 LLVM을 O0/O2에서 비교하고, 생성 C의 정의되지 않은 동작에 트랩을 적용합니다. 경계값과 결정적인 전체 폭 입력으로 좁은 곱셈과 시프트 전 순환, 확장 곱셈과 오른쪽 시프트, 불리언 절단, 부호 있는 비교와 확장, 우선순위, 조건식, 불리언 산술, 미지원 연산의 기존 경로 및 깊은 표현식의 변수화를 검사합니다. 호출자 IR 보존과 불필요한 형 변환 제거도 확인합니다.
NeverDLLVMCPhiTests와 NeverDLLVMCValueTests는 바이트 카운터의 증감 순환, 합쳐진 종료 값, 루프 이후 인라인 사용, 살아 있는 외부 변수와 PHI 스냅샷을 검사합니다. 정의되지 않은 동작 트랩을 켠 독립 O0/O2 비교로 복합 덧셈, 역순 뺄셈 거부, 좁은 곱셈과 불리언 마스크를 확인합니다. 중첩 영역 테스트는 루프 내부 카운터 선언과 별도 결과 변수를 요구하며 원본 LLVM 보존도 확인합니다. 실행 가능한 이름 회귀 테스트는 외부 함수 이름을 처음 생성된 결과·카운터 이름과 충돌시켜 호출과 관찰 부수 효과가 유지되는지 확인합니다.
NeverDLLVMCValueTests는 덧셈·뺄셈·비트 갱신의 양쪽 항등원 분기, 같은 기본값, 인라인 이전 값 의존성, 구체화된 조건 스냅샷, 좁은 정수 참·거짓 검사, 비항등원 분기와 공유 select를 검사합니다. 생성 C는 미정의 동작 트랩을 활성화하고 독립적으로 컴파일한 LLVM과 O0/O2에서 비교 실행합니다. NeverDLLVMCPhiTests는 병렬 이전 값 스냅샷과 공유 범위에 남아야 하는 분기 초기값도 검사합니다. 호출자 IR은 변경하지 않습니다.
NeverDUnicornDecodeTests는 AVX-512/APX CPU 모델의 EVEX 레지스터 예약 비트와 ROUND 메모리 예외 우선순위, 상태 보존, 재개를 검사합니다. 독립적인 Linux x64 호스트 프로그램으로 기존 인코딩의 정렬 예외와 스칼라/VEX 인코딩의 페이지 폴트를 확인했습니다. 이 엔진 테스트는 checked ISA 허용 범위를 확장하거나 APX 네이티브 실행을 입증하지 않습니다.
Release CPU 빌드를 사용합니다. 명시적 HVF에는 네이티브 ARM64 macOS가 필요하며 소프트웨어 비교에는 Unicorn을 켜야 합니다. 모든 결과를 검증합니다. 초기화는 별도로 측정하고 CPU 전환에는 중간 API 호출과 검사가 포함됩니다. 다른 실행 부하에서는 준비와 검사를 제외합니다.
cmake --build build-cpu --target neverd-cpu-bench --parallel 4
build-cpu/bin/neverd-cpu-bench --backend hvf --samples 7 --warmup 1
build-cpu/bin/neverd-cpu-bench --backend unicorn --samples 7 --warmup 1다시 빌드하기 전에 기준 실행 파일을 보존하십시오. Python 3.11+로 순서를 번갈아 측정합니다. 설정, 소스 라벨, 바이너리 해시, 모든 표본을 보존하고 측정 중 빌드나 테스트를 병행하지 마십시오.
python3 scripts/benchmark_cpu.py \
--baseline /path/to/before --baseline-label BEFORE_COMMIT \
--candidate /path/to/after --candidate-label AFTER_COMMIT \
--pairs 15 --output /path/to/new-comparison.json진입 횟수 계측은 시작 프로브를 포함하는 별도 진단이며 추가 비용이 있습니다. 그 시간은 성능 결과에서 제외하십시오. 이 부하들은 전체 OS나 ISA 간 성능을 나타내지 않습니다.
NeverDLLVMPrivateFrameTests는 겹치는 쓰기, 모든 진입 경로와 루프 역방향 간선, 수치 주소 보존, 외부 출력 별칭, 미초기화·순서 있는·알 수 없는 메모리, 메타데이터, 정확한 예산과 한 단위 부족 시 변경 없는 거부를 검증합니다. 독립 O0/O2 오라클은 미정의 동작 트랩으로 전체 반환값, 외부 객체, 프레임 바이트를 비교합니다. x86-64, AArch64, 빅 엔디언 AArch64, ARM32 컴파일 검증은 해당 아키텍처의 네이티브 복원 지원을 의미하지 않습니다. 공유 주소·효과 도우미 변경 시 NeverDByteMemoryForwardingTests도 실행합니다.
cmake --build build-release --target NeverDLLVMPrivateFrameTests NeverDByteMemoryForwardingTests --parallel 4
build-release/bin/NeverDLLVMPrivateFrameTests
build-release/bin/NeverDByteMemoryForwardingTestsNeverDByteCellScalarizationTests는 겹치는 워드, 두 진입 경로와 두 역방향 간선, 넓은 비트 폭과 2의 거듭제곱이 아닌 폭, 양쪽 바이트 순서, 저장 값 선택과 poison 의무 보존, 부분 poison 덮어쓰기, 전체 사용 그래프 거부 및 여러 객체에 걸친 정확한/부족한 예산을 검사합니다. 일반 Thin/Deep 파이프라인은 남은 배열을 제거해야 합니다. 독립 O0/O2 oracle은 8,192개 입력의 세 버전에서 24개 출력 바이트 전체, 주변 가드와 반환값을 비교하며 미정의 동작 트랩을 켜고 총 49,152회 호출합니다. x86-64, AArch64, 빅 엔디언 AArch64 및 ARM32 컴파일 검사는 네이티브 실행 검증과 별개입니다. 공통 메모리 계약 변경 시 바이트 전달 및 전용 프레임 테스트와 함께 실행합니다.
cmake --build build-release --target NeverDByteCellScalarizationTests --parallel 4
build-release/bin/NeverDByteCellScalarizationTestsAndroidMutexTests.cpp는 독립 O0/O2 및 일반/APS2/RELR 픽스처로 세 종류의 mutex, 여러 대기자, 재경합, 최종 재귀 해제, errno, 원래 이벤트, 무효 메모리, 교착과 누적 명령 한도를 검사합니다. Unicorn 및 사용 가능한 KVM/WHP/HVF에서 실행하고 불가능한 백엔드는 명시적으로 건너뜁니다. Android 실기기나 병렬 SMP 동등성을 뜻하지 않습니다.
HighControlFlowSemantics.DeepStableContainersPreserveEveryReturnPath는 독립 인터프리터로 48단계 블록, 루프, switch 및 예외 본문의 진입 및 우회 경로를 검사합니다. 넉넉한 실행 시간 한도로 중복 재귀 순회를 감지합니다. 구조화된 HighIR 검사이며 전체 이미지의 메서드 복원에는 별도의 완전한 목록과 의존성 검사가 필요합니다.
SwiftOnceSources.EarlyReturnsKeepExactObjCOnceThunkProofs는 retain 호출이 결합되거나 분리된 ARM64/x64 thunk를 검사합니다. EarlyOnceCopyReturnsRequireTheSameCompleteTail은 저장 변경, retain 누락·순서 변경, 순서가 지정된 로드, 반환 값 변경 및 외부 진입을 거부합니다. IgnoredNestedReturnCopiesDoNotObserveOnceContext는 void 콜백의 실행 가능한 두 종료 경로와 투영 후 소스 흐름을 검사합니다.
HighControlFlowSemantics.ReturnTailCopyKeepsTheOuterLabelOwner는 주소가 중첩 블록에 다시 나타날 때 진입 경로와 우회 경로를 독립 인터프리터로 비교합니다. ReturnTailCopyIncludesTheFirstChildOfItsLabel은 부모와 첫 자식이 주소를 공유하는 유효한 사례 및 대입을 보존합니다. 이 집중 검사는 전체 메서드와 네이티브 의존성 비교를 대신하지 않습니다.
JumpTailCopyKeepsTheOuterLabelOwner는 점프 꼬리에도 같은 소유 규칙을 검사합니다.
EarlyStringGetterReturnsKeepOnlyInertOnceAnchors는 조기 반환과 once 호출 사이의 빈 명령 앵커를 검사하며 그 사이의 호출이나 저장을 거부합니다.
SwiftOnceSources.ObjCThunkRootsShareTheNestedCallbackProof 는 공유 루트 증명과 리프가 컨텍스트를 관찰하기 시작한 뒤의 거부를 검사합니다.
SourceABI.SwiftPointActionRequiresTwoDoublesAndContext / ObjCCallHints.CoreGraphicsPointActionsKeepSwiftFloatingCarriers는 두 아키텍처를 검증하고 변경된 제공자, 약한 가져오기, 저장소 충돌, 오래된 ABI 캐리어를 거부합니다. HighCSourceCalls.SwiftCoreGraphicsPointActionsKeepCoordinatesContextAndOrder는 독립 Swift 캐리어 검증 함수로 O0/O2의 생성 C를 실행하여 부호 있는 0·비정규 수·NaN을 포함한 좌표 비트, 수신자 식별, 호출 순서와 보호 값을 확인합니다. 이 검사는 호출 ABI를 입증하며 상위 메서드의 완전한 복구를 뜻하지 않습니다.
NativeSourceHints.CGContextCGRectMethodKeepsOrdinaryAndSwiftContextInputs는 비공개 멤버와 거부할 서명을 포함하여 전체 메서드 트리와 정확한 전달 위치를 확인합니다. SwiftFieldReceiver.CGRectMethodSelfKeepsItsLogicalParameterIdentity와 CGRectMethodRejectsChangedEntryAndReceiverParameter는 파이프라인 및 게시 재검증에서 self 인덱스, 진입점 또는 인자 형식 변경을 거부합니다. 컴파일러 기록은 macOS/Mac Catalyst의 네 타깃을 포함하지만 이 진입 선언은 arm64만 지원합니다. HighCSourceCalls.SwiftCGRectMethodKeepsContextReceiverAndAllCoordinateBits는 O0/O2에서 생성된 C를 독립적인 Swift 스칼라 전달 참조 구현과 비교하여 네 좌표의 전체 비트 패턴, 구별되는 context/self 포인터, 단일 호출 및 저장 영역 보호를 검증합니다.
NeverDLowInstructionBoundaryTests는 전체 리프트 픽스처를 빌드하지 않고 LowIR 명령 출처 테스트를 실행합니다. BackwardSharedReturnEpilogueKeepsReturnAndCallerFrame은 정렬된 ADD 및 후위 인덱스 LDP 스택 해제와 호출자에서 링크 레지스터를 복원하는 형태를 확인하며 원래 RET X30과 공유 진입점을 독립적으로 유지합니다. BackwardSharedReturnEpilogueRejectsChangedReturnAndOwnership는 다른 반환 레지스터, BR X30, 누락되거나 정렬되지 않은 해제, 좁은 복원, 내부 진입점, 픽스업, 쓰기 가능하거나 모호한 매핑, 재배치 가능한 입력과 다른 형식을 거부합니다. 공유 꼬리 디코딩은 네이티브 ABI를 증명하지 않으며 호출자 저장이나 할당이 없으면 기존 프레임 증명이 실패합니다.
NeverDOwnInteriorCallTests는 x86과 x86-64 함수가 자신의 unwind 범위 안 레이블을 직접 call하는 경우를 Microsoft x64 .pdata 항목, System V x86-64 DWARF FDE, i386 DWARF FDE에서 각각 다룹니다. 푸시한 반환 주소만을 위한 call은 푸시와 점프로 리프트되며, x86-64 직선 및 루프 경우에 생성된 C는 -O0과 -O2에서 AddressSanitizer와 정의되지 않은 동작 트랩 아래 실행됩니다. 반환이 그 call 자신의 반환 주소를 꺼내는 대상은 일반 호출로 남습니다. 스택 전환 후의 반환이나 진입 스택 포인터보다 아래에서의 반환은 거부됩니다. i386 등록 체인에서 복원한 범위는 본문을 한정하지 않으므로 그 call은 call로 남습니다.
NeverDSysVCallContractTests는 QtXml의 QDomNode::save와 QDomNode::isDocument 형태로 x86-64 System V 호출 규약을 검사합니다. 요약이 인수 레지스터를 읽는 직접 피호출자는 수정 없이 넘어온 입력 this를 포함해 호출자의 값을 받습니다. 가상 호출은 지배 블록이 RDI에 적재한 객체를 받습니다. 한 경로에서는 RAX를 쓰지 않고 반환하고 다른 경로에서는 피호출자의 결과만 넘기는 메서드는 void입니다. 비교 연쇄 앞에서 AL에 쓴 바이트는 모든 경로에서 반환값입니다. 생성된 프로그램은 -O0과 -O2에서 AddressSanitizer와 정의되지 않은 동작 트랩을 켜고 실행합니다.
ObjCCallHints.CIImageAffineValueKeepsProviderAndPhysicalCopyCarrier는 CoreImage 제공자, CIImage 팩터리, 완전한 48바이트 논리 레코드와 x2 포인터를 검사하고 누락되거나 잘못된 제공자, x86_64와 충돌하는 선언을 거부한다. ObjCImageValueCopy.OriginalFrameAndCompleteBodyAuthorizePublication은 동일한 기계 주소를 가진 결과 대입과 원래 호출을 구분한다. RejectsChangedCopyCallBodyAndCurrentImage는 증명, 인수, 저장, 프레임, 메타데이터, 임포트, 중복 호출과 저장 IR에 대한 24가지 변경을 거부하며 MedIR과 HighIR을 일관되게 함께 수정한 경우도 포함한다. GeneratedCExecutesAgainstIndependentPhysicalCopyABI는 ARM64에서 수정하지 않은 생성 C를 O0/O2로 실행하고 컴파일러에서 독립적으로 관측한 x2 포인터를 받는 함수와 비교한다. 부동소수점 비트 패턴 6개, 선택자와 수신자 식별, 한 번의 평가, 반환 객체, 합법적인 복사본 쓰기, 입력 불변성과 경계 가드를 확인한다. 다른 호스트에서는 이 물리 ABI 실행 테스트를 건너뛴다.
ObjCCallHints.CurrentMethodEncodingMustAgreeWithCachedDeclaration는 현재의 비어 있지 않은 메서드 인코딩 또는 선택자와 다른 캐시 ABI를 거부한다. 선언만 제공하는 클라이언트의 기존 계약은 유지한다.
DarwinIndirectRecordCalls.MatrixFrameEffectsRequireExactCurrentContract는 현재 행렬·아핀 계약와 거부해야 하는 계약 변경 22개를 검사합니다. ObjCAffineImageValueCopy.CurrentProducerInitializesThePublishedCopy는 SDK 결과가 CoreImage 복사와 게시용 독립 재구축에 도달함을 증명합니다. RejectsWrongProducerFrameAndSavedIR는 생성 함수마다 12개 변경을 검사하며 입력 쓰기 누락, 프레임 밖 결과, 잘못된 공급자·ABI 전달 위치 및 소비된 Concat 입력 재사용을 거부합니다. GeneratedCMatchesOriginalMachineAndSDKResults는 Apple ARM64의 O0/O2에서 변경하지 않은 생성 C와 원본 ARM64 명령어를 네이티브 CoreGraphics로 실행합니다. 함수마다 1000개 사례로 결과의 모든 48바이트, 두 입력, 선택자·수신자 식별, 한 번의 호출, 반환 객체, 비공개 복사 쓰기 및 경계 보호값을 비교합니다. 다른 호스트는 이 네이티브 SDK 실행 테스트를 건너뜁니다.
MatrixFrameEffectsRequireExactCurrentContract는 CGRect 소비 함수와 거부해야 하는 변경 22개도 검사합니다. ObjCAffineImageValueCopy.CGRectInputUsesTheSameCurrentFrameOwner는 회전 → CGRect 대여 → 회전 재초기화 → CoreImage 게시를 검증합니다. CGRectBorrowRejectsExpiredInputsAndChangedABI는 초기화, 범위, 가져오기, 전달 위치에 대한 여덟 변경을 거부합니다. GeneratedCMatchesOriginalMachineAndSDKResults는 전체 순서를 O0/O2에서 1000개 사례로 원본 명령어 및 네이티브 SDK와 실행하여 저장된 각도, 결과의 모든 48바이트, 객체 및 경계 보호값을 비교합니다.
FrameMetadataAccessorUsesCurrentCatalogAndABI는 공유 메타데이터 선언, 두 응답 전달 위치 및 현재 프레임 witness 게시를 확인한다. FrameMetadataAccessorRejectsChangedImportAndBytes는 약한 가져오기, provider/이름/addend 변경, 비공개 주소 요청, 부분 spill, 잘못된 재로드 및 원래 호출 변경을 거부한다. 원래 ARM64와 생성 C의 witness oracle은 실제 Foundation URL 메타데이터 접근자도 호출한다. 두 분기 모두 O0/O2에서 각각 2048개 사례를 실행하여 동적 witness 선택, 전체 출력 바이트, 입력 보존, 호출 횟수 및 보호 값을 검사한다. 동적 스택 할당이나 witness 메모리 효과를 증명하지 않는다.
AArch64ExclusiveTests.cpp는 폭, 레지스터 쌍, acquire/release, 레지스터 중첩, 별칭, 정렬·권한 오류, 스냅샷, 관찰 콜백 취소·실패 및 CPU 간 경쟁을 검사합니다. RAMReservationTests.cpp는 동일 값 쓰기, ABA, 할당 재사용, 롤백, KVM/Unicorn 문자열 명령과 ENTER 쓰기의 간섭을 검사합니다. 원본 ARM64 Windows 프로세스 예제는 독점 루프를 실행합니다. scripts/check_aarch64_exclusives.py는 Windows ARM64 CI에서 원본 명령과 정렬 예외 기록을 수집합니다. 이 증거가 ARM64 KVM/WHP 백엔드 실행을 입증하는 것은 아니며, 사용할 수 없는 구성은 명시적으로 건너뜁니다. 동일한 독점 명령 테스트는 소프트웨어 Unicorn, 계약 간 간섭, 동일 값 및 ABA 쓰기, 같은 실행 내 실행 가능 별칭, DC ZVA 쓰기와 관찰 콜백 취소도 검증합니다.
windows-alignment-oracle.yml은 ARM64 프로브도 실행합니다. 1,320개 관측은 모든 비정렬 오프셋, 네 가지 로드·스토어 순서, 쓰기 가능·읽기 전용·접근 불가·페이지 경계 메모리를 다룹니다. 프로브는 레지스터 초기값의 전체 비트 폭과 오류 전에 커밋된 부분 쓰기를 보존합니다. WindowsExclusiveProcessTests.cpp는 1,320개의 원본 Windows ARM64 관측을 WindowsExclusiveNative.def의 네이티브 다이제스트와 비교합니다. 코드와 데이터 배치만 정규화하며 레지스터 값, 예외 메타데이터와 RAM 효과를 보존합니다.
AArch64AtomicTests.cpp는 독립적으로 어셈블한 LSE 인코딩 168개, 레지스터 별칭, 부호 비교, 권한, 취소, 물리 예약 및 NZCV 전송을 검사합니다. scripts/check_aarch64_atomics.py는 연산 결과, 예외 컨텍스트 및 RAM 범위를 담은 Windows ARM64 원본 기록 1,100개를 수집합니다. 파서 검사는 누락되거나 불일치하는 증거를 거부합니다. 네이티브 KVM/WHP 실행은 별도 검증이 필요합니다. checked 프로세스 회귀는 WindowsAtomicProcessTests.cpp가 실행하며 전체 기록의 다이제스트는 WindowsAtomicResults.def에 보관합니다.
구조적으로 상수인 네이티브 대상은 기존 실행 가능성 검사 스케줄러를 직접 사용합니다. 기호 단일 대상은 완전한 열거 뒤에만 입력 술어를 유지합니다. 회귀 테스트는 직선 실행과 같은 질의 예산으로 상수 전송 128회를, 전송당 열거 질의 2회로 계산된 전송 32회를 검증하고, 제약 없는 주소 상위 비트와 분기 영역을 유지합니다. 전체 상태 결과 변경, 정렬 제약 누락, 대상 한도 0, 질의나 명령 예산 부족은 거부합니다. 여러 대상과 불완전한 열거에 대한 기존 거부 검사도 계속 필요합니다.
네이티브 분기는 다른 간선을 배제하는 UNSAT 증명이 완료된 뒤에만 남은 간선에서 입력 영역을 유지합니다. 테스트는 양쪽 방향 각각 32회의 조건부 전송을 솔버 게이트 512개 이내에서 검증하고, 정확한 질의 예산, 1회 부족한 예산, 게이트 소진을 확인합니다. 정렬 변경이나 누락, 비교 반전, 종료 상태 변경은 거부해야 하며, 임의의 미정의 제어와 두 간선이 모두 실행 가능한 경우의 기존 테스트도 계속 필요합니다.
비트 전개 캐시와 순회 저장소는 실제 도달한 식 노드와 변수만 기록합니다. NeverDSolverTests는 희소한 큰 식별자, 증분 단언 사이의 컨텍스트 증가, 캐시된 비트 재사용, 모델 추출 및 가정 변경을 검사합니다. 관련 없는 넓은 식은 인코딩하지 않으며, 도달한 너비 위반, 잘못된 루트 및 게이트 예산 소진은 계속 거부합니다.
SourceFrameAnalysis.CallStorage*는 정확한 호출 위치, 도달 정의, 초기화, 패딩, 탈출, 경계 및 순환을 검사하며 소스 승인을 부여하지 않는다. ObjCFrameBlockBorrows.*는 설명자로 제한한 동기 대여와 import, 헤더, ABI, 명령을 변경한 19개 사례를 검사한다. 패딩은 증명되지 않은 상태로 유지하고 초기화되지 않은 소유권 필드를 거부한다. block 구성, 캡처 읽기 및 콜백 의존성 폐쇄는 별도의 게시 검사로 남는다.
block과 복사본 게시 테스트는 독립된 두 48바이트 범위, 기술자 중첩, 콜백 본문 변경, 오래된 기계 명령과 IR, 본문에서 분리된 호출 위치 및 정확한 투영 순서도 검사합니다. MixedWidthFrameCopiesMeetEveryInitializedByte와 FrameCoverageCannotHideMissingBytesOrPointerJoins는 두 합류 순서의 8/16바이트 저장, 누락 바이트, 쓰기 가능한 대여의 무효화 및 부분 덮어쓰기 후 남은 포인터 정체성을 검사합니다.
루프 관계 테스트는 임의 반복 횟수의 고정 및 변하는 함수 임시 값, 양쪽 독립 오프셋, 계획 결합, 부분 및 비정렬 범위, 두 바이트 순서와 임시 값 순위를 다룹니다. 네이티브 합성은 새 저장소를 후보 쪽에만 유지합니다. 접두부 누락, 미선언 또는 미정의 바이트, 잘못된 투영, 대입 누락, 프로그램 동작 변경 및 정의 집합 충돌은 인증을 거부합니다. 실행·질의·관측 예산은 정확한 한도에서 통과하고 하나 부족하면 실패하며 추론이 후속 증명 예산을 늘릴 수 없습니다. 수명은 다이제스트에 바인딩되며 일반 네이티브 ABI는 확립하지 않습니다.
네이티브 루프 관계 테스트는 임의 반복 횟수에서 조건 분기 지연 수집과 미감사 거부 경계 보존을 검사합니다. 수동 및 추론 계획은 전체 진입 영역과 귀납 영역을 다시 검사해야 하며, 도달 가능한 잘못된 분기, 변경된 네이티브 갱신, 질의·명령 예산 소진은 인증서를 거부합니다. 도달 불가능한 경계의 변경 바이트를 바인딩하고 엄격한 기본값과 잘못된 계획 거부, 두 증인 정책, 수집 옵션 조합, 정적 API와 중첩 명령 거부를 확인합니다. 의미 스키마 17가 이 허용 범위를 바인딩하며 일반 네이티브 ABI와 소스 합성은 별도 의무입니다.
ObjCSuperGetterSources는 네 캐리어 CGRect getter, 열 가지 게시 정보 변조 거부, 같은 기계 본문을 공유하는 Boolean/CGRect 호출자를 검사합니다. O0와 O2 실행 비교는 정확한 반환 비트(음의 영, 무한대, NaN 페이로드 포함), 수신자/클래스 식별, 메타데이터 호출 후 선택자 로드를 확인합니다. Apple ARM64는 원래 컴파일러 thunk와 생성 C를 함께 실행하고, 다른 호스트는 네이티브 레코드 ABI로 생성 C를 실행합니다.
LowIRLoopInference는 임의의 초기 상위 비트를 가진 8·24·32비트 카운터 투영, 증가와 감소, 레지스터, 프레임, 함수 임시 저장소와 두 바이트 순서를 검사한다. 완전한 자기 증명은 통과하고 결과 변경, 정체, 좁은 폭의 순환과 동등 종료 조건 건너뛰기는 거부한다. 연산, 질의, 경로, 순위 후보와 확장 예산은 정확한 한도에서 통과하고 하나 부족하면 실패한다. 최종 증명의 연산, 질의와 관측 예산은 따로 검사한다.
ObjCCallHints.SDKRecordData*는 두 외부 레코드, 각 double 오프셋, 두 Darwin 아키텍처와 제공자 별칭뿐 아니라 변경된 가져오기, 약한 연결, 누락된 라이브러리, 충돌하는 수정, 쓰기 가능한 저장소와 불완전한 범위를 검사합니다. python3 -m unittest scripts.tests.test_generate_darwin_record_data_declarations scripts.tests.test_generate_darwin_data_declarations는 프로필 충돌, 대체 레이아웃, 잘못된 크기·정렬, TLS와 아키텍처별 내보내기를 검사합니다. 고정된 SDK와 libclang, 출력 경로, --check를 지정하여 generate_darwin_record_data_declarations.py로 카탈로그를 재현할 수 있습니다. 이 선언 검사는 네이티브 간접 결과의 초기화나 메서드 복원을 증명하지 않습니다.
LowIRLoopInference.ProjectedBounds*는 카운터와 경계의 상위 비트가 임의인 동등 종료를 8·24·32비트, 세 저장 종류와 두 바이트 순서에서 검사한다. 완전한 증명은 경계 변경, 정체, 종료 값 건너뛰기, 순환과 관측되는 상위 입력 바이트 변경을 거부한다. 추론과 증명 예산은 독립적이며 정확한 한도와 하나 부족한 경우를 검사한다.
LowIRLoopInference.LateCounter*는 상수 초기화 뒤 일반화에서만 드러나는 8·24·32비트 레인을 레지스터, 프레임, 함수 임시값, 두 바이트 순서와 임의의 경계 상위 비트로 검사한다. 동등 종료의 완전한 증명은 통과하며 정체, 종료 값 건너뛰기, 경계 변경과 관측 상위 바이트 변경은 거부한다. 추론과 최종 증명의 정확한 예산 및 하나 부족한 예산을 각각 확인한다.
LowIRLoopInference.ProjectedComparisonBits*는 루프 헤더의 캐시된 좁은 동등 조건을 임의의 경계 상위 비트로 검사한다. 8·24·32비트, 세 저장 종류, 두 바이트 순서, 상수 또는 상위 비트가 있는 초기화를 포함한다. 완전한 증명은 캐시값과 관측 상위 바이트 변경, 경계 변경, 정체 및 종료 값 건너뛰기를 거부한다. 추론과 최종 증명의 정확한 예산 및 하나 부족한 예산을 각각 검사한다.
LowIRLoopInference.OrderedComparisonBits*는 8·24·32비트, 세 저장 종류와 두 바이트 순서에서 캐시된 부호 없는 순서 비교의 두 불리언 인코딩을 검사한다. 완전한 증명은 비종료 갱신, 비교와 경계 변경 및 관측 상위 바이트 변경을 거부한다. 추론과 증명의 정확한 예산 및 하나 부족한 예산을 각각 확인한다. 인코딩을 바꾼 테스트는 증명 전에 원래 연산 다이제스트를 다시 바인딩한다.
LowIRLoopInference.MutablePrefixBounds*는 상위 비트가 변하는 8·24·32비트 파생 경계, 세 카운터 저장 방식, 두 바이트 순서와 직접·캐시 종료를 검사한다. 비종료, 이동하는 동등 경계, 관측 상위 비트·캐시 변경과 정확한 예산 및 하나 부족한 예산을 포함한다. 이동하는 부호 없는 순서 경계는 래핑 시 종료할 수 있으며 별도 완전 증명 회귀로 확인한다.
LowIRLoopInference.SharedTemplatesFitIndependentOperationBudgets는 추론 1,024회와 독립 증명 640회의 연산 안에서 중첩 부분 카운터를 증명합니다. 정확히 같은 순수 표현식과 불변 접두부 읽기는 한 절단점 재구성 안에서만 공유하며, 피연산자 식별 정보, 출력 폭, 위치 공간을 유지합니다. 테스트는 카운터와 경계의 전체 워드를 관측하고, 변경된 접두부 계산과 연산 하나가 부족한 예산을 거부합니다. 기존 레지스터, 프레임, 함수 임시 값, 바이트 순서, 비종료 사례도 계속 실행해야 합니다.
LowIRLoopInference.CompletedEntailments*는 양쪽 바이트 순서의 종료 및 비종료 프레임 루프 간 세션 격리, 솔버/노드 한도 소진, 독립 증명 예산을 확인합니다. 가변 경계 회귀는 캐시 적중 시에도 정확한 논리 질의 예산과 한 단위 부족한 예산을 검증하며, 네이티브 반복 컨텍스트 증명은 영역을 포함한 재사용을 확인합니다.
LowIRLoopInference.IncrementalEntailmentsKeepRollingBudgets 는 동일한 제약 영역 안에서 인코더를 재사용하는지 확인합니다. 영역이 바뀌면 인코더를 폐기하며, 누적 게이트 용량이 소진되면 새 인코더로 한 번만 재시도하고 쿼리를 한 번 더 계산합니다. 두 바이트 순서에서 전체 카운터와 경계 워드 관측을 유지하며, 정확한 쿼리 예산과 한 번 부족한 예산, 게이트·너비·탐색 한도 초과 시 거부, 독립적인 최종 증명 예산을 검증합니다.
LowIRLoopInference.RebuiltCounterLanes* 는 카운터의 다른 비트를 접두 상태 값에서 다시 만들거나 독립적으로 변경할 때 정확히 일치하는 투영 갱신을 검사합니다. 레지스터, 프레임, 함수 임시 값에 대해 두 바이트 순서, 1·3·4바이트 카운터, 직접 및 캐시된 종료 조건을 다루며 전체 카운터·경계·태그를 관측합니다. 관측되는 상위 태그 삭제, 비종료 갱신, 종료 가드 누락, 한 단위 부족한 추론·증명 예산은 거부해야 합니다. 구조적 점화식 일치는 일반화와 순위 후보만 제안하며, 전체 전이 및 최종 증명이 여전히 필요합니다. 고정된 연산 및 쿼리 예산에서도 기호 투영 카운터를 검증하여 상수 접두 상태의 우연한 일치가 추가 관계로 확장되지 않도록 합니다.
LowIRLoopInference.ProjectedCounterCopies*는 카운터 레인을 독립된 태그가 있는 워드를 통해 복사한 뒤 증가시키는 중첩 루프를 검사합니다. 전체 상태 사례 144개는 레지스터, 프레임, 함수 임시 값, 두 바이트 순서, 1/3/4바이트 레인, 직접 또는 캐시된 종료 조건과 비교용 전체 워드 복사를 포함합니다. 투영된 동등 관계는 저장된 도달 상태와 모든 유입 전이에서 성립해야 하며 상위 비트는 독립적으로 유지됩니다. 전이 도메인의 함의 증명으로 서로 다른 매개변수를 통한 덧셈 점화식을 인식할 수 있습니다. 상위 태그 누락, 잘못된 갱신, 보호 조건 누락, 추론 또는 최종 증명 예산이 한 단위 부족한 경우는 계속 거부됩니다.
LowIRLoopInference.TransferredCounters*는 각 절단점을 우회하는 루프가 있는 상태에서 카운터 저장 위치가 절단점 사이에서 바뀌는 경우를 검사합니다. 정확한 기호 단위 스텝 전송으로 원본 카운터의 보호 조건과 한 절단점에서 다른 위치를 읽는 대체 순위를 제안하며, 모든 조건과 순위는 전체 전이 증명이 필요합니다. 전체 상태 사례 192개는 레지스터, 프레임, 함수 임시 값, 두 바이트 순서, 1/3/4/8바이트 카운터, 독립 태그와 위치가 고정된 대조 사례를 포함합니다. 결과나 태그 변경, 잘못된 순위 매핑, 비종료 갱신, 보호 조건 누락, 추론 또는 최종 증명 예산 부족은 거부됩니다. 탐색은 기존 기호 노드 한도를 사용하므로 선택적 그래프 선택 작업 예산은 0으로 유지할 수 있습니다. 0까지 감소하는 경우와 입력 상한까지 증가하는 경우를 모두 포함합니다. 새 카운터가 발견되면 모든 절단점 템플릿을 다시 구성한 뒤 경계와 비트 구간 보호 조건을 제거합니다. 나머지 확장 과정과 독립 증명은 계속 수행합니다.
LowIRLoopRefinement.GuardedCuts*와 BinaryLowIRLoopRefinement.GuardedCuts*는 같은 PC, 레지스터·프레임·시스템 플래그, 두 바이트 순서, 미일치 유한·순환 경로, 중첩과 잘못된 쌍, 접두 일반화, 미정의 값 증인, 메타데이터, 다이제스트와 공통 예산을 검사한다. 독립 네이티브 테스트는 같은 루프 주소의 두 R10 문맥을 증명하고 미감사 경계가 먼저 검사됨을 확인한다. 일반 ABI 인증은 별도다.
BinaryLowIRLoopInference.NativeSelectors*는 두 레지스터 문맥, 프레임만으로 구분되는 문맥, 세 영역의 논리곱, 구분 불가능한 템플릿, 출처 및 네이티브 본문 변이, 추론과 증명의 독립적인 정확한 예산 및 하나 부족한 예산을 검사한다. 루프 횟수는 임의이며 진입 상수를 추가하지 않는다.
DarwinIndirectRecordCalls는 현재 MakeScale 계약과 22가지 가져오기/ABI 변경을 검사하고, 공유 값 복사 증명으로 완전한 48바이트 비공개 결과를 소비합니다. 정렬되지 않거나 이동, 겹침 또는 프레임 범위를 벗어난 결과는 거부됩니다. 완전한 반환 ABI를 유지하더라도 확정 쓰기 효과를 제거하면 거부됩니다.
SourceFrameAnalysis.IncomingResultAddressNeedsCompleteEntryIdentity는 진입·캐리어·쓰기 변경 열 가지와 진입 ABI 누락을 거부한다. NativeSourceHints.IndirectResultTailCallRetainsExplicitOutputAddress는 직접 꼬리 호출을 재리프팅하고 명시적 출력 매개변수, 쓰기 여섯 번과 게시 게이트를 확인한다.
NativeSourceHints.FourDoubleCallerDemandNeedsEveryUnchangedCarrier는 네 하위 레인, 독립적인 상위 쓰기와 선언·제어 변경 아홉 가지를 확인한다. FourDoubleReturnRequiresEveryComputedLowLane는 불완전한 결과나 무효 계약 열두 가지를 거부한다. DarwinNativeRecordReturns.FourComputedDoublesExecuteAtO0AndO2는 각 최적화 수준에서 2048개 사례의 32바이트 전체 결과를 독립 산술 오라클과 비교한다.
DarwinIndirectRecordCalls.AffineInvertSnapshotsItsCompleteAliasedInput는 O0/O2 각각 2560개 사례에서 동일·중첩·분리된 입력과 출력, 입력 비트 패턴, 한 번의 호출, 48바이트 전체 결과와 보호된 저장 공간 전체를 확인한다. 이는 물리 복사와 스냅샷 오라클이며 원본 기계 코드나 네이티브 SDK 실행은 아니다. 현재 행렬·아핀 계약 테스트는 계약마다 변경 22개의 거부를 유지한다.
DarwinIndirectRecordCalls.AffineTranslatePreservesScalarBitsAndSnapshotsAliasedInput은 O0와 O2에서 각각 2560개 사례를 실행한다. 두 스칼라의 비트 패턴, 여섯 입력 필드, 한 번의 호출, 전체 출력 바이트와 동일·중첩·분리 배치의 보호된 저장 공간을 검사한다. 스칼라 ABI 변경 네 가지와 공유된 임포트/ABI 변경 22가지를 거부한다. 비트 단위 스텁은 물리 인수와 사전 복사를 검증하며, 평행 이동의 수학적 판정이나 원래 기계어 실행은 아니다.
NativeFloatingReturnProof.HFAResultFieldsNeedTheExactCompleteDefinedCall은 아홉 필드 선택과 호출·캐리어·너비·오프셋·SSA 변경에 대한 열일곱 거부 사례를 다룬다. HFAFieldExtractionNeedsADominatingCall은 형제 경로의 생성자를 거부한다. NativeSourceHints.HFAFieldTypeRequiresCurrentCallAndFrameProofForPublication은 다섯 명령의 ARM64 호출자를 리프팅하고 추론된 스칼라 결과를 재리프팅하여 게시 조건을 확인한다. 잘못된 제공자나 LR/SP 복원 누락은 거부된다. 소스 타입과 투영 검증이며 원래 기계어 본문 실행은 아니다.
CPU0 명시적 선점, 가상 시계 의미와 현재 한계는 드라이버 스케줄링을 참조하세요.
SwiftOnceSources.FoldedObjCGetterTailsExecuteOnceAndRetainsAtO0AndO2 는 실제 ARM64/x64 반환 꼬리를 접고 결합 또는 분리된 retain 호출과 독립 또는 인라인 조건값을 다루며, 출력 C를 런타임 스텁으로 O0/O2에서 실행한다. 결과 비트, 한 번의 초기화, 호출 순서와 캐시값 변경을 검사한다. FoldedObjCGetterTailsRevalidateCurrentStorageAndCalls는 저장된 계획이 있어도 너비, 순서, 내장 연산, 저장소, 결과, 호출과 현재 가져오기 변경을 거부한다. 이는 통제된 소스와 스텁 검사이며 원래 WMF 기계어나 네이티브 Swift 런타임 실행은 아니다.
SourceFrameAnalysis.CompleteOutput*는 완전하거나 짧은 접두 영역, 모든 반환 경로의 병합, SDK 꼬리 호출 쓰기, 누락 바이트, 포인터 탈출 및 ABI 전달 위치 제약을 검사한다. 호출자 사례는 없거나 짧은 인증서, 정렬 오류, 프레임 경계 위반 및 저장 레지스터 겹침, 별칭, 후속 쓰기로 인한 무효화와 살아 있는 불투명 값의 겹침을 거부한다. NativeSourceHints.CompleteNativeOutput*는 조립한 ARM64 생산자와 소비자를 재검증하고 완전한 SDK 입력 범위를 요구하며 오래된 코드, CFG, ABI, 감사, 공급자 및 호출 위치 증거를 거부한다. 이는 바이트 초기화와 소스 허용 검사이며 원래 기계 코드 본문을 실행하거나 네이티브 논리 반환값을 인증하지 않는다.
MedCallingConvValueFlow.FPInputsFollowOnlyAuthenticatedCallPrefixes / NativeSourceHints.PreservedFPPrefixesRetainAllEntryInputsAfterSDKCalls: 보존 접두 영역 회귀는 유효한 읽기 세 가지와 전달 위치, 접두 영역, 호출 소유 정보 및 미사용 값에 관한 거부 사례 열아홉 가지를 검사한다. 조립한 ARM64 호출자는 SDK 호출을 거치면서 네 개의 진입 double 레인을 모두 유지하며 새 리프팅으로 완전한 매개변수 ABI와 소스 허용을 확인한다. 변경하지 않은 허용된 WMF 0x36350 메서드는 독립적인 네이티브 CoreGraphics 뒤집기·이동·정규화·연결·적용 식과 비교하여 O0 및 O2에서 각각 2048 사례를 통과한다. 결과 32바이트 전체, 수신자/선택자 및 입력 보호 영역을 검사하며 0, 음수, 무한대와 NaN 크기를 포함한다. 원래 WMF 기계 코드 본문은 실행하지 않는다.
SourceABI.SwiftEntryCapturesAndReturnsTheErrorRegisterOnEveryPath는 ARM64/x64 진입 캡처, 두 반환 경로 및 누락되거나 변경된 전달 증명의 거부를 검사합니다. NativeSwiftCallsKeepBothResultsAndPostCallErrorBranches는 호출 결과, 갱신된 오류 레지스터와 후속 조건을 유지하고 내부 이름 충돌과 두 출력 순서를 검사합니다. 생성 C는 호스트 Darwin 대상에서 O0/O2로 실행하여 독립적인 성공/실패 기준과 비교합니다. SwiftFunctionSymbols.RegularExpressionInitializerRetainsContextAndError는 별칭, 전체 심볼 변경, 비코드 진입과 미지원 이미지 형식을 거부합니다. 원래 WMF 생성자를 실행하거나 상위 메서드의 완전한 복원을 입증하지는 않습니다.
NativeSourceHints.SwiftErrorDeclaration*는 관측으로 추정한 스칼라 ABI를 컴파일러 선언으로 바꾼 뒤 조립된 ARM64/x64 진입점을 다시 리프트합니다. 현재 감사가 없거나 불완전하면 교체를 거부하며, 옵션·MedIR·HighIR의 명시적 소스 계약은 우선권을 유지합니다. 진입점 테스트는 HighIR 변환 전에 MedIR 오류 출력 표식 누락이나 잘못된 피연산자 너비도 거부합니다.
모든 경로가 오류 레지스터를 덮어써도 진입점의 캡처 값은 라이브니스 루트로 남으며, once 바인딩 뒤의 최종 소스 정리에서도 유지됩니다. NativeSourceHints.SwiftErrorCallsRequireCurrentDirectNativeProjection는 없거나 null이거나 변경되거나 증명되지 않은 피호출 함수와 변경된 대상, 간접 호출, 불완전한 결과, 누락된 피연산자 및 호환되지 않는 효과를 거부합니다.
SwiftFunctionSymbols.RepeatedDeclarationsKeepEveryRecordField는 동일한 중복 레코드를 검사하고 변경된 이름, 크기, 경계 출처 또는 이름 출처를 거부합니다. NativeSourceHints.SwiftErrorCallResults*는 ARM64/x64 호출자 자동 추론을 검사하며 현재 피호출자 누락, 변경된 기계 연산, 오래된 감사, 불완전한 ABI와 누락되거나 좁아지거나 관련 없는 결과 추출을 거부합니다. 진입 소스 실행은 충돌하는 선택적 디버그 선언이 있어도 연결된 규약과 오류·컨텍스트 역할을 유지하는지 확인합니다.
Swift witness 생성기는 ARM64/x86-64 macOS와 Mac Catalyst에서 CurrentValueSubject: Publisher와 Range<Bound: Comparable>: RangeExpression을 검증합니다. scripts.tests.test_generate_swift_witness_contracts는 변경된 제네릭 입력, 메타데이터 응답 타입이나 멤버, 프로토타입, 내보내기 제공자와 불완전한 흐름을 거부합니다. ObjCSourceBindings.SwiftWitnessUndefRequiresExactDescriptorContract 및 SwiftWitnessUndefRejectsUnprovedInputAndABI는 두 설명자를 두 아키텍처에서 확인하며, 설명자와 아키텍처마다 runtime/가져오기 식별, 약한 또는 충돌하는 저장소, ABI와 부수 효과에 관한 33개 변형을 검사합니다. 이 카탈로그는 프레임 배치나 빌림 계약을 부여하지 않습니다.
scripts.tests.test_generate_swift_data_declarations는 완전한 String.Index 설명자 질의를 확인하고 기호 셀, 레시피 바이트나 길이, 메타데이터/캐시 흐름, runtime ABI 변경 및 중복되거나 누락된 정의를 거부합니다. ObjCSourceBindings.SwiftRangeIndexDescriptorKeepsItsCompleteRecipe는 두 아키텍처에서 선두가 아닌 오프셋 3의 설명자를 확인합니다. SwiftRangeIndexDescriptorRejectsStaleIdentityAndRecipe는 각 아키텍처에서 20개 변형을 거부하고 기존 주소 힌트와 helper 출력을 재검증합니다.
ObjCSourceBindings.PrivateFramePointerTailRequiresExactStoreOnEveryPath는 PHI 병합 후 객체 로컬의 순환과 같은 순환에 비공개 프레임 값이 들어가는 경우를 검증합니다. 객체 순환은 정확한 포인터 저장을 보존하지만 프레임 값이 있는 순환, 부분 덮어쓰기와 알 수 없는 프레임 유출은 증명을 거부합니다.
ObjCCallHints.FoundationGenericNSRangeKeepsSixPointersAndTwoWords는 두 아키텍처와 공급자, 모든 인자와 결과를 검증하고 약한 가져오기, 가산 오프셋, 다른 공급자, 오래된 심볼과 만들어낸 대여 효과를 거부합니다.
scripts.tests.test_generate_swift_witness_contracts의 String 리더는 완전한 흐름을 검증하고 저장소·ABI·흐름 변형 28개와 모호한 선언 7개를 거부하며 입력 예산을 적용합니다. 바인딩 테스트는 두 아키텍처의 네 서술자에 각각 33개 변형을 적용합니다. 서술자 식별은 프레임 레이아웃이나 대여를 허용하지 않습니다.
PreparedFiniteKeys.*는 문맥 소멸과 이름 변경, 투영 순서와 한도, 이동 후 명시적 무효화, 잘못되거나 불완전한 결과, 빈 도메인과 비단일 도메인, 정확한 용량 경계를 검사합니다. 기존 캐시와 프레임 회귀도 준비된 키 경로를 검사합니다.
SourceABI.SwiftPointTransformKeepsTwoFloatingInputsAndResults는 두 아키텍처에서 레지스터, 배치, 컨텍스트 역할 및 간접 결과 변경을 거부한다. SourceABI.SwiftPointForwardingPreservesBothIEEECarriers는 -O0/-O2에서 전달 소스를 실행하여 두 필드의 부호 있는 0, 비정규 수, 무한대와 NaN 페이로드를 검사한다. 선언 테스트는 컴파일러 및 이름 있는 인자 형태를 허용하고 변경된 서명과 모호한 이미지 식별을 거부한다.
MainActor 픽스처는 고정 메타데이터와 정적 테이블의 전체 흐름을 확인하고 저장소, ABI, 메타데이터 추출, 테이블 식별, 추가 효과, 누락되거나 중복된 선언 및 입력 예산 초과를 거부합니다. 두 카탈로그는 모든 대상에서 세 SDK 내보내기를 요구합니다. arm64/x64 witness 바인딩 시험은 네 설명자 각각에 대해 아키텍처별 33개의 입력, 가져오기 및 ABI 변이를 확인합니다. 호스트 런타임 시험은 다섯 인스턴스화 인수 비트 패턴으로 공개 테이블을 비교합니다.
BitVectorEncodingClone.WatchMigrationAndGrowthOutliveTheSource는 복사 후 원본 소멸, 리터럴 테이블과 공유 감시 목록 확장, 형제 복사본의 독립 변경, 감시 방문 한 번에서의 전파 중단을 검사합니다. 재개된 전체 모델을 원래 절과 독립적인 불리언 관계로 검증합니다.
ObjCCallHints.SwiftPublishedAccessorsKeepOpaqueValueAndAllKeyPaths는 ARM64/x86-64와 두 정식 Combine 제공자에서 두 접근자를 검증하며, 조합마다 ABI 변형 아홉 개와 가져오기 식별 변형 여덟 개를 거부합니다. 독립 SDK 검증은 ARM64 호스트에서 두 소스 아키텍처 구성의 생성 C를 O0/O2로 실행하고, 128회 호출에서 페이로드 24바이트 전체, 입출력 보호 영역 및 두 owner 식별을 비교합니다. 교차 컴파일 구성 여덟 개가 macOS/Mac Catalyst의 두 아키텍처를 확인합니다. 런타임 검증은 setter가 소비하는 참조를 보존하며 제품 코드의 빌림이나 소유권 생략을 허용하지 않습니다.
ObjCCallHints.SwiftMainActorSharedKeepsObjectAndMetatypeContext는 ARM64/x86-64의 전체 반환값과 swiftself 전달 위치를 검증하며, 아키텍처마다 ABI 변형 열 가지와 가져오기 식별 변형 열 가지를 거부합니다. 독립 SDK 검증은 두 소스 아키텍처 구성의 수정하지 않은 생성 C를 ARM64 호스트에서 O0/O2로 실행합니다. 128번의 호출에서 싱글턴과 메타타입 식별 및 참조 소유권 균형을 확인합니다. 여덟 가지 교차 컴파일 구성은 두 아키텍처의 macOS와 Mac Catalyst를 다루며, x86-64 네이티브 실행은 별도 검증 범위입니다.
BitVectorEncodingClone.RootQueuePreservesDecisionsAcrossGrowthAndBudgets 는 루트 할당 변수와 미결정 변수의 혼합, 비결정 루트 변수, 복사본의 재복사, 원본 소멸, 후속 변수 증가, 두 기본 극성, 예산 중단과 재개, 충돌과 재시작을 검사합니다. 전체 모델과 모든 검색 카운터는 새 인코딩과 같아야 합니다.
ContextFiniteProofs.*는 컨텍스트와 소유자 격리, 소유자 교체, 토큰 이동, 정확한 술어와 투영 순서, 노드 추가, 완료 및 미완료 결과, 저장 한도와 LRU 제거를 검사합니다. 프레임 테스트는 저장 전 마지막 유일성 질의와 캐시 적중 시 심볼릭 노드 한도를 확인합니다.
LinuxPriorityTests.cpp는 명시적인 작업 상태, 스레드 격리, 누락된 관찰값, 잘못된 JSON, 프로필 허용과 거부 효과를 검사합니다. 독립적인 x64/AArch64 원시 호출 프로그램을 O0/O2에서 실행하여 nice 제한, 시스템 호출 인수의 32비트 축소, CAP_SYS_NICE/RLIMIT_NICE 권한 경계와 커널 getpriority 인코딩을 검증합니다. NeverDLinuxProcessTests에서 LinuxPriority.*와 Backends/LinuxPriorityProcess.*를 실행하고, 공유 커널/JSON 변경 시 전체 Linux 프로세스, Android 네이티브 및 프로세스 공개 API 테스트를 실행합니다. 선택적인 네이티브 전송이 없으면 명시적으로 건너뜁니다.
LinuxKernelAvailability.*는 명시적인 부재 입력과 프로필 허용을 검증합니다. Backends/LinuxKernelProcess.*는 독립적인 x64/AArch64 O0/O2 원시 호출 프로그램으로 인수 검사 전의 ENOSYS 및 미지정/무관한 호출의 거부를 확인합니다. Android syscall 픽스처는 원시 SVC와 Bionic syscall을 비교하며 원시 반환값과 errno 효과를 구분합니다. 가용성 변경 시 이 집중 테스트, 전체 Linux 프로세스 및 공개 API 테스트와 Android syscall, 네이티브 진입 및 시그널 테스트를 실행합니다.
CompletedQueryCache.*는 전체 바이트 영역의 답, 모든 압축 위치, 확장, 컨텍스트와 소유자 격리, 잘못되거나 불완전한 입력, 정확한 저장 한도를 검사합니다. 네이티브 분기 회귀는 완료된 답으로 백엔드 작업을 생략해도 고정된 논리 질의 비용과 정확한 예산 및 하나 부족한 예산의 거부를 유지합니다.
BinaryLowIRRefinement.NativeTargetDomainsKeepIndependentProjections / FrameOffsets.FrameAndJointTargetProjectionsKeepIndependentSearches 는 분기 변경과 기호적 프레임 쓰기를 포함한 반복 네이티브 대상 체인, 고정 논리 비용, 정확하거나 한 번 부족한 질의 예산, 잘못된 대상 한도, 게이트 예산 소진 및 잘못된 종료 관측을 검사합니다. 교차하는 프레임 및 상관 대상 투영은 술어 교체 전후에도 완전한 튜플, 관측 순서와 불완전한 결과 거부를 유지합니다.
FrameOffsets.Cached*는 기준값의 상위 비트를 자유롭게 유지한 주소 평행 이동, 부호 없는 순환, 합의 형태 변경, 두 캐시 모드, 술어 분리, 용량 0, 쿼리/노드 예산 거부, 빈 집합과 비유일 집합의 구분을 검사한다. 최초 요청은 완전한 솔버 증명을 유지하며, 후속 평행 이동은 남은 쿼리 예산이 없어도 이미 완료된 증명을 사용할 수 있다.
AndroidTestExecution.def는 FiniteRegistryRejectsBeforeSuccessAndCanBeReused에 전체 CTest 제한 120초와 RUN_SERIAL을 설정합니다. 두 워크로드는 각각 30초 실행 한도를 유지하며, 직렬화는 용량 테스트의 경합을 방지합니다. O0/O2 및 재배치의 여섯 구성을 모두 포함합니다.
LinuxPIDFD.*는 계열 파싱, 잘못된 열거, GKI와 부재 관측 충돌, 잘못되거나 과도하거나 모순된 작업 목록을 로드 전에 검사합니다. Backends/LinuxPIDFDProcess.*는 독립적인 O0/O2 x64/AArch64 호출자로 여덟 계열의 플래그, 공유 할당, 제한, close/재사용, 닫힌 목록, 비리더 오류와 스칼라/벡터 순서를 확인합니다. 부재 대상과 비리더는 FD 소진 전에 검사하며 스레드 플래그와 암시적 self만 있는 빈 목록도 다룹니다. 벡터 사례는 앞선 음수 길이와 뒤의 접근 불가 메타데이터, 원래 범위가 사용자 한계를 넘지만 제한한 범위는 유효한 버퍼를 비교하여 pidfd와 두 캡처 스트림을 확인합니다. Android의 ReleasedGKIProcessDescriptorsShareRawAndBionicOwnership, ReleasedGKIVectorImportRetainsRawAndBionicErrors, ReleasedGKICatalogueRetainsRawAndBionicLookupErrors는 여섯 재배치 구성에서 원시 오류, Bionic errno, 목록과 소진 규칙을 유지합니다. 먼저 대상 테스트를 실행한 뒤 전체 Linux 프로세스, Android native, 공개 프로세스 스위트를 실행하세요. 모델을 실행하며 여덟 GKI 커널을 부팅하지 않습니다.출시된 GKI 계약을 참조하세요.
ProcessCPUClocksRetainIdentityAndIdleSeparation, ProcessCPUClocksKeepMissingObservationBoundaries, LinuxClock.ProcessCPUObservationsShareAliasesAndRemainFixedWhileIdle: 여덟 고정 버전의 원시/Bionic 식별, PROF/VIRT/SCHED, 하위 32비트, 포인터 오류보다 앞선 대상 검증, 표본 누락, 별칭, 음수 CPU 시간 거부와 벽시계/CPU 유휴 분리를 확인합니다. AndroidTimeTests.cpp는 출력과 감시값을, 협력 syscall은 현재 비리더 TID를 확인합니다.
ZeroTimeoutPollRetainsReadinessAndOrderedCopies는 여덟 버전의 O0/O2 원시 호출에서 생존·음수·닫힌 설명자, 중복 개수, 인수 축소, 시간 제한/마스크 순서, 읽기 전용 0 timespec, 모든 메타데이터의 선행 반입 및 후속 오류에 유지되는 revents를 검증합니다. ZeroTimeoutPollKeepsUnobservedBoundaries는 미관측 커널, 한도, 마스크, 대기 및 준비 상태 경계를 유지합니다. Android의 ReleasedGKIZeroTimeoutPollSharesRawAndBionicResults는 여섯 패킹 프로필에서 공유 표와 errno 소유권을 확인합니다.