Após seis meses de desenvolvimento lançamento da biblioteca do sistema (glibc) , que atende completamente aos requisitos das normas ISO C11 e POSIX.1-2008. A nova versão inclui correções de 58 desenvolvedores.
Implementadas no Glibc 2.31 pode-se destacar:
- Adicionado o macro _ISOC2X_SOURCE para incluir capacidades definidas no rascunho do futuro padrão ISO . Essas capacidades também são incluídas ao usar o macro _GNU_SOURCE ou ao compilar no gcc com a flag "-std=gnu2x";
- Para as funções definidas no arquivo de cabeçalho "math.h", que arredondam seus resultados para um tipo menor, o arquivo "tgmath.h" propõe os macros de tipo genérico correspondentes, conforme exigido pelas especificações TS 18661-1:2014 e TS 18661-3:2015;
- Adicionada a função pthread_clockjoin_np(), que aguarda a conclusão da thread considerando o timeout (se o timeout ocorrer antes da conclusão, a função retornará um erro). Ao contrário de , no pthread_clockjoin_np() é permitido definir o tipo de timer para calcular o timeout — CLOCK_MONOTONIC (que considera o tempo passado pelo sistema em modo de espera) ou CLOCK_REALTIME;
- O resolutor DNS agora suporta a opção trust-ad em /etc/resolv.conf e a flag RES_TRUSTAD em _res.options, nas quais, se ativadas, os pedidos DNS incluirão a flag DNSSEC (dados autenticados). Nesse modo, a flag AD definida pelo servidor fica disponível para aplicativos que chamam funções como res_search(). Por padrão, se as opções apresentadas não forem ativadas, a glibc não marca a flag AD nas solicitações e a limpa automaticamente nas respostas, indicando a ausência de verificação DNSSEC;
- Para compilar bindings de chamadas de sistema para Glibc, não é mais necessário instalar os arquivos de cabeçalho do kernel Linux. A exceção é a arquitetura RISC-V de 64 bits;
- Eliminada , que permite contornar a proteção
ASLR em programas com flag setuid e determinar o layout de endereços em bibliotecas carregadas através da manipulação da variável de ambiente LD_PREFER_MAP_32BIT_EXEC.
Mudanças que quebram compatibilidade:
- Em totalorder(), totalordermag() e funções similares para outros tipos de ponto flutuante agora aceitam como argumento ponteiros para evitar avisos de conversão de valores em estado , conforme recomendado pela TS 18661-1, proposta para o futuro padrão C2X.
Os arquivos executáveis existentes, nos quais argumentos de ponto flutuante são passados diretamente, continuarão funcionando sem alteração; - A função obsoleta stime, há muito anunciada, agora não está disponível para arquivos binários vinculados ao glibc, e sua definição foi removida de time.h. Para definir o horário do sistema, deve-se usar a função clock_settime. No futuro, planeja-se remover também a função ftime, que foi marcada como obsoleta, assim como o arquivo de cabeçalho sys/timeb.h (em vez de ftime, deve-se usar gettimeofday ou clock_gettime);
- A função gettimeofday agora não transmite informações sobre o fuso horário do sistema (esse recurso era relevante na época do 4.2-BSD e foi anunciado como obsoleto há muitos anos). No argumento ‘tzp’, deve-se passar um ponteiro nulo, e para obter informações sobre o fuso horário em relação ao horário atual, deve-se usar a função localtime(). Ao chamar gettimeofday com um argumento ‘tzp’ não nulo, os campos tz_minuteswest e tz_dsttime na estrutura timezone retornarão vazios. A própria função gettimeofday é considerada obsoleta no POSIX (em vez de gettimeofday, recomenda-se usar clock_gettime), mas não está planejada para ser removida do glibc;
- No settimeofday, o suporte para a transmissão simultânea de parâmetros para definir o horário e a correção do deslocamento de horário foi interrompido. Ao chamar settimeofday, um dos argumentos (horário ou deslocamento) agora deve obrigatoriamente ser definido como nulo, caso contrário, a chamada da função resultará em erro EINVAL. Assim como gettimeofday, a função settimeofday é considerada obsoleta no POSIX e recomenda-se usar a função clock_settime ou a família de funções adjtime;
- O suporte para a arquitetura SPARC ISA v7 foi interrompido (o suporte ao v8 é mantido, mas somente para processadores que suportam instruções CAS, como os processadores LEON, mas não os processadores SuperSPARC).
- Em caso de falha na vinculação em modo ““, onde o vinculador não procura os símbolos da função até a primeira chamada dessa função, a função dlopen agora força o encerramento do processo (anteriormente, em caso de falha, retornava NULL);
- Para o ABI MIPS hard-float, agora é usado um stack executável, a menos que durante a construção seja explicitamente definido um limite para o uso do núcleo Linux 4.8+ através do parâmetro “—enable-kernel=4.8.0” (com núcleos até 4.8, falhas são observadas para algumas configurações MIPS);
- As ligações sobre chamadas de sistema relacionadas à manipulação de tempo foram adaptadas para usar a chamada de sistema time64, quando disponível (em sistemas de 32 bits, a glibc tenta primeiro usar as novas chamadas de sistema que manipulam o tipo de tempo de 64 bits e, se não houver, recua para as antigas chamadas de 32 bits).
Fonte: opennet.ru
