La version de la bibliothèque C standard PicoLibc 1.8.9, développée par Keith Packard (leader du projet X.Org) pour une utilisation sur des appareils embarqués avec un stockage et une RAM limités, a été publiée. Au cours du développement, une partie du code a été empruntée à la bibliothèque newlib du projet Cygwin et à AVR Libc, développée pour les microcontrôleurs Atmel AVR. Le code PicoLibc est distribué sous la licence BSD. L'assemblage de bibliothèque est pris en charge pour les architectures ARM (32 bits), Aarch64, i386, RISC-V, x86_64, m68k, PowerPC, LatticMico32, LoongArch et OpenRisc.
Initialement, le projet était développé sous le nom de « newlib-nano » et visait à retravailler certaines des fonctions gourmandes en ressources de Newlib, qui étaient problématiques à utiliser sur des appareils embarqués avec peu de RAM. Par exemple, dans PicoLibc, les fonctions stdio sont remplacées par une version compacte de la bibliothèque avrlibc. Le code est également débarrassé des composants non utilisés dans l'assemblage de périphériques intégrés qui ne sont pas fournis sous la licence BSD. Une version simplifiée du code d'initialisation (crt0) a été ajoutée et l'implémentation des appels a été transférée de 'struct _reent' vers le mécanisme TLS (thread-local storage). La boîte à outils Meson est utilisée pour l'assemblage.
Dans la nouvelle version :
- Prise en charge ajoutée pour les architectures LoongArch, OpenRISC et LatticMico32.
- Une implémentation du fichier d'en-tête uchar.h introduit dans la norme C11 est proposée.
- Ajout du paramètre nano-malloc-clear-freed pour effacer la mémoire libérée après free() ou realloc().
- Implémentation de la possibilité d'utiliser clang multilib sur les systèmes ARM64.
- La transition vers la nouvelle boîte à outils picolibc-ci-tools pour l'assemblage automatique dans les systèmes d'intégration continue est terminée.
- L'architecture MIPS prend en charge la technologie « semi-hébergement », qui permet au code exécuté dans un environnement de débogage ou d'émulateur d'utiliser les mécanismes d'E/S du système hôte.
- Ajout de la prise en charge de picocrt et semihost pour les processeurs Xtensa.
- Paramètres ajoutés pour une utilisation avec CoreBoot.
- Ajout de la fonction memset_explicit(), introduite dans la norme C23.
- Les tables de conversion de casse ont été mises à jour selon la spécification Unicode 15.1.0.
- Les fonctions asnprintf() et vasnprintf() ont été déplacées de la bibliothèque newlib.
- Ajout de la prise en charge de l'émulateur FVP (Fixed Virtual Platforms) développé par ARM.
- Ajout de la prise en charge des anciennes versions du compilateur GCC (antérieures à 4.4).
- Les implémentations iconv et locale ont été remplacées par des versions plus compactes qui utilisent du code commun pour travailler avec les encodages.
Source: opennet.ru
