¿Cómo se implementan los puntos de observación de hardware en gdb?

Echa un vistazo a Joint Test Action Group. En todos los procesadores que tienen un puerto JTAG, hay una máquina de estado JTAG estandarizada incorporada. Esta máquina de estado tiene la capacidad de acceder a registros / datos dentro del procesador, detener la ejecución, restablecer la CPU, etc. También se pueden establecer puntos de interrupción para el código (que creo que básicamente se detienen en la coincidencia de direcciones), que están limitados ya que coinciden con una dirección , los circuitos integrados de lógica combinatoria se utilizan como comparador. (alguien que sepa más sobre los puntos de interrupción del hardware puede aclarar esto para nosotros) JTAG también se puede usar para la ejecución de código arbitrario, esto a veces se usa como un medio para escribir código en flash u otros tipos de memoria desde la cual la CPU ejecuta el código.

GDB depura el hardware conectándose a un servidor GDB, que debe proporcionarse para el hardware en particular, ya que GDB solo conoce los comandos de depuración como detener, cargar, continuar, paso, etc. La interfaz del servidor GDB debe implementar estos comandos haciendo uso de La interfaz JTAG.

Por ejemplo, su hardware es un stm32, con JTAG.

  1. El hardware al que se ha conectado es una herramienta basada en, por ejemplo, FTDI FT232H (que es un chip USB que puede hacer muchos tipos de interfaces seriales síncronas / asíncronas como SPI, JTAG y GPIO)
  2. Esto está conectado a su PC con un cable USB
  3. Está ejecutando OpenOCD en su PC que admite el protocolo GDB remoto y puede usar este chip FT232H para realizar funciones JTAG como establecer / desarmar puntos de interrupción, pasos, etc.
  4. Y finalmente ejecuta GDB (para armar), y su objetivo es telnet en algún puerto que fue abierto por OpenOCD. Ahora GDB solo envía los comandos que conoce y recibe los datos que comprende.

(Espero que lo que dije sea realmente correcto)

No puedo responder específicamente en gdb pero esto debe ser específico de la arquitectura y requiere soporte de HW.

Los puntos de corte de HW se implementan a nivel de HW, sorprendentemente. La arquitectura que conozco básicamente tiene líneas externas extraídas del bus de memoria a un bloque HW que contiene la lógica de los puntos de interrupción. Dado que los puntos de interrupción de HW consisten en establecer puntos de interrupción o puntos de observación en ubicaciones o regiones de memoria específicas, este bloque solo se programa con las direcciones que nos interesan. Esto se realiza escribiendo directamente en los registros del dispositivo, por lo que es muy específico del dispositivo.