stringtranslate.com

registro de depuración x86

En la arquitectura x86 , un registro de depuración es un registro utilizado por un procesador para la depuración de programas . Hay seis registros de depuración, denominados DR0 ... DR7 , con DR4 y DR5 como sinónimos obsoletos de DR6 y DR7. Los registros de depuración permiten a los programadores habilitar de forma selectiva varias condiciones de depuración asociadas con un conjunto de cuatro direcciones de depuración. Dos de estos registros se utilizan para controlar las características de depuración. Se accede a estos registros mediante variantes de la instrucción MOV. Un registro de depuración puede ser el operando de origen o el operando de destino. Los registros de depuración son recursos privilegiados; las instrucciones MOV que acceden a ellos solo se pueden ejecutar en el nivel de privilegio cero. Un intento de leer o escribir los registros de depuración cuando se ejecuta en cualquier otro nivel de privilegio provoca un fallo de protección general .

DR0 a DR3

Cada uno de estos registros contiene la dirección lineal asociada con una de las cuatro condiciones de punto de interrupción. Cada condición de punto de interrupción se define además mediante bits en DR7.

Los registros de direcciones de depuración son efectivos independientemente de si la paginación está habilitada o no . Las direcciones en estos registros son direcciones lineales. Si la paginación está habilitada, las direcciones lineales se traducen en direcciones físicas mediante el mecanismo de paginación del procesador . Si la paginación no está habilitada, estas direcciones lineales son las mismas que las direcciones físicas.

Tenga en cuenta que cuando la paginación está habilitada, las distintas tareas pueden tener diferentes asignaciones de direcciones físicas a lineales. Cuando este es el caso, una dirección en un registro de dirección de depuración puede ser relevante para una tarea pero no para otra. Por este motivo, el x86 tiene bits de habilitación globales y locales en DR7. Estos bits indican si una dirección de depuración determinada tiene relevancia global (todas las tareas) o local (solo la tarea actual).

DR6 - Estado de depuración

El registro de estado de depuración permite al depurador determinar qué condiciones de depuración se han producido. Cuando el procesador detecta una excepción de depuración habilitada, activará los bits correspondientes de este registro antes de entrar en el controlador de excepciones de depuración.

  1. ^ abcd B0-B3 se establecen para cada condición de punto de interrupción que se cumplió en el momento en que se generó una excepción de depuración.

    En algunas implementaciones, B0-B3 se pueden configurar para puntos de interrupción que coinciden pero no están habilitados [1] ; por lo tanto, el controlador de depuración solo debe verificar los bits que corresponden a los puntos de interrupción habilitados.

    Además, depende de la implementación si el hardware borrará B0-B3 en caso de condiciones de punto de interrupción que no coincidan; por lo tanto, se recomienda que los controladores de depuración borren manualmente estos bits antes de regresar a la tarea interrumpida. [2]

  2. ^ Cuando se habilita la trampa de bloqueo de bus mediante el bit 2 de DEBUGCTL( MSR 1D9h ), cualquier instrucción que provoque un bloqueo de bus (principalmente instrucciones que usan el LOCKprefijo para realizar operaciones atómicas de memoria que se extienden a lo largo de los límites de la línea de caché u operan en memoria no almacenable en caché) borrará el bit 11 de DR6 y provocará una excepción #DB de tipo trampa. Los procesadores no configuran ni borran este bit de otra manera: se recomienda que los controladores de depuración configuren este bit en 1 antes de regresar a la tarea interrumpida.
  3. ^ El bit BD indica que la siguiente instrucción en el flujo de instrucciones es una que accede a un registro de depuración.

    En algunas implementaciones, este bit puede configurarse incluso si DR7.GD no está configurado. [1]

  4. ^ abc Los bits 13, 14 y 15 de DR6 nunca se borran por hardware; por lo tanto, se recomienda que los controladores de depuración borren manualmente estos bits antes de regresar a la tarea interrumpida.
  5. ^ El bit 13 de DR6 está reservado en todos los procesadores Cyrix .
  6. ^ Si se detecta una condición de excepción de depuración dentro de una transacción, el procesador anulará la transacción. Si está habilitada la depuración avanzada de transacciones RTM, generará la excepción de depuración como una excepción de tipo falla en la XBEGINinstrucción que inició la transacción; de lo contrario, la transacción se anula sin generar excepciones.

DR7 - Control de depuración

