/Qspectre-load-cf
Especifica la generación del compilador de instrucciones de serialización para cada instrucción de flujo de control que contiene una carga. Esta opción realiza un subconjunto de las mitigaciones realizadas por la opción /Qspectre-load.
Sintaxis
/Qspectre-load-cf
Comentarios
/Qspectre-load-cf hace que el compilador detecte instrucciones de flujo de control ,JMP
, RET
y CALL
que se cargan desde la memoria, y que inserte instrucciones de serialización después de la carga. Siempre que sea posible, estas instrucciones se dividen en una carga y una transferencia de flujo de control. La carga va seguida de LFENCE
para asegurarse de que la carga está protegida. Hay casos en los que el compilador no puede dividir instrucciones, como la instrucción JMP
, por lo que usa una técnica de mitigación alternativa. Por ejemplo, el compilador mitiga jmp [rax]
agregando instrucciones para cargar el destino de forma no destructiva antes de insertar un LFENCE, como se muestra aquí:
xor rbx, [rax]
xor rbx, [rax] ; force a load of [rax]
lfence ; followed by an LFENCE
jmp [rax]
Dado que /Qspectre-load-cf detiene la especulación de todas las cargas en instrucciones de flujo de control, el impacto en el rendimiento es alto. La mitigación no es conveniente siempre. Si hay bloques de código críticos para el rendimiento que no requieren protección, puede deshabilitar estas mitigaciones con __declspec(spectre(nomitigation))
.
La opción /Qspectre-load-cf está desactivada de forma predeterminada y admite todos los niveles de optimización.
La opción /Qspectre-load-cf está disponible en Visual Studio 2019, versión 16.5 y posteriores. Esta opción solo está disponible en los compiladores que tienen como destino los procesadores x86 y x64. No está disponible en los compiladores que tienen como destino los procesadores ARM.
Para establecer esta opción del compilador en el entorno de desarrollo de Visual Studio
Abra el cuadro de diálogo Páginas de propiedades del proyecto. Para más información, vea Establecimiento del compilador de C++ y de propiedades de compilación en Visual Studio.
Seleccione la página de propiedades Propiedades de configuración>C/C++>Generación de código.
Seleccione un nuevo valor para la propiedad Mitigación de Spectre. Seleccione Aceptar para aplicar el cambio.
Para establecer esta opción del compilador mediante programación
- Vea AdditionalOptions.
Consulte también
/Qspectre
/Qspectre-jmp
/Qspectre-load
Opciones de /Q (operaciones de bajo nivel)
Opciones del compilador de MSVC
Sintaxis de línea de comandos del compilador de MSVC