En el código C de u-boot, el valor "gd" se declara así. (brazo)
register volatile gd_t *gd asm ("r9")y el registro r9 contiene el puntero a la estructura global_data. (typedef'd a gd_t)
Durante la depuración/análisis, para ver gd->malloc_base en el código C, escribir "p gd->malloc_base" no funciona. dice Missing ELF symbol "gd" .
Más tarde aprendí que debería hacer "p ((gd_t *)$r9)->malloc_base" para ver el valor. Estoy escribiendo este tipo de comando muchas veces al día. ¿No hay alguna forma de asignar una variable en gdb que represente ((gd_t *)$r9)? y ¿por qué gdb no reconoce el valor gd en el código?
Lo que quiero hacer es crear una variable que represente ((gd_t *)$r9) para poder usarla como gd->ram_top o gd->env_has_init, etc. según el valor que me interese.
Este es el comentario de @ssbssa a mi pregunta (gracias @ssbssa). Le pedí que pusiera su respuesta pero no lo hace. así que agrego la respuesta yo mismo.
Puede definir una macro como macro define gd ((gd_t *)$r0) y luego puede usar p /x gd->reloc_off o p /x gd->flags . Por supuesto, puede poner este comando de definición de macro en el archivo de comandos e iniciar gdb como este arm-none-eabi-gdb u-boot -x gdb_command .