Partager via


FunctionTailcall2 (fonction)

Avertit le profileur que la fonction en cours d’exécution est sur le point d’effectuer un appel tail à une autre fonction et fournit des informations sur le frame de pile.

Syntaxe

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

Paramètres

funcId [in] Identificateur de la fonction en cours d’exécution qui est sur le point d’effectuer un appel tail.

clientData [in] Identificateur de fonction remappé, que le profileur a précédemment spécifié via la fonction FunctionIDMapper, de la fonction en cours d’exécution qui est sur le point d’effectuer un appel tail.

func [in] Valeur COR_PRF_FRAME_INFO qui pointe vers des informations concernant un frame de pile.

Le profileur doit traiter cela comme un descripteur opaque qui peut être passé au moteur d’exécution dans la méthode ICorProfilerInfo2::GetFunctionInfo2.

Notes

La fonction cible de l’appel tail utilise le frame de pile actuel et retourne directement les résultats à l’appelant de la fonction qui a effectué l’appel tail. Cela signifie qu’un rappel FunctionLeave2 ne sera pas émis pour une fonction qui est la cible d’un appel tail.

La valeur du paramètre func n’est pas valide après que la fonction FunctionTailcall2 a retourné, car la valeur peut changer ou être détruite.

La fonction FunctionTailcall2 est un rappel ; vous devez l’implémenter. L’implémentation doit utiliser l’attribut de classe de stockage __declspec(naked).

Le moteur d’exécution n’enregistre aucun registre avant d’appeler cette fonction.

  • Lors de l’entrée, vous devez enregistrer tous les registres que vous utilisez, y compris ceux de l’unité à virgule flottante (FPU).

  • Lors de la sortie, vous devez restaurer la pile en décochant tous les paramètres qui ont été envoyés par son appelant.

L’implémentation de FunctionTailcall2 ne doit pas bloquer, car cela retarderait le garbage collection. L’implémentation ne doit pas tenter un garbage collection, car la pile peut ne pas être dans un état compatible avec le garbage collection. Si un garbage collection est tenté, le runtime bloque jusqu’à ce que FunctionTailcall2 soit retourné.

En outre, la fonction FunctionTailcall2 ne doit absolument pas appeler de code managé ni entraîner, de quelque manière, une allocation de mémoire managée.

Spécifications

Plateformes : Consultez Configuration requise.

Header: CorProf.idl

Bibliothèque : CorGuids.lib

Versions de .NET Framework : Disponible depuis la version 2.0

Voir aussi