Foi lançado o release da biblioteca padrão C PicoLibc 1.8.9, desenvolvida por Keith Packard (líder do projeto X.Org) para uso em dispositivos embarcados com espaço de armazenamento fixo e memória RAM limitados. Durante o desenvolvimento, parte do código foi emprestada da biblioteca newlib do projeto Cygwin e AVR Libc, que foi desenvolvida para microcontroladores Atmel AVR. O código PicoLibc é distribuído sob a licença BSD. A biblioteca é construída para arquiteturas ARM (32 bits), Aarch64, i386, RISC-V, x86_64, m68k, PowerPC, LatticMico32, LoongArch e OpenRisc.
Inicialmente, o projeto foi desenvolvido sob o nome "newlib-nano" e tinha como objetivo a reengenharia de algumas funções do Newlib que eram problemáticas para uso em dispositivos embarcados com pouca RAM. Por exemplo, em PicoLibc, as funções stdio foram substituídas por uma versão compacta da biblioteca avrlibc. O código também foi limpo de componentes não utilizados na construção para dispositivos embarcados que não eram fornecidos sob a licença BSD. Uma versão simplificada do código de inicialização (crt0) foi adicionada, e a implementação das chamadas foi mudada de 'struct _reent' para um mecanismo TLS (armazenamento local por thread). A construção utiliza a ferramenta Meson.
No novo lançamento:
- Foi adicionada a compatibilidade com as arquiteturas LoongArch, OpenRISC e LatticMico32.
- Foi proposta a implementação do arquivo de cabeçalho uchar.h, que apareceu no padrão C11.
- Foi adicionada a configuração nano-malloc-clear-freed para limpar a memória liberada após a execução de free() ou realloc().
- Foi implementada a possibilidade de usar clang multilib em sistemas ARM64.
- Foi feita a transição para a nova ferramenta picolibc-ci-tools para automação de construção em sistemas de integração contínua.
- Para a arquitetura MIPS, foi implementado o suporte para a tecnologia semihosting, permitindo que o código em execução em um depurador ou emulador utilize os mecanismos de entrada/saída do sistema host.
- Para processadores Xtensa, foi adicionado o suporte para picocrt e semihost.
- Adicionadas configurações para uso com CoreBoot.
- Foi adicionada a função memset_explicit(), que apareceu no padrão C23.
- As tabelas de conversão de registro de caracteres foram atualizadas para a especificação Unicode 15.1.0.
- As funções asnprintf() e vasnprintf() foram transferidas da biblioteca newlib.
- Foi adicionado suporte para o emulador FVP (Fixed Virtual Platforms), desenvolvido pela ARM.
- Foi adicionado suporte para versões antigas do compilador GCC (anterior à 4.4).
- As implementações de iconv e locale foram substituídas por variantes mais compactas, utilizando um código comum para lidar com codificações.
Fonte: opennet.ru
