/Qspectre-load-cf

Especifica como o compilador gera instruções de serialização para cada instrução de fluxo de controle que contém um carregamento. Essa opção executa um subconjunto das mitigações feitas pela opção /Qspectre-load.

Sintaxe

/Qspectre-load-cf

Comentários

/Qspectre-load-cf faz com que o compilador detecte as instruções de fluxo de controle JMP, RET e CALL que são carregadas da memória, e insira instruções de serialização após o carregamento. Sempre que possível, essas instruções são divididas em um carregamento e uma transferência de fluxo de controle. O carregamento é seguido por um LFENCE para garantir que o carregamento esteja protegido. Há casos em que o compilador não consegue dividir instruções, como a instrução JMP, portanto, ele usa uma técnica de mitigação alternativa. Por exemplo, o compilador atenua jmp [rax] adicionando instruções para carregar o destino de forma não destrutiva antes de inserir um LFENCE, conforme mostrado aqui:

    xor rbx, [rax]
    xor rbx, [rax]  ; force a load of [rax]
    lfence          ; followed by an LFENCE
    jmp [rax]

Como /Qspectre-load-cf interrompe a especulação de todas as cargas nas instruções de fluxo de controle, o impacto no desempenho é alto. A mitigação não é apropriada em todos os lugares. Se houver blocos críticos de desempenho de código que não exijam proteção, você poderá desabilitar essas mitigações usando __declspec(spectre(nomitigation)).

A opção /Qspectre-load-cf está desativada por padrão e dá suporte a todos os níveis de otimização.

A opção /Qspectre-load-cf está disponível no Visual Studio 2019 versão 16.5 e posteriores. Essa opção só está disponível em compiladores que têm como destino os processadores x86 e x64. Ela não está disponível em compiladores que tem processadores ARM como destino.

Para definir esta opção do compilador no ambiente de desenvolvimento do Visual Studio

  1. Abra a caixa de diálogo Páginas de Propriedades do projeto. Para obter detalhes, confira Definir as propriedades de build e do compilador do C++ no Visual Studio.

  2. Selecione a página de propriedades Propriedades da Configuração>C/C++>Geração de Código.

  3. Selecione um novo valor para a propriedade Mitigação do Spectre. Escolha OK para aplicar a alteração.

Para definir essa opção do compilador via programação

Confira também

/Qspectre
/Qspectre-jmp
/Qspectre-load
Opções /Q (Operações de baixo nível)
Opções do compilador MSVC
Sintaxe de linha de comando do compilador MSVC