El registro de control de depuración se utiliza para habilitar de forma selectiva las cuatro condiciones de punto de interrupción de dirección y para especificar el tipo y el tamaño de cada uno de los cuatro puntos de interrupción. Hay dos niveles de habilitación: los niveles local (0, 2, 4, 6) y global (1, 3, 5, 7). El procesador restablece automáticamente los bits de habilitación local en cada cambio de tarea para evitar condiciones de punto de interrupción no deseadas en la nueva tarea. Los bits de habilitación global no se restablecen con un cambio de tarea; por lo tanto, se pueden utilizar para condiciones que son globales para todas las tareas.

  1. ^ ab En los procesadores 80386, la habilitación de puntos de interrupción exactos hace que se generen excepciones de puntos de interrupción de datos como excepciones de tipo trampa para la instrucción que realizó el acceso a los datos. Si no se habilitan los puntos de interrupción exactos, las excepciones de puntos de interrupción de datos pueden demorarse en una o más instrucciones. [5] La habilitación de puntos de interrupción exactos tiene un costo de rendimiento significativo en el 80386. [1]

    En los procesadores posteriores, los puntos de interrupción son siempre exactos: los bits 9:8 de DR7 todavía están presentes como bits escribibles y se recomienda configurarlos, pero la CPU los ignora.

  2. ^ Establecer el bit 12 de DR7 en 1 modifica la acción de los puntos de interrupción, el paso único, la detección general (ver bit 13) y el comportamiento del código de operación F1h( "ICEBP"/ "INT01") a:
  3. ^ Antes de ingresar al controlador de excepciones de depuración, se establecerá el bit 13 de DR6 y se borrará el bit 13 de DR7 para que se pueda acceder a los registros DR0-DR7 dentro del controlador.
  4. ^ En algunos procesadores 386/486, se informa que el bit 14 de DR7 habilita los mensajes de seguimiento de rama [8] y el bit 15 habilita los mensajes de seguimiento de tarea [3] . Estos mensajes están pensados ​​para usarse con emulación en circuito y pueden causar inestabilidad del sistema si no hay un ICE conectado.
  5. ^ abcd Las condiciones de punto de interrupción admitidas son: El comportamiento del uso del tipo de punto de interrupción 10ben procesadores donde el bit CR4.DE falta o está establecido en cero no está definido.

    Para los puntos de interrupción de ejecución de instrucciones, la longitud del punto de interrupción debe establecerse en 00b(1 byte) o, de lo contrario, el comportamiento no está definido.

  6. ^ abcd Las longitudes de puntos de interrupción admitidas son: Para longitudes de puntos de interrupción mayores a 1 byte, la dirección del punto de interrupción dado se redondea hacia abajo al múltiplo más cercano de la longitud del punto de interrupción.

    El comportamiento del uso de la longitud del punto de interrupción 10b(8 bytes) fuera del modo de 64 bits no está definido.

  7. ^ En los procesadores que admiten PTTT, escribir en DR7 sin estar en modo de 64 bits dejará los bits 35:32 de DR7 sin modificar.

DR4 y DR5

No son registros reales. En los procesadores que admiten el bit CR4.DE (Intel Pentium y posteriores), su comportamiento está controlado por CR4.DE:

En los procesadores sin CR4.DE , el comportamiento no está definido oficialmente: normalmente, DR4/5 tienen alias de DR6/7, pero existen excepciones que se han utilizado para la detección de CPU. [10]

Véase también

Referencias

  1. ^ abc John Crawford y Pat Gelsinger, "Programación del 80386", 1987 (ISBN 0-89588-381-3), capítulo 8, páginas 635-636
  2. ^ Intel, Manual del desarrollador de software, número de pedido 325462-078, diciembre de 2022, volumen 3, sección 18.2.3, página 3640
  3. ^ abcd Grupo de hackers de Potemkin, OPCODE.LST rev 4.51, 15 de octubre de 1999
  4. ^ Intel, Manual del desarrollador de software de arquitecturas Intel® 64 e IA-32, número de pedido 325462-079, marzo de 2023, volumen 3, capítulo 18.2.3 y 18.3.1.6 en las páginas 3636 y 3643
  5. ^ AMD, Am386 Microprocessors for Personal Computers Data Book, número de pedido 11339C, 15 de octubre de 1992, página 38.
  6. ^ Robert Collins, Modo de gestión del sistema de Intel, enero de 1997. Archivado desde el original el 13 de junio de 1997.
  7. ^ "Microprocesadores integrados de alto rendimiento y bajo consumo Am386®SX/SXL/SXLV" (PDF) ., publicación #21020, rev A, abril de 1997, páginas 5 y 6.
  8. ^ Robert Collins, Fragmentos no documentados en DR7. Archivado desde el original el 1 de diciembre de 1996
  9. ^ Intel, Intel Architecture Instruction Set Extensions and Future Features, número de pedido 314933-053, junio de 2024, sección 16.2.3, página 216. Archivado el 28 de julio de 2024.
  10. ^ Geoff Chappell, CPU Identification Before CPUID, 4 de marzo de 2023. Consultado el 6 de septiembre de 2024. Archivado el 3 de junio de 2024.

Enlaces externos