Pubblicato il rilascio della libreria standard C PicoLibc 1.8.9, sviluppata da Keith Packard (leader del progetto X.Org) per l'uso su dispositivi embedded con spazio di archiviazione limitato e memoria RAM ridotta. Nello sviluppo, parte del codice è stata presa in prestito dalla libreria newlib del progetto Cygwin e da AVR Libc, sviluppata per microcontrollori Atmel AVR. Il codice PicoLibc è distribuito con licenza BSD. È supportata la compilazione della libreria per le architetture ARM (32-bit), Aarch64, i386, RISC-V, x86_64, m68k, PowerPC, LatticeMico32, LoongArch e OpenRisc.
Inizialmente il progetto è stato sviluppato con il nome di «newlib-nano» ed era mirato a rielaborare alcune funzioni economiche di Newlib, che era difficile utilizzare su dispositivi embedded con poca RAM. Ad esempio, in PicoLibc le funzioni stdio sono state sostituite con una versione compatta dalla libreria avrlibc. Il codice è stato anche ripulito dalle componenti non utilizzate nella compilazione per i dispositivi embedded, fornite non con licenza BSD. È stata aggiunta una versione semplificata del codice di inizializzazione (crt0), e l'implementazione delle chiamate è stata trasferita dal ‘struct _reent’ al meccanismo TLS (thread-local storage). Per la compilazione è stato utilizzato lo strumento Meson.
Nel nuovo rilascio:
- Aggiunta supporto per le architetture LoongArch, OpenRISC e LatticeMico32.
- Proposta l'implementazione del file di intestazione uchar.h, apparso nello standard C11.
- Aggiunta l'impostazione nano-malloc-clear-freed per liberare la memoria dopo l'esecuzione di free() o realloc().
- Realizzata la possibilità di utilizzare clang multilib sui sistemi ARM64.
- Transizione al nuovo strumento picolibc-ci-tools per la compilazione automatica nei sistemi di integrazione continua.
- Per l'architettura MIPS è stata implementata la tecnologia «semihosting», che consente al codice in esecuzione in un ambiente di debug o emulazione di utilizzare i meccanismi di input/output del sistema host.
- Per i processori Xtensa è stato aggiunto il supporto per picocrt e semihost.
- Aggiunte impostazioni per l'uso con CoreBoot.
- Aggiunta la funzione memset_explicit(), apparsa nello standard C23.
- Tabelle di conversione del registro dei caratteri aggiornate alla specifica Unicode 15.1.0.
- Funzioni asnprintf() e vasnprintf() trasferite dalla libreria newlib.
- Aggiunto il supporto per l'emulatore FVP (Fixed Virtual Platforms), sviluppato da ARM.
- Aggiunto il supporto per versioni obsolete del compilatore GCC (precedenti alla 4.4).
- Le implementazioni di iconv e locale sono state sostituite con varianti più compatte, in cui è stato utilizzato un codice comune per la gestione delle codifiche.
Fonte: opennet.ru
