Journal Sortie de LLVM 10.0.0

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
39
31
mar.
2020

Demat'INal,

La semaine dernière sortait, après un processus de release candidate bien plus long que d'habitude (la rc1 date quand même du 30 janvier 2020), la version 10.0.0 de la toolchain LLVM, dont un des représentants les plus connus est le compilateur Clang.

Ce petit journal pour faire une sélection partiale des nouveautés.

Niveau Clang

[release note]

On notera principalement le support des concepts de C++20 à travers le drapeau -std=c++2a.

Si vous avez l'habitude de lancer gdb sur clang, vous serez ravis d'apprendre que le driver clang appelle désormais clang sans passer par un sous-processus, ce qui évite un set follow-fork-mode child.

Parmi la pléthore (rien à voir avec les pétaures) de nouveaux warning, on notera -Wmisleading-indentation qui reprend une idée introduite dans GCC et qui pointe du ^ des cas d'indentations suspects qui pourraient signifier une erreur de code, comme dans ce cas là :

int square(int num) {
    if (num)
        num = 0;
        return num;
}

Si vous êtes contraints par certaines versions de la glibc, le drapeau -fgnuc-version= permet désormais de définir les macros ad-hoc pour forcer une version particulière au niveau des fichiers d'en-tête (non, ça ne change rien à votre libc effective, ça permet juste de régler certains problèmes de compatibilité).

Assez amusant, le drapeau -fpatchable-function-entry=N[,M] permet d'ajouter N (resp. N-M) nop avant (resp. après) le point d'entrée des fonctions. Amis patcheurs de binaire, faites vous plaisir !

Plusieurs fonctionnalités d'OpenMP 5 font aussi leur entrée, notamment le bien pratique support des for range loop.

clang-format gagne le drapeau --dry-run, bien pratique pour vérifier qu'un fichier est bien conforme aux règles de formatage demandées.

Votre serviteur a corrigé un bug non négligeable dans la gestion de -D_FORTIFY_SOURCE, pour en savoir plus, c'est par là

Outils basés sur clang

[release note]

Une des forces de clang, c'est la possibilité d'écrire des outils cools qui comprennent vraiment le langage analysé (pour ne pas le nommer, C++) sans avoir à réécrire un parseur complet. On notera pas mal d'avancées dans :

LLVM, le cœur

[release note]

Le cœur de LLVM, c'est le LangRef, le document qui décrit la représentation interne utilisée et la sémantique de chacun des éléments. On notera l'introduction d'intrinsèques pour la gestion des opérations matricielles sur des types vectoriels, mais aussi l'instruction freeze qui permet de figer une valeur qui aurait été de type poison ou undef auparavant.

On notera avec amusement que pour les architectures skylake-avx512, LLVM essaie d'utiliser principalement des vecteurs de 256 bits pour éviter des ralentissements

Autres

Je fatigue, alors on va faire un best of pour les autres outils de la toolchain :

  • le linker lld propose de changer le mangling s'il voit qu'un symbole avec un mangling C++ aurait été bon avec
    le mangling C

  • le projet se voit doter d'une libc, llvm-libc qui est encore jeune, mais dont les documents de conceptions sont intéressants.

Communauté

Pour ceux que le côté social du développement Open Source intéresse, je vous invite à lire ce fil de discussion sur lequel j'émets humblement (mais fermement) quelques doutes.

Is it true that the apes wear furs of gold when they marry?

  • # Petite erreur

    Posté par  . Évalué à 8.

    Merci beaucoup pour ce journal fort intéressant.

    J'ai remarqué une petite erreur dans la section Outils basés sur clang.
    Le lien attaché à éditeur favoris est incorrect.
    Voici le bon lien: https://github.com/emacs-lsp/lsp-mode

  • # Typo

    Posté par  (site web personnel) . Évalué à 1.

    Bonjour, je crois avoir relevé une petite coquille :
    d'ajouter N (resp. N-M) ⇒ d'ajouter N (resp. M)
    Du coup, est-ce que ça veut dire qu'on demander à ajouter des NOP avant, avant et après, mais pas uniquement après ? Où alors il manque un morceau de syntaxe du genre -fpatchable-function-entry=,M.

    • [^] # Re: Typo

      Posté par  (site web personnel) . Évalué à 3.

      C'est bien une erreur, il fallait lire

      -fpatchable-function-entry=N[,M=0] permet d'ajouter M (resp. N-M)
      

      Si un modo peut faire le changement ?

  • # Côté social

    Posté par  . Évalué à 2.

    Bonjour, je n'ai pas réussi à trouver ta réponse dans tous les courriels qui ont suivi l'annonce de l'ouverture d'un serveur « Discord ».

    • [^] # Re: Côté social

      Posté par  (site web personnel) . Évalué à 2.

      Ahah, magie du français. J'émets des doutes sur le sujet, mais je les garde pour moi :-)
      Sans trop prendre partie, on remarquera que la communauté s'est scindée entre ceux qui sont sur IRC, ceux qui sont sur Discord, et ceux qui sont sur les deux.

  • # Comme sur les 360 ?

    Posté par  (site web personnel, Mastodon) . Évalué à 3.

    Assez amusant, le drapeau -fpatchable-function-entry=N[,M] permet d'ajouter N (resp. N-M) nop avant (resp. après) le point d'entrée des fonctions. Amis patcheurs de binaire, faites vous plaisir !

    OMG ! C'est enfin le retour de Superzap ?

  • # Patch

    Posté par  . Évalué à 0.

    Pour le -fpatchable-function, on verrait une version plus générique du -finstrument-functions de gcc mais à y réfléchir un peu ça semble difficilement utilisable en comparaison, surtout dans un contexte visant plusieurs architectures avec des tailles d'instruction "nop" potentiellement différentes…

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.