2016-11-09 1 views
0

Qemu의 소스 코드를 읽고 Qemu가 x86 프로세서 용 eflags를 에뮬레이트하는 방법을 궁금해했는데 target-i386/cc-helper.c 파일에서 compute_all_addw과 같은 기능을 발견했습니다. Qemu가 이러한 기능을 구현하는 방법을 알고 싶지만 정의를 찾을 수 없습니다. 이 모든 기능들. 내가 뭐 놓친 거 없니? 도와주세요.i386 대상의 QEMU 저장소에서 compute_all_xxx 함수의 정의를 찾을 수 없습니까?

답변

1

QEMU는 C 프리 프로세서를 사용하여 손으로 모두 작성하지 않고도 여러 가지 매우 유사한 기능을 만드는 방법을 자주 사용합니다. 이러한 특정 경우

이 코드는 타깃 I386/cc_helper_template.h이다 :

glue()
static int glue(compute_all_add, SUFFIX)(DATA_TYPE dst, DATA_TYPE src1) 
{ 
    int cf, pf, af, zf, sf, of; 
    [...] 
} 

단지 함께 인수 스틱 매크로이다. SUFFIXDATA_TYPESHIFT 값에 따라 .h 파일에서 앞에서 정의됩니다. target-i386/cc_helper.c 다음 #include 템플릿 .h 파일을 여러 번 반복하여 SHIFT을 다르게 정의합니다. 그 결과 compute_all_addb, compute_all_addw, compute_all_addlcompute_all_addq에 대한 함수 정의가 단일 템플릿에서 생성됩니다.

QEMU의 소스 코드에서 'grep'로 함수 정의를 찾을 수없는 경우 일반적으로 함수 이름의 하위 문자열을 검색하면 도움이 될 수 있습니다.

관련 문제