Die Standard-C-Bibliothek PicoLibc 1.8.9 wurde veröffentlicht und wird von Keith Packard (Leiter des X.Org-Projekts) für den Einsatz in eingebetteten Geräten mit begrenztem nichtflüchtigem Speicher und RAM weiterentwickelt. Bei der Entwicklung wurden Teile des Codes aus der newlib-Bibliothek des Cygwin-Projekts und aus AVR Libc, das für Atmel AVR-Mikrocontroller entwickelt wurde, übernommen. Der Code von PicoLibc ist unter der BSD-Lizenz lizenziert. Es wird eine Bibliotheksversion für die Architekturen ARM (32-Bit), Aarch64, i386, RISC-V, x86_64, m68k, PowerPC, LatticMico32, LoongArch und OpenRisc unterstützt.
Das Projekt wurde ursprünglich 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 zu verwenden waren. Zum Beispiel wurden in PicoLibc die stdio-Funktionen durch eine kompakte Variante aus der avrlibc-Bibliothek ersetzt. Der Code wurde außerdem von nicht verwendeten Komponenten bereinigt, die nicht unter der BSD-Lizenz geliefert werden. Es wurde eine vereinfachte Variante des Initialisierungscodes (crt0) hinzugefügt, und die Implementierung von Aufrufen wurde von ‚struct _reent‘ auf den Mechanismus TLS (Thread-local storage) umgestellt. Für den Build wird das Meson-Toolchain verwendet.
In der neuen Version:
- Unterstützung für die Architekturen LoongArch, OpenRISC und LatticMico32 hinzugefügt.
- Implementierung der Header-Datei uchar.h vorgeschlagen, die im C11-Standard eingeführt wurde.
- Die nano-malloc-clear-freed-Einstellung wurde hinzugefügt, um den nach der Ausführung von free() oder realloc() freigegebenen Speicher zu bereinigen.
- Die Möglichkeit zur Verwendung von clang multilib auf ARM64-Systemen wurde realisiert.
- Übergang zu den neuen Werkzeugen picolibc-ci-tools für die automatische Erstellung in CI-Systemen vollzogen.
- Für die MIPS-Architektur wurde Unterstützung für die Semihosting-Technologie hinzugefügt, die es Code ermöglicht, der in einer Debugger- oder Emulationsumgebung ausgeführt wird, die Ein- und Ausgabe-Mechanismen des Hosts zu nutzen.
- Unterstützung für picocrt und semihost für Xtensa-Prozessoren hinzugefügt.
- Einstellungen für die Verwendung mit CoreBoot hinzugefügt.
- Funktion memset_explicit() hinzugefügt, die im C23-Standard eingeführt wurde.
- Symbolregister-Konvertierungstabellen auf die Spezifikation Unicode 15.1.0 aktualisiert.
- Funktionen asnprintf() und vasnprintf() aus der Bibliothek newlib übertragen.
- Unterstützung für den Emulator FVP (Fixed Virtual Platforms), entwickelt von ARM, hinzugefügt.
- Unterstützung für ältere Versionen des GCC-Compilers (älter als 4.4) hinzugefügt.
- Die Implementierungen von iconv und locale wurden durch kompaktere Varianten ersetzt, die gemeinsamen Code zur Arbeit mit Kodierungen verwenden.
Quelle: opennet.ru
