JIT trace not invalidated after re-linking
Personne n'a encore pris cette issue.
- Langage dominant
- C
- Étoiles
- 40.4k
- Forks
- 8.2k
- Merge moyen
- 2 j 13 h
- PR mergées (30 j)
- 96
Description
Description
JIT traces are not invalidated after a class is re-linked. The JIT code may make assumptions that are not true anymore after re-linking.
For example, in
<?php
$a=0;
class A implement Iface {
public function hello() {
global $a;
for ($i = 0; $i < 100; $i++) {
$a++;
}
}
}
we may still enter in the JITed loop after A has been re-linked (A can be re-link due to Iface being recompiled for example). The JITed code may be based on assumptions that are not true anymore (at least the run_time_cache pointer changes during linking, but I suspect that other assumptions can be made based on the parent classes or interfaces, that do not hold true after re-linking).
This is due to op_array.oplines being shared between all linked versions of the same class. oplines has pointers to JITed code.
op_array.oplines is also shared between all sub-classes, but as long as the JIT's asumptions are based on the declaring class it should be ok.
PHP Version
PHP 8.1
Operating System
No response
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Aucun fichier source ni aucun test n’est indiqué. Commencez par l’exemple PHP 8.1 et étudiez les traces JIT lors du re-liaison des classes ; le travail est terminé lorsque le code JIT obsolète est invalidé afin que l’exécution ne puisse pas conserver les hypothèses de la classe liée précédemment, avec une couverture de régression pour ce scénario.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- c, php
- Domaine
- compilers
- Type d'issue
- Bug
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Activité
- À l'abandon
- Clarté
- À clarifier
- Accessibilité débutants
- 35/100