La version standard de la bibliothèque C PicoLibc 1.8.9, développée par Keith Packard (leader du projet X.Org), a été publiée pour une utilisation sur des dispositifs embarqués avec une mémoire de stockage permanent et une mémoire vive limitées. Lors 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 licence BSD. La bibliothèque prend en charge les architectures ARM (32 bits), Aarch64, i386, RISC-V, x86_64, m68k, PowerPC, LatticMico32, LoongArch et OpenRisc.
À l'origine, le projet a été développé sous le nom de "newlib-nano" et visait à retravailler certaines fonctions gourmandes en ressources de Newlib, qui étaient problématiques à utiliser sur des dispositifs embarqués avec peu de RAM. Par exemple, dans PicoLibc, les fonctions stdio ont été remplacées par une version compacte de la bibliothèque avrlibc. Le code a également été épuré des composants non utilisés dans la compilation pour les dispositifs embarqués, fournis sous une licence autre que BSD. Une version simplifiée du code d'initialisation (crt0) a été ajoutée, et l'implémentation des appels a été convertie de 'struct _reent' au mécanisme TLS (stockage local par thread). L'outil Meson a été utilisé pour la compilation.
Dans cette nouvelle version :
- Ajout du support pour les architectures LoongArch, OpenRISC et LatticMico32.
- Mise en œuvre de l'en-tête uchar.h, introduit dans la norme C11.
- Ajout de la configuration nano-malloc-clear-freed pour nettoyer la mémoire libérée après l'exécution de free() ou realloc().
- Possibilité d'utiliser clang multilib sur les systèmes ARM64.
- Migration vers les nouveaux outils picolibc-ci-tools pour l'automatisation des builds dans les systèmes d'intégration continue.
- Pour l'architecture MIPS, prise en charge de la technologie "semihosting", permettant au code exécuté dans un environnement de débogage ou d'émulation d'utiliser les mécanismes d'entrée/sortie du système hôte.
- Ajout du support picocrt et semihost pour les processeurs Xtensa.
- Ajout de paramètres pour une utilisation avec CoreBoot.
- Ajout de la fonction memset_explicit(), introduite dans la norme C23.
- Les tables de conversion des registres de caractères ont été mises à jour vers la spécification Unicode 15.1.0.
- Fonctions asnprintf() et vasnprintf() transférées depuis la bibliothèque newlib.
- Ajout du support 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 de iconv et locale ont été remplacées par des versions plus compactes utilisant un code commun pour la gestion des encodages.
Source : opennet.ru
