Red Hat Training

A Red Hat training course is available for RHEL 8

Capítulo 6. Mudanças na cadeia de ferramentas desde a RHEL 7

The following sections list changes in toolchain since the release of the described components in Red Hat Enterprise Linux 7. See also Release notes for Red Hat Enterprise Linux 8.0.

6.1. Mudanças no GCC em RHEL 8

No Red Hat Enterprise Linux 8, o conjunto de ferramentas GCC é baseado na série de lançamentos GCC 8.2. Mudanças notáveis desde o Red Hat Enterprise Linux 7 incluem:

  • Numerosas otimizações gerais foram adicionadas, tais como análise de alias, melhorias de vetorizadores, dobramento de código idêntico, análise inter-processal, passe de otimização de fusão de lojas, e outras.
  • O endereço Sanitizer foi melhorado.
  • Foi adicionado o Saneante de vazamento para detecção de vazamentos de memória.
  • Foi adicionado o Higienizador de Comportamento Indefinido para detecção de comportamento indefinido.
  • As informações de depuração podem agora ser produzidas no formato DWARF5. Esta capacidade é experimental.
  • A ferramenta de análise de cobertura de código fonte GCOV foi ampliada com várias melhorias.
  • O suporte para a especificação OpenMP 4.5 foi adicionado. Além disso, as características de descarga da especificação OpenMP 4.0 são agora suportadas pelos compiladores C, C , e Fortran.
  • Novos avisos e diagnósticos melhorados foram acrescentados para a detecção estática de certos erros de programação prováveis.
  • Os locais de origem são agora rastreados como intervalos e não como pontos, o que permite diagnósticos muito mais ricos. O compilador agora oferece dicas "fix-it", sugerindo possíveis modificações de código. Um corretor ortográfico foi adicionado para oferecer nomes alternativos e facilitar a detecção de erros de digitação.

Segurança

O GCC foi ampliado para fornecer ferramentas para garantir o endurecimento adicional do código gerado.

Para mais detalhes, veja Seção 6.2, “Melhorias de segurança no GCC em RHEL 8”.

Arquitetura e suporte de processador

As melhorias na arquitetura e no suporte do processador incluem:

  • Várias novas opções específicas de arquitetura para a arquitetura Intel AVX-512, várias de suas microarquiteturas e Extensões de Proteção de Software Intel (SGX) foram adicionadas.
  • A geração de códigos pode agora visar as extensões LSE de arquitetura ARM de 64 bits, ARMv8.2-A Extensões de ponto flutuante de 16 bits (FPE) e ARMv8.2-A, ARMv8.3-A, e ARMv8.4-A versões de arquitetura.
  • O manuseio da opção -march=native nas arquiteturas ARM e ARM de 64 bits foi corrigido.
  • Foi adicionado suporte para os processadores z13 e z14 da arquitetura IBM Z.

Idiomas e normas

As mudanças notáveis relacionadas a idiomas e normas incluem:

  • O padrão padrão usado na compilação de código na linguagem C mudou para C17 com extensões GNU.
  • O padrão padrão usado na compilação de código na linguagem C mudou para C 14 com extensões GNU.
  • A biblioteca de tempo de execução C agora suporta as normas C 11 e C 14.
  • O compilador C agora implementa o padrão C 14 com muitas características novas, tais como modelos variáveis, agregados com inicializadores de dados não estáticos, o especificador estendido constexpr, funções de desalocação de tamanho, lambdas genéricas, matrizes de comprimento variável, separadores de dígitos e outros.
  • O suporte ao padrão de linguagem C11 foi melhorado: Atomics ISO C11, seleções genéricas e armazenamento local de fios estão agora disponíveis.
  • A nova extensão __auto_type GNU C fornece um subconjunto da funcionalidade da palavra-chave C 11 auto na linguagem C.
  • Os nomes dos tipos _FloatN e _FloatNx especificados pela norma ISO/IEC TS 18661-3:2015 são agora reconhecidos pelo front end C.
  • O padrão padrão usado na compilação de código na linguagem C mudou para C17 com extensões GNU. Isto tem o mesmo efeito que o uso da opção --std=gnu17. Anteriormente, o padrão era C89 com extensões GNU.
  • A GCC pode agora compilar experimentalmente o código usando o padrão de linguagem C 17 e certas características do padrão C 20.
  • Passar uma classe vazia como argumento agora não ocupa espaço nas arquiteturas Intel 64 e AMD64, como exigido pela plataforma ABI. Passar ou devolver uma classe com apenas uma cópia eliminada e mover construtores agora usa a mesma convenção de chamada que uma classe com uma cópia não trivial ou mover construtores.
  • O valor retornado pelo operador C 11 alignof foi corrigido para combinar com o operador C _Alignof e retornar alinhamento mínimo. Para encontrar o alinhamento preferido, use a extensão GNU __alignof__.
  • A versão principal da biblioteca libgfortran para o código do idioma Fortran foi alterada para 5.
  • O suporte para os idiomas Ada (GNAT), GCC Go e Objective C/C foi removido. Use o conjunto de ferramentas Go para o desenvolvimento do código Go.