Exemple de trame d`appel sortant

By December 24, 2018 No Comments

Dans Lab 10, nous avons couvert la portion de l`ABI SPARC qui traite des procédures de feuille optimisées. Lorsque les tailles de trame de pile peuvent différer, par exemple entre différentes fonctions ou entre les appels d`une fonction particulière, l`éclatement d`un cadre de la pile ne constitue pas une décrémentation fixe du pointeur de pile. Par conséquent, parfois, certaines fonctions n`ont pas besoin d`un cadre de pile pour être placé sur la pile, juste l`adresse de retour est poussé sur la pile. Dans certains environnements, il peut y avoir plus ou moins de fonctions affectées à la pile des appels. La première chose pour la conception de l`appel de fonction Cpu0 est de décider comment passer des arguments dans l`appel de fonction. Cela permet généralement de restaurer les valeurs de Registre enregistrées (telles que la valeur du pointeur frame) à partir du frame de pile, de faire apparaître l`intégralité du frame de pile hors de la pile en changeant la valeur du pointeur de la pile et enfin de la branche à l`instruction à l`adresse de retour. Mentionné dans la dernière section, option LLC-CPU0-S32-Calls = true utilise S32 Convention d`appel qui transmet tous les arguments dans les registres tandis que option LLC-CPU0-S32-Calls = false utilise o32 passer les deux premiers arguments dans les registres et autres arguments à la pile. Les arguments entrants sont les arguments formels définis dans les livres de langage du compilateur et du programme. Les éléments suivants sont stockés sur la pile: variables locales et Temporaries, paramètres réels de l`instruction en cours (procédure, fonction, etc.). Pour certaines raisons, le cadre de pile d`une sous-routine et celui de son appelant peuvent être considérés comme chevauchements, le chevauchement consistant de la zone où les paramètres sont passés de l`appelant à l`appelé.

Lorsque cette situation est appliquée dans l`appel de fonction récursive, elle réduit souvent asymptotiquement les besoins en espace de pile de linéaire, ou O (n), à constant, ou O (1) [5]. Heap stockent les valeurs d`allocation de mémoire dynamique. L`argument de taille est la taille, en octets, du message sortant. Le fait d`avoir un tel champ dans un emplacement connu dans le frame de pile permet au code d`accéder à chaque image successivement sous le cadre de la routine en cours d`exécution, et permet également à la routine de restaurer facilement le pointeur frame vers le frame de l`appelant, juste avant son retour. Selon LLVM IR, option Clang-O3 remplacer la récursivité avec boucle par Inline la fonction de récursivité appelé. Il sera montré dans la section suivante avec Chapter9_2 exemple de code. C`est un exemple d`abstraction. Fig. Cpu0 emprunte à partir de cette version. Si je me souviens bien, l`adresse de retour de fonction est poussé sur la pile d`abord, puis les arguments et l`espace pour les variables locales. Ils se distinguent depuis que JSUB utilise l`opérande «IMM» tandis que JALR emploie l`opérande de registre.

Il générera ASM “Addiu $sp, $sp,-24” pour ch9_3_alloc. La dernière section mentionnait le modèle «JSUB texternalsym». Maintenant, le pointeur de pile pointe vers l`adresse de retour dans foo qui a été enregistré lors de l`instruction d`appel a été exécutée et notre frame est effectivement désinstallé. L`option-Relocation-modèle = statique est pour la fonction de liaison statique tandis que l`option-Relocation-modèle = pic est pour la fonction de lien dynamique.

user

About user