Résumé : ne pas utiliser attribute((leaf)), truc écrit par un humain et donc source de bug. Vaut mieux laisser le compilo faire de l'optimisation globale (lors du link etc...) quand possible et sinon faire comme prévu sans cet attribut.
Ou plus exactement ne l'utiliser que pour les fonctions qui ne fait que travailler sur ses paramètres. Par exemple il est tout à fait légitime que la fonction sin(3) soit marquée leaf. L'erreur, je pense, est de marquer leaf une fonction qui fait un appel système. Mais si une fonction qui recherche l'index d'un élément est un bon candidat par exemple :
pas d'utilisation de variable autre que les paramètres de la fonction (ou éventuellement à une variable statique de l'unité de compilation)
pas d'appel système
Je n'ai pas accès à un gcc 4.6 pour faire un essai mais un diagnostique pour les points 1 et 2 seraient possibles, voir même une suggestion de rajouter l'attribut (pour le point 1, ça concerne quasi exclusivement les mainteneurs de la glibc, je pense qu'ils ont compris maintenant).
Ceci dit les gains ne doivent pas être monumentales, cela ne concerne que les optimisations liées aux variables globales, et si un code est bourré de variables globales, je pense qu'il y a d'autres priorité que de rajouter des __attribute__((__leaf__)) partout.
[^] # Re: Un peu d'explications sur le bug introduit
Posté par Étienne . En réponse au journal Merci aux développeurs de la GNU libc !. Évalué à 5.
Ou plus exactement ne l'utiliser que pour les fonctions qui ne fait que travailler sur ses paramètres. Par exemple il est tout à fait légitime que la fonction sin(3) soit marquée leaf. L'erreur, je pense, est de marquer leaf une fonction qui fait un appel système. Mais si une fonction qui recherche l'index d'un élément est un bon candidat par exemple :
Les critères à réunir sont :
Je n'ai pas accès à un gcc 4.6 pour faire un essai mais un diagnostique pour les points 1 et 2 seraient possibles, voir même une suggestion de rajouter l'attribut (pour le point 1, ça concerne quasi exclusivement les mainteneurs de la glibc, je pense qu'ils ont compris maintenant).
Ceci dit les gains ne doivent pas être monumentales, cela ne concerne que les optimisations liées aux variables globales, et si un code est bourré de variables globales, je pense qu'il y a d'autres priorité que de rajouter des
__attribute__((__leaf__))partout.Étienne