/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
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.
Selecione a página de propriedades Propriedades da Configuração>C/C++>Geração de Código.
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
- Consulte AdditionalOptions.
Confira também
/Qspectre
/Qspectre-jmp
/Qspectre-load
Opções /Q (operações de baixo nível)
Opções do compilador MSVC
Sintaxe da linha de comando do compilador MSVC