Udgivelsen af standard C-biblioteket PicoLibc 1.8.6, udviklet af Keith Packard (leder af X.Org-projektet) til anvendelse på indlejrede enheder med begrænset plads til permanent lagring og RAM. Under udviklingen blev dele af koden lånt fra newlib-biblioteket fra Cygwin-projektet og AVR Libc, der var udviklet til Atmel AVR-mikrokontrollere. Koden til PicoLibc distribueres under BSD-licensen. Biblioteket understøtter kompilering til ARM (32-bit), Aarch64, i386, RISC-V, x86_64, m68k og PowerPC-arkitekturer.
Projektet blev oprindeligt udviklet under navnet "newlib-nano" og havde til formål at revidere nogle ressourcekrævende funktioner fra Newlib, som var problematiske at bruge på indlejrede enheder med lidt RAM. For eksempel er stdio-funktionerne i PicoLibc erstattet med en kompakt version fra avrlibc-biblioteket. Koden er også renset for ikke-brugte komponenter, der ikke leveres under BSD-licensen, til sammensætningen til indlejrede enheder. Der er tilføjet en forenklet version af initialiseringskoden (crt0), og implementeringen af opkald er overgået fra ‘struct _reent’ til mekanismen for TLS (trådlokalt lager). Byggeværktøjet Meson er blevet anvendt.
I den nye version:
- Ændringer fra Newlib 4.4.0 er overført, såsom understøttelse af typen "long double" på i386, RISC-V, Aarch64 og x86_64-arkitekturer, understøttelse af RISC-V Zfinx/Zdinx-udvidelser, mulighed for at bruge masker ved indsættelse af biblioteker, implementering af en port til Xtensa-processorer, og flytning af printf-håndteringsfunktioner til separate filer for at reducere størrelsen ved linkning.
- I picolibc.ld er symbolerne «__eh_*» blevet tilføjet til LLVM libunwind.
- Der er tilføjet testsupport til 32-bit SPARC-systemer.
- Understøttelse af målplatforme med atypiske flydende punkttyper er blevet sikret, som nu afspejles i 32-, 64-, 80- og 128-bit typer i picolibc-koden.
- Understøttelse af RISC-arkitekturen SuperH er blevet tilføjet.
- Stack tracing er blevet forbedret ved fejlfinding af undtagelseskode på RISC-V-systemer.
- Muligheden «-Dfast-bufio=true» er blevet tilføjet for at øge effektiviteten ved læsning og skrivning ved brug af bufio.
- Offentlige inline-funktioner er blevet renset for at dele semantikken fra gnu_inline.
- Flere af fenv-funktionerne er blevet oversat til at bruge inline-funktioner (gnu_inline) frem for almindelige for at øge ydeevnen.
- En alternativ implementering af ctype er blevet oprettet, hvor ctype-arrayet ikke anvendes, og der foretages direkte sammenligning af værdier.
Kilde: opennet.ru
