Informações em inglês
 
Processors
Processador Intel® Pentium®
Instrução inválido errata Visão geral

Instrução inválido errata home Fornecedor de software declarações Como falar conosco
Backgrounder de software
Atualizado em nov. 20 1997


Descrição técnica errata atualizada nov. 20 1997

Problema: o CMPXCHG8B 8 instrução compara um valor byte em EDX e EAX com um 8 valor byte na memória (o destino operando). A única destino válida operandos para essa instrução são memória operandos. Se o destino operando é um registrar o processador deve gerar uma exceção opcode inválido, a execução das instruções CMPXCHG8B deve ser interrompida e o processador deve executar o opcode inválido exceção handler. Esta errata ocorre se o prefixo TRAVAR se da instrução CMPXCHG8B com um (registro inválido) destino operando. Neste caso, o processador pode não iniciar a execução de inválido opcode exceção handler porque os ônibus bloqueado. Isso resulta em travamento do sistema.

Implicação: Se um (registro inválido) destino operando é usado com o BLOQUEIO CMPXCHG8B instrução e o prefixo, o sistema pode congelar. Não há dados da memória está corrompido e o usuário pode realizar uma reinicialização do sistema para voltar à operação normal. Observe que o código inválido seqüência específica necessárias para esta errata para ocorrer não é normalmente gerados no curso de programação nem é um desses disponível comercialmente seqüência gerados pelo software.

Esta errata aplica-se somente aos processadores Pentium®, os processadores Pentium com tecnologia MMX™, Pentium processadores OverDrive® processadores OverDrive e Pentium com a tecnologia MMX. Processadores Pentium Pro, Pentium II processadores e i486™ e anteriores não são afetados.

Para contornar o problema: Há duas soluções temporárias para esta errata para sistemas operacionais de modo protegido. Ambas as soluções temporárias gerar uma página anomalia quando o opcode inválido excepção ocorre. Em ambos os casos, a página fault será atendido antes do inválido e evitar assim opcode exceção do travar condição acontecimento. Os detalhes da implementação é diferente dependendo do sistema operacional. Use um dos seguintes métodos:

  1. A primeira parte desta solução temporária define os primeiros 7 entradas (0 a 6) da interrupção descritor tabela (IDT) em não-gravável página. Quando o opcode inválido exceção (exceção 6) ocorre devido à CMPXCHG8B bloqueado instrução com um registro inválido (e apenas depois destino), o processador se gerar uma página fault se ela não tiver acesso de gravação para a página contendo entrada 6 da IDT. A segunda parte desta solução temporária modifica a página fault handler de identificar e corretamente expedir o opcode inválido exceções que já estão roteadas através do página fault handler.

    Parte I, IDT acesso à página
    1. Marcar a página contendo os primeiros 7 entradas (0 a 6) do IDT conforme lido só ao estabelecer bit 1 da página entrada da tabela a zero. Também definir CR0.WP (bit 16) para 1. Agora quando o opcode inválido excepção ocorre no bloqueado CMPXCHG8B instrução, o processador se disparar uma página tolerância a uma vez que não têm acesso de gravação para a página contendo entrada 6 da IDT. Esta página fault impede que os ônibus travar condição e dá ao sistema operacional controle completo para processar os inválido operando exceção, conforme apropriado. Observe que exceção 6 é o opcode inválido. assim, com exceção este esquema um SO tem controle completo de qualquer programa executando uma instrução CMPXCHG8B inválido.
    2. Opcional: se há atualizações para as entradas 7-255 do IDT ocorrer durante o curso de falhas de página operação normal, deve evitar grava a estes IDT entradas. Falhas de página Esses podem ser evitados, alinhando o IDT através de uma página 4kb tal que o primeiro boundary sete entradas (0 a 6) do IDT estão na primeira página só leitura e o restante entradas estão em um leitura/gravação página.
    Parte II, página Fault Handler modificações
  • Modificar a página fault handler para calcular o qual exceção causou a página anomalia utilizando o fault endereço em CR2. Se o código de erro na pilha indica a exceção ocorreu de anel 0 e se o endereço corresponde à inválido opcode exceção e, a seguir, pop o código de erro da e vá para a pilha inválido opcode exceção handler. Caso contrário continuar com a página normal fault handler.
    OU
    1. Esta solução temporária tem duas partes. Primeiro, a interrupção descritor tabela (IDT) seja alinhado tais que qualquer opcode inválido exceção fará uma página fault (devido à página não estar presente). Segundo, a página fault handler é modificado para reconhecer e corretamente expedir o opcode inválido exceção e de outras exceções que já estão roteadas através do página fault handler.
    Parte I, IDT orientação:
      1. Alinhe a interrupção descritor tabela (IDT)de modo que ele distribui um 4kb a colocação da página boundary primeira entrada de 56 bytes da final do primeiro 4kb página. O que coloca dos primeiros 7 entradas (0 a 6) na primeira página 4KB, e o restante as entradas na segunda página.
      2. A página contendo os primeiros 7 entradas do IDT não deve ter um mapeamento no SO página tabelas. Isso fará qualquer uma das exceções 0-6 para gerar uma página não presente fault. Uma página fault impede que os ônibus travar condição e dá o controle completo SO para processar estas excepções, conforme apropriado. Observe que exceção 6 é o opcode inválido. assim, com exceção este esquema um SO tem controle completo de qualquer programa executando uma instrução CMPXCHG8B inválido.
    Parte II, página Fault Handler modificações:
      1. Reconhecer acessa a primeira página do IDT ao testar o fault endereço em CR2. Página não está presente falhas do outro endereços podem ser processado normalmente.
      2. Para página não presente falhas na primeira página do IDT, o sistema operacional precisa reconhecer e a excepção que causou dispatch a página não presente fault. Antes de continuar, teste a tolerância a endereço em CR2 para determinar se está na faixa de endereço correspondente a exceções 0-6.
      3. Calcular o que causou a página exceção não presente a tolerância a falhas de endereço em CR2.
      4. Dependendo do sistema operacional, determinados nível de privilégio controlos podem ser necessárias, juntamente com ajustamentos para a interrupção de pilha.
      5. Ir para o manipulador de um sistema adequado normal exceção.

    Ambos os provisórias e só deve ser implementados sobre os processadores Intel que voltar família=5 através da instrução CPUID.

    75/90/100/120/133/150/166 /133/200 MHz processadores Pentium® e 120/133/150/166/200/233 MHz processadores Pentium com tecnologia MMX™

    60 MHz e 66 MHz processadores Pentium®

    Não.

    B1

    C1

    D1

    ERRATA

    52

    X

    X

    X

    Invalid operando com instrução CMPXCHG8B bloqueado

    63/83/120/125/133/150/166 MHz Pentium® OverDrive® processadores e 125/150/166/180/200 MHz Pentium OverDrive processadores com tecnologia MMX™

    Não.

    B1

    B2

    C0

    Ta0

    Ac0

    Oxa3

    Oxb1

    ERRATA

    70

    X

    X

    X

    X

    X

    X

    X

    Invalid operando com instrução CMPXCHG8B bloqueado

    Isto se aplica a:

    Processador Intel® Pentium®
    Processador Intel® Pentium® com tecnologia MMX ®
    Processadores OverDrive®

     

    ID da solução: CS-013149
    Data da criação: 12-jul-2004
    Última modificação: 16-nov-2009
    Para o começo da página