Keith Packardin (X.Org-projektin johtaja) kehittämä standardi C-kirjasto PicoLibc 1.8.9 on julkaistu sulautetuissa laitteissa, joissa on rajoitettu tallennustila ja RAM-muisti. Kehityksen aikana osa koodista lainattiin Newlib-kirjastosta Cygwin-projektista ja AVR Libc:stä, joka on kehitetty Atmelin AVR-mikrokontrollereille. PicoLibc-koodia jaetaan BSD-lisenssillä. Kirjastokokoonpanoa tuetaan ARM (32-bittinen), Aarch64, i386, RISC-V, x86_64, m68k, PowerPC, LatticMico32, LoongArch ja OpenRisc arkkitehtuureille.
Aluksi projekti kehitettiin nimellä "newlib-nano", ja sen tarkoituksena oli muokata joitain Newlibin resurssiintensiivisiä toimintoja, joita oli ongelmallista käyttää sulautetuissa laitteissa, joissa oli vähän RAM-muistia. Esimerkiksi PicoLibcissä stdio-funktiot korvataan kompaktilla versiolla avrlibc-kirjastosta. Koodi poistetaan myös komponenteista, joita ei käytetä sulautetussa laitekokoonpanossa ja joita ei toimiteta BSD-lisenssin alaisina. Alustuskoodin (crt0) yksinkertaistettu versio on lisätty ja kutsujen toteutus on siirretty 'struct _reent':stä TLS (thread-local storage) -mekanismiin. Kokoonpanossa käytetään Meson-työkalusarjaa.
Uudessa julkaisussa:
- Lisätty tuki LoongArch-, OpenRISC- ja LatticMico32-arkkitehtuureille.
- Ehdotetaan C11-standardissa käyttöönotetun uchar.h-otsikkotiedoston toteutusta.
- Lisätty nano-malloc-clear-freed-asetus tyhjentääksesi free()- tai realloc()-kohdan jälkeen vapautetun muistin.
- Otettu käyttöön mahdollisuus käyttää clang multilibiä ARM64-järjestelmissä.
- Siirtyminen uuteen pikolibc-ci-tools-työkalupakettiin jatkuvan integroinnin järjestelmissä automaattista kokoonpanoa varten on saatu päätökseen.
- MIPS-arkkitehtuuri tukee "semihosting"-tekniikkaa, joka sallii virheenkorjaus- tai emulaattoriympäristössä ajettavan koodin käyttää isäntäjärjestelmän I/O-mekanismeja.
- Lisätty picocrt- ja semihost-tuki Xtensan prosessoreille.
- Lisätty asetukset käytettäväksi CoreBootin kanssa.
- Lisätty memset_explicit()-funktio, joka on otettu käyttöön C23-standardissa.
- Tapausmuunnostaulukot on päivitetty Unicode-spesifikaatioon 15.1.0.
- Funktiot asnprintf() ja vasnprintf() on siirretty newlib-kirjastosta.
- Lisätty tuki ARM:n kehittämälle FVP (Fixed Virtual Platforms) -emulaattorille.
- Lisätty tuki GCC-kääntäjän vanhemmille versioille (vanhemmat kuin 4.4).
- Iconv- ja locale-toteutukset on korvattu kompaktemmilla versioilla, jotka käyttävät yhteistä koodia koodausten kanssa työskentelemiseen.
Lähde: opennet.ru
