Obtention de la valeur du pointeur de pile pendant que la pile se déroule avec nanarf2

StackOverflow https://stackoverflow.com/questions/5040352

  •  15-11-2019
  •  | 
  •  

Question

Dans le format de débogage de nanarf2, le détente de pile est pris en charge à l'aide de CFI (information d'appel d'appel) présente dans la section .debug_frame. Il s'agit précisément d'un tableau qui conserve une règle pour chaque registre pour obtenir sa valeur dans le cadre précédent. Cependant, toutes ces règles repose sur le fait que les registres sont enregistrés sur la pile à un endroit. Ce n'est pas vrai pour l'obtention de la valeur du pointeur de pile dans le registre de trame précédent lorsqu'il n'y a pas de pointeur de trame. Dans de tels cas, le pointeur de pile peut ne pas être enregistré sur la pile mais simplement géré en incrémentant et en décrémentant sa valeur. Cependant, il n'y a aucun moyen dans le nanarf2 (ou le format nain en général) pour indiquer que la valeur du registre est une expression sur sa valeur actuelle. Donc, ma question est de savoir comment peut-on obtenir la valeur du pointeur de pile pendant le détente de pile avec le format de débogage nanche (quand aucun objet-pointeur n'est là).

-BV

Était-ce utile?

La solution

Il semble que DWARF3 prend en charge DW_CFA_VAL_OFFSET pour un tel cas. Ainsi, cela peut être utilisé pour enregistrer la valeur de SP dans le cadre précédent basé sur une expression arithmétique sur la valeur actuelle. Une autre solution possible pourrait être d'enregistrer le pointeur de pile sur la pile elle-même (fonctionnera avec nanarf2). Cela peut être fait au niveau d'optimisation -O0 où l'efficacité du code n'est pas si importante.

Autres conseils

Voir cette discussion sur ce qui semble être votre problème. Je ne suis pas sûr de savoir si les propositions ont encore fait partie de la norme actuelle.

Je suis allé à cette discussion. Mais, je me demandais simplement si quelqu'un a déjà essayé de le résoudre d'une autre manière. Une façon dont je peux penser est une sauvegarde inutile de pile-pointer sur la pile elle-même. Ensuite, utilisez cet emplacement pour obtenir la valeur de SP pour le cadre précédent.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top