Die Standard-C-Bibliothek PicoLibc 1.8.6 wurde veröffentlicht, die von Keith Packard (Projektleiter von X.Org) für den Einsatz auf eingebetteten Geräten mit begrenztem nichtflüchtigem Speicher und RAM entwickelt wird. Bei der Entwicklung stammt ein Teil des Codes aus der Newlib-Bibliothek des Cygwin-Projekts und AVR Libc, die für Atmel AVR Mikrocontroller entwickelt wurde. Der PicoLibc-Code ist unter der BSD-Lizenz lizenziert. Die Bibliothek unterstützt den Bau für die Architekturen ARM (32-Bit), Aarch64, i386, RISC-V, x86_64, m68k und PowerPC.
Ursprünglich wurde das Projekt unter dem Namen "newlib-nano" entwickelt und hatte zum Ziel, einige ressourcenintensive Funktionen von Newlib zu überarbeiten, die auf eingebetteten Geräten mit wenig RAM problematisch waren. Zum Beispiel wurden in PicoLibc die stdio-Funktionen durch eine kompakte Version aus der avrlibc-Bibliothek ersetzt. Der Code wurde auch von Komponenten bereinigt, die in der Build-Umgebung für eingebettete Geräte nicht verwendet werden und nicht unter der BSD-Lizenz bereitgestellt werden. Eine vereinfachte Version des Initialisierungscodes (crt0) wurde hinzugefügt, und die Implementierung der Aufrufe wurde von 'struct _reent' auf den TLS-Mechanismus (Thread-local Storage) umgestellt. Für den Build wird das Meson-Toolset verwendet.
In der neuen Version:
- Änderungen aus Newlib 4.4.0 wurden übernommen, wie die Unterstützung des Typs „long double“ auf den Architekturen i386, RISC-V, Aarch64 und x86_64, die Unterstützung von RISC-V Zfinx/Zdinx Erweiterungen, die Möglichkeit, Masken beim Einfügen von Verzeichnissen zu verwenden, Implementierung des Ports für Xtensa-Prozessoren sowie die Trennung von printf-Handlern in separate Dateien zur Reduzierung der Größe beim Linken.
- In picolibc.ld wurden die Symbole „__eh_*“ für LLVM libunwind hinzugefügt.
- 32-Bit-SPARC-Systeme erhalten eine Testunterstützung.
- Die Unterstützung für Zielplatformen mit untypischen Gleitkommatypen wurde sichergestellt, die jetzt in 32-, 64-, 80- und 128-Bit-Typen im picolibc-Code widergespiegelt werden.
- Unterstützung für die RISC-Architektur SuperH wurde hinzugefügt.
- Die Stack-Trace-Verbesserung beim Debuggen von Ausnahmebehandlungen auf RISC-V-Systemen wurde vorgenommen.
- Die Option „-Dfast-bufio=true“ wurde hinzugefügt, um die Effizienz beim Lesen und Schreiben mit bufio zu verbessern.
- Öffentliche Inline-Funktionen wurden zur gemeinsamen Nutzung der gnu_inline Semantik bereinigt.
- Die meisten fenv-Funktionen wurden zur Leistungssteigerung auf die Verwendung von Inline-Funktionen (gnu_inline) anstelle von normalen Funktionen umgestellt.
- Eine alternative Implementierung von ctype wurde erstellt, bei der kein ctype-Array verwendet wird und die Werte direkt verglichen werden.
Quelle: opennet.ru
