8.10. Compiladores e ferramentas de desenvolvimento
Objetos compartilhados não deslocados e não inicializados não mais resultam em falhas se o dlopen
falhar
Anteriormente, se a chamada dlopen
falhou, o linker dinâmico glibc
não removia objetos compartilhados com a marca NODELETE
antes de relatar o erro. Conseqüentemente, os objetos compartilhados não localizados e não inicializados permaneceram na imagem do processo, resultando eventualmente em falhas de afirmação ou travamentos. Com esta atualização, o carregador dinâmico usa um estado NODELETE
pendente para remover objetos compartilhados em caso de falha de dlopen
, antes de marcá-los como NODELETE
permanentemente. Como resultado, o processo não deixa nenhum objeto não deslocado para trás. Além disso, falhas de amarração preguiçosas enquanto os construtores e destruidores ELF executam agora terminam o processo.
As funções avançadas SIMD na arquitetura ARM de 64 bits não mais se confundem quando resolvidas preguiçosamente
Anteriormente, o novo Padrão de Chamada de Procedimento Vetorial (PCS) para SIMD Avançado não salvavava e restaurava corretamente certos registros salvos de calle quando resolvia preguiçosamente as funções do SIMD Avançado. Como conseqüência, os binários poderiam se comportar mal em tempo de execução. Com esta atualização, as funções vetoriais do SIMD Avançado e SVE na tabela de símbolos são marcadas com .variant_pcs
e, como resultado, o linker dinâmico ligará tais funções mais cedo.
O roteiro do sudo
wrapper agora analisa as opções
Anteriormente, o script /opt/redhat/devtoolset*/root/usr/bin/sudo
wrapper não analisava corretamente as opções do sudo
. Como conseqüência, algumas opções de sudo
(por exemplo, sudo -i
) não podiam ser executadas. Com esta atualização, mais opções sudo
são corretamente analisadas e, como resultado, o script sudo
wrapper funciona mais como /usr/bin/sudo
.
O alinhamento das variáveis TLS na glibc
foi fixado
Anteriormente, os dados do armazenamento local de fios alinhados (TLS) podiam, sob certas condições, se tornar instanciados sem o alinhamento esperado. Com esta atualização, o POSIX Thread Library libpthread
foi melhorado para assegurar o alinhamento correto sob quaisquer condições. Como resultado, os dados TLS alinhados são agora instanciados corretamente para todas as roscas com o alinhamento correto.
As chamadas pututxline
repetidas após erro EINTR
ou EAGAIN
não corrompem mais o arquivo utmp
Quando a função pututxline
tenta adquirir uma trava e não consegue a tempo, a função retorna com código de erro EINTR
ou EAGAIN
. Anteriormente nesta situação, se a pututxline
fosse chamada novamente imediatamente e conseguisse obter a trava, ela não usava um slot correspondente já alocado no arquivo utmp
, mas acrescentava outra entrada em seu lugar. Como conseqüência, estas entradas não utilizadas aumentaram substancialmente o tamanho do arquivo de utmp
. Esta atualização corrige o problema, e as entradas são agora adicionadas corretamente ao arquivo utmp
.
mtrace
não fica mais pendurado quando ocorrem falhas internas
Anteriormente, um defeito na implementação da ferramenta mtrace
podia fazer com que o traçado da memória ficasse pendurado. Para resolver este problema, a implementação da ferramenta mtrace
memory tracing foi tornada mais robusta para evitar o pendurar mesmo em face de falhas internas. Como resultado, os usuários podem agora chamar o mtrace
e ele não fica mais pendurado, completando em tempo delimitado.
A função garfo
evita certos bloqueios relacionados ao uso de pthread_atfork
Anteriormente, se um programa registrava um manipulador de trabalho
e invocava o garfo
de um manipulador de sinais assíncronos, um defeito na fechadura interna dependente da implementação poderia causar o congelamento do programa. Com esta atualização, a implementação do garfo
e de seus manipuladores de atfork
é ajustada para evitar o bloqueio em programas de rosca única.
strstr
não retorna mais correspondências incorretas para um padrão truncado
Em certas plataformas IBM Z (z15, anteriormente conhecidas como arch13), a função strstr
não atualizou corretamente um registro de CPU ao lidar com padrões de busca que cruzam os limites de uma página. Como conseqüência, strstr
retornou correspondências incorretas. Esta atualização corrige o problema e, como resultado, strstr
funciona como esperado no cenário mencionado.
C.UTF-8 locale fonte ellipsis expressões em glibc
são fixas
Anteriormente, um defeito no local de origem C.UTF-8 resultava em todos os pontos de código Unicode acima de U 10000 sem pesos de colação. Como conseqüência, todos os pontos de código acima de U.10000 não foram agrupados como esperado. O locale fonte C.UTF-8 foi corrigido, e o locale binário recentemente compilado agora tem pesos de agrupamento para todos os pontos de código Unicode. O locale C.UTF-8 compilado é 5,3MiB maior, como resultado desta correção.
glibc
não falha mais quando a getpwent()
é chamada sem chamar setpwent()
Se seu arquivo /etc/nsswitch.conf
apontar para o fornecedor da senha Berkeley DB(db
), você poderia solicitar dados usando a função getpwent()
sem primeiro chamar setpwent(
) apenas uma vez. Quando você chamou a função endpwent(
), outras chamadas para getpwent()
sem a primeira chamada setpwent(
) causaram a falha da glibc
porque endpwent()
não pôde redefinir os internos para permitir uma nova consulta. Esta atualização corrige o problema. Como resultado, após terminar uma consulta com endpwent(
), novas chamadas para getpwent()
iniciarão uma nova consulta mesmo que você não chame setpwent()
.
ltrace
pode agora rastrear chamadas de sistema em binários endurecidos
Anteriormente, a ltrace
não produzia nenhum resultado em certos binários endurecidos, tais como binários de sistema, nas arquiteturas AMD e Intel 64-bit. Com esta atualização, ltrace
pode agora rastrear chamadas de sistema em binários endurecidos.
(BZ#1655368)
A falha da Intel no JCC não causa mais perda significativa de desempenho no compilador GCC
Certas CPUs da Intel são afetadas pelo bug do Jump Conditional Code (JCC), fazendo com que as instruções da máquina sejam executadas incorretamente. Conseqüentemente, as CPUs afetadas podem não executar os programas corretamente. A correção completa envolve a atualização do microcódigo das CPUs vulneráveis, o que pode causar uma degradação do desempenho. Esta atualização permite uma solução no assembler que ajuda a reduzir a perda de desempenho. A alternativa é not ativado por padrão.
Para aplicar o workaround, recompile um programa usando GCC com a opção -Wa,-mbranches-within-32B-b-boundaries
command line. Um programa recompilado com esta opção de linha de comando não será afetado pela falha do JCC, mas a atualização do microcódigo ainda é necessária para proteger totalmente um sistema.
Note que a aplicação do workaround aumentará o tamanho do programa e ainda pode causar uma ligeira diminuição do desempenho, embora deva ser menor do que teria sido sem a recompilação.
não retarda mais quando utiliza construçõesparalelas
Anteriormente, enquanto funcionavam em construções paralelas, os
subprocessos podiam tornar-se temporariamente insensíveis quando esperavam sua vez de funcionar. Como conseqüência, as construções com altos valores -j
abrandaram ou funcionaram com valores -j
mais baixos efetivos. Com esta atualização, a lógica de controle de trabalho da marca
é agora sem bloqueio. Como resultado, as construções com valores altos de -j
rodam na velocidade -j
total.
A ferramenta ltrace
agora informa corretamente as chamadas de função
Devido a melhorias no endurecimento binário aplicadas a todos os componentes RHEL, a ferramenta ltrace
anteriormente não conseguia detectar chamadas de função em arquivos binários provenientes de componentes RHEL. Como conseqüência, a saída do ltrace
estava vazia porque não relatou nenhuma chamada detectada quando usada em tais arquivos binários. Esta atualização corrige a forma como o ltrace ltrace
lida com as chamadas de função, o que evita a ocorrência do problema descrito.
(BZ#1618748)