FunctionTailcall2 함수

현재 실행 중인 함수가 다른 함수에 대한 마무리 호출을 수행하려고 했음을 프로파일러에 알리고 스택 프레임에 대한 정보를 제공합니다.

구문

void __stdcall FunctionTailcall2 (  
    [in] FunctionID         funcId,
    [in] UINT_PTR           clientData,
    [in] COR_PRF_FRAME_INFO func  
);  

매개 변수

funcId [in] 마무리 호출을 수행하려는 현재 실행 중인 함수의 식별자입니다.

clientData [in] 프로파일러가 이전에 FunctionIDMapper를 통해 지정했으며 마무리 호출을 수행하려는 현재 실행 중인 함수의 재매핑된 함수 식별자입니다.

func [in] 스택 프레임에 대한 정보를 가리키는 COR_PRF_FRAME_INFO 값입니다.

프로파일러는 이를 ICorProfilerInfo2::GetFunctionInfo2 메서드에서 실행 엔진으로 다시 전달할 수 있는 불투명 핸들로 처리해야 합니다.

설명

마무리 호출의 대상 함수는 현재 스택 프레임을 사용하고 마무리 호출을 수행한 함수의 호출자에게 직접 반환됩니다. 즉, 마무리 호출의 대상인 함수에 대해 FunctionLeave2 콜백이 실행되지 않습니다.

func 매개 변수의 값은 값이 변경되거나 제거될 수 있으므로 FunctionTailcall2 함수가 반환된 후에는 유효하지 않습니다.

FunctionTailcall2 함수는 콜백이며, 이를 구현해야 합니다. 구현은 __declspec(naked) 스토리지 클래스 특성을 사용해야 합니다.

실행 엔진은 이 함수를 호출하기 전에 레지스터를 저장하지 않습니다.

  • 입력 시 FPU(부동 소수점 유닛)의 레지스터를 포함하여 사용하는 모든 레지스터를 저장해야 합니다.

  • 종료 시 호출자가 푸시한 모든 매개 변수를 제거하여 스택을 복원해야 합니다.

가비지 수집이 지연되므로 FunctionTailcall2 구현을 차단해서는 안 됩니다. 스택이 가비지 수집 친화적 상태가 아닐 수 있으므로 구현에서 가비지 수집을 시도해서는 안 됩니다. 가비지 수집이 시도되면 런타임은 FunctionTailcall2가 반환될 때까지 차단됩니다.

또한 FunctionTailcall2 함수는 관리 코드를 호출하거나 어떤 식으로든 관리 메모리 할당을 유발해서는 안 됩니다.

요구 사항

플랫폼:시스템 요구 사항을 참조하세요.

헤더: CorProf.idl

라이브러리: CorGuids.lib

.NET Framework 버전: 2.0부터 사용 가능

참고 항목