Die Veröffentlichung der Standard-C-Bibliothek PicoLibc 1.8.9, die von Keith Packard (Projektleiter von X.Org) für den Einsatz in eingebetteten Geräten mit begrenztem nicht-flüchtigem Speicher und Arbeitsspeicher entwickelt wird, wurde bekannt gegeben. Bei der Entwicklung wurde ein Teil des Codes aus der newlib-Bibliothek des Cygwin-Projekts und AVR Libc, die für Atmel AVR-Mikrocontroller entwickelt wurde, übernommen. Der Code von PicoLibc wird unter der BSD-Lizenz verteilt. Es wird ein Build der Bibliothek für die Architekturen ARM (32-Bit), Aarch64, i386, RISC-V, x86_64, m68k, PowerPC, LatticMico32, LoongArch und OpenRisc unterstützt.
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:
- Die Unterstützung für die Architekturen LoongArch, OpenRISC und LatticMico32 wurde hinzugefügt.
- Eine Implementierung der Header-Datei uchar.h wurde vorgeschlagen, die im C11-Standard erschienen ist.
- Die Konfiguration nano-malloc-clear-freed wurde zur Bereinigung des Speichers hinzugefügt, der nach der Ausführung von free() oder realloc() freigegeben wurde.
- Es wurde die Möglichkeit zur Verwendung von clang multilib auf ARM64-Systemen implementiert.
- Der Wechsel zu neuen Werkzeugen picolibc-ci-tools für automatisiertes Building in Continuous Integration-Systemen wurde vollzogen.
- Für die MIPS-Architektur wurde die Unterstützung für die Semihosting-Technologie implementiert, die es dem Code, der in einer Debugger- oder Emulatorumgebung ausgeführt wird, ermöglicht, die Ein- und Ausgabemechanismen des Hosts zu nutzen.
- Für Xtensa-Prozessoren wurde die Unterstützung für picocrt und Semihost hinzugefügt.
- Einstellungen zur Verwendung mit CoreBoot wurden hinzugefügt.
- Die Funktion memset_explicit(), die im C23-Standard eingeführt wurde, wurde hinzugefügt.
- Die Umrechnungstabellen der Zeichencodes wurden auf die Spezifikation Unicode 15.1.0 aktualisiert.
- Die Funktionen asnprintf() und vasnprintf() wurden aus der newlib-Bibliothek übernommen.
- Die Unterstützung für den Emulator FVP (Fixed Virtual Platforms), der von ARM entwickelt wird, wurde hinzugefügt.
- Die Unterstützung für ältere Versionen des GCC-Compilers (vor 4.4) wurde hinzugefügt.
- Die Implementierungen von iconv und locale wurden durch kompaktere Varianten ersetzt, die einen gemeinsamen Code zur Arbeit mit Zeichencodierungen verwenden.
Quelle: opennet.ru
