Função FunctionTailcall2
Notifica o criador de perfil de que a função em execução está prestes a executar uma chamada tail para outra função e fornece informações sobre o registro de ativação.
Sintaxe
void __stdcall FunctionTailcall2 (
[in] FunctionID funcId,
[in] UINT_PTR clientData,
[in] COR_PRF_FRAME_INFO func
);
Parâmetros
funcId
[in] O identificador da função em execução que está prestes a fazer uma chamada tail.
clientData
[in] O identificador de função remapeado, que o criador de perfil especificou anteriormente por meio de FunctionIDMapper, da função atualmente em execução que está prestes a fazer uma chamada tail.
func
[in] Um valor COR_PRF_FRAME_INFO
que aponta para informações sobre o registro de ativação.
O criador de perfil deve tratar isso como um identificador opaco que pode ser retornado para o mecanismo de execução no método ICorProfilerInfo2::GetFunctionInfo2.
Comentários
A função de destino da chamada tail usará o registro de ativação atual e retornará diretamente ao chamador da função que fez a chamada tail. Isso significa que um retorno de chamada FunctionLeave2 não será emitido para uma função que é o destino de uma chamada tail.
O valor do parâmetro func
não é válido depois que a função FunctionTailcall2
é retornada porque o valor pode ser alterado ou destruído.
A função FunctionTailcall2
é um retorno de chamada e você deve implementá-la. A implementação precisa usar o atributo __declspec
(naked
) da classe de armazenamento.
O mecanismo de execução não salva nenhum registro antes de chamar essa função.
Na entrada, você precisa salvar todos os registros usados, incluindo aqueles na FPU (unidade de ponto flutuante).
Na saída, você deve restaurar a pilha removendo todos os parâmetros que foram enviados por push pelo chamador.
A implementação de FunctionTailcall2
não deve ser bloqueada porque atrasará a coleta de lixo. A implementação não deve tentar fazer uma coleta de lixo porque a pilha pode não estar em um estado adequado para a coleta de lixo. Se houver uma tentativa de coleta de lixo, o runtime será bloqueado até retornar FunctionTailcall2
.
Além disso, a função FunctionTailcall2
não deve chamar o código gerenciado ou de alguma forma causar uma alocação de memória gerenciada.
Requisitos
Plataformas: confira Requisitos do sistema.
Cabeçalho: CorProf.idl
Biblioteca: CorGuids.lib
Versões do .NET Framework: disponíveis desde 2.0