Após seis meses de desenvolvimento, foi lançado o release da biblioteca de sistema GNU C Library (glibc) 2.36, que está em total conformidade com os requisitos dos padrões ISO C11 e POSIX.1-2017. A nova versão inclui correções de 59 desenvolvedores.
Entre as melhorias implementadas no Glibc 2.36, destaca-se:
- Adicionada a compatibilidade com o novo formato de realocações relativas DT_RELR (relocation relative), que permite reduzir o tamanho das realocações relativas em objetos compartilhados e arquivos executáveis compilados no modo PIE (executáveis independentes de posição). Para usar o campo DT_RELR em arquivos ELF, é necessária a opção '-z pack-relative-relocs' no vinculador, que foi introduzida na versão do conjunto binutils 2.38.
- Para a plataforma Linux, foram implementadas as funções pidfd_open, pidfd_getfd e pidfd_send_signal, que fornecem acesso à funcionalidade pidfd, ajudando a lidar com situações de reutilização de PID para uma identificação mais precisa de processos que acessam arquivos monitorados (o pidfd está vinculado a um processo específico e não muda, enquanto o PID pode ser associado a outro processo após a conclusão do processo atual associado a esse PID).
- Para a plataforma Linux, foi adicionada a função process_madvise(), que permite que um processo execute a chamada de sistema madvise() em nome de outro processo, identificando o processo alvo através de pidfd. Através do madvise(), é possível informar ao núcleo sobre as características do trabalho com a memória para otimizar o gerenciamento de memória do processo; por exemplo, com base nas informações passadas, o núcleo pode iniciar a liberação de memória livre adicional. A chamada madvise() por outro processo pode ser necessária em situações em que as informações necessárias para otimização não são conhecidas pelo processo atual e são coordenadas por um processo gerenciador em segundo plano, que pode iniciar a remoção de memória não utilizada de processos.
- Para a plataforma Linux, foi adicionada a função process_mrelease(), que permite acelerar a liberação de memória de processos que estão finalizando. Em condições normais, a liberação de recursos e a conclusão de processos não ocorrem instantaneamente e, por várias razões, podem ser atrasadas, o que prejudica o funcionamento de sistemas de resposta rápida a falta de memória, como o oomd (fornecido pelo systemd). Com a chamada para process_mrelease, tais sistemas podem iniciar de forma mais previsível a devolução de memória de processos terminados forçosamente.
- A implementação embutida do resolvedor DNS agora suporta a opção "no-aaaa", que permite desabilitar o envio de consultas DNS para registros AAAA (resolução de endereço IPv6 a partir de nomes de host) durante a resolução de problemas, incluindo ao executar funções NSS, como getaddrinfo(). A opção não afeta o processamento de vinculações a endereços IPv6 definidas em /etc/hosts e chamadas para getaddrinfo() com a flag AI_PASSIVE.
- Para a plataforma Linux, foram adicionadas as funções fsopen, fsmount, move_mount, fsconfig, fspick, open_tree e mount_setattr, que oferecem acesso a uma nova API do núcleo para gerenciar a montagem de sistemas de arquivos levando em conta espaços de nomes de pontos de montagem (mount namespaces). As funções propostas permitem tratar separadamente diferentes etapas da montagem (processar o superbloco, obter informações sobre o FS, montar, anexar ao ponto de montagem), que anteriormente eram realizadas por meio de uma única função mount(). Funções separadas permitem realizar cenários de montagem mais complexos e executar operações como reconfiguração do superbloco, ativação de opções, alteração do ponto de montagem e transferência para outro espaço de nomes. Além disso, o processamento separado permite identificar com precisão as razões para a saída de códigos de erro e definir várias fontes para sistemas de arquivos em camadas, como overlayfs.
- No localedef, foi implementado o suporte para o processamento de arquivos com definições de locais fornecidos na codificação UTF-8 em vez de ASCII.
- Funções para conversão de codificações multibyte mbrtoc8 e c8rtomb foram adicionadas, em conformidade com as especificações ISO C2X N2653 e C++20 P0482R6.
- Foi adicionada a suporte para o tipo char8_t, definido no rascunho do padrão ISO C2X N2653.
- Foram adicionadas funções arc4random, arc4random_buf e arc4random_uniform, que fornecem bindings sobre a chamada do sistema getrandom e a interface /dev/urandom, retornando números pseudorrandômicos de alta qualidade.
- Na plataforma Linux, foi implementado o suporte para a arquitetura do conjunto de instruções LoongArch, usada nos processadores Loongson 3 5000, que implementa um novo RISC ISA semelhante ao MIPS e RISC-V. Atualmente, somente o suporte à variante de 64 bits LoongArch (LA64) está disponível. É necessário ter pelo menos as versões binutils 2.38, GCC 12 e o kernel Linux 5.19.
- O mecanismo prelink foi declarado obsoleto e será removido na próxima versão, assim como as variáveis de ambiente relacionadas LD_TRACE_PRELINKING e LD_USE_LOAD_BIAS, além das capacidades do link editor.
- O código para verificar a versão do kernel Linux e tratar a variável de ambiente LD_ASSUME_KERNEL foi removido. A versão mínima suportada do kernel ao compilar o Glibc é definida através do campo ELF NT_GNU_ABI_TAG.
- Na plataforma Linux, o suporte à variável de ambiente LD_LIBRARY_VERSION foi descontinuado.
Fonte: opennet.ru
