# nvidia_init.gdb - GDB script for debugging NVIDIA driver initialization in guest # Usage: gdb -x nvidia_init.gdb ./vmlinux # Then: (gdb) target remote localhost:1234 # ============================================================ # CONFIGURATION # ============================================================ # Path to guest kernel vmlinux with debug symbols # set pagination off # set confirm off # ============================================================ # BREAKPOINTS - NVIDIA Driver Probe/Init # ============================================================ # Core probe entry points break nvidia_probe break nvidia_init_module break nvidia_exit_module # GSP/RM initialization break nv_init_gsp break nv_gsp_init break nv_gsp_firmware_load break nv_gsp_bootstrap break nv_gsp_rpc_init # VFIO/mdev integration break nvidia_vgpu_vfio_get_ops break nvidia_vgpu_vfio_set_ops break nv_vgpu_mdev_register_parent break nv_vgpu_mdev_unregister_parent break nv_vgpu_create_callback break nv_vgpu_delete_callback break nv_vgpu_bar_info_callback break nv_vgpu_start_callback # PCI config space break nvidia_pci_probe break nvidia_pci_remove break pci_enable_device break pci_request_regions # MSI/MSI-X break pci_enable_msi_block break pci_enable_msix_range break nvidia_setup_msi break nvidia_setup_msix # BAR mapping break pci_iomap break pci_iounmap break nvidia_map_bars # Interrupt handling break request_threaded_irq break free_irq break nvidia_isr break nvidia_msi_isr break nvidia_msix_isr # DMA mapping break dma_map_page break dma_unmap_page break dma_map_sg break dma_unmap_sg # GSP RPC communication (OpenRM internal) break nv_gsp_rpc_send break nv_gsp_rpc_recv break nv_gsp_doorbell_ring break nv_gsp_doorbell_poll # ============================================================ # WATCHPOINTS - Key Data Structures # ============================================================ # Watch for GSP firmware load completion # watch *(int*)nv_gsp_fw_loaded # Watch for MSI-X table setup # watch *(int*)nv_msix_table_configured # ============================================================ # COMMANDS - Helper Functions # ============================================================ define nvidia_backtrace bt printf "\n=== NVIDIA Driver Stack ===\n" info registers end document nvidia_backtrace Show backtrace with register state for NVIDIA driver end define nvidia_pci_state printf "=== PCI Config Space ===\n" # Requires access to pci_dev structure # p/x ((struct pci_dev*)$rdi)->vendor # p/x ((struct pci_dev*)$rdi)->device # p/x ((struct pci_dev*)$rdi)->command # p/x ((struct pci_dev*)$rdi)->status end document nvidia_pci_state Print PCI device state end define nvidia_gsp_state printf "=== GSP State ===\n" # p/x nv_gsp_fw_version # p/x nv_gsp_fw_loaded # p/x nv_gsp_rpc_initialized end document nvidia_gsp_state Print GSP firmware state end define nvidia_vfio_state printf "=== VFIO/mdev State ===\n" # p/x nv_vgpu_mdev_registered # p/x nv_vgpu_vfio_ops end document nvidia_vfio_state Print VFIO/mdev registration state end # ============================================================ # TRACEPOINTS (if kernel has tracepoints enabled) # ============================================================ # trace nvidia:nvidia_probe_entry # trace nvidia:nvidia_probe_exit # trace nvidia:gsp_firmware_load # trace nvidia:gsp_rpc_send # trace nvidia:gsp_rpc_recv # ============================================================ # AUTOMATION - Continue and Log # ============================================================ # Log all breakpoint hits to file set logging file nvidia_init_debug.log set logging on # Auto-continue after logging (uncomment for automated runs) # set confirm off # commands 1 # nvidia_backtrace # continue # end # ============================================================ # CONVENIENCE ALIASES # ============================================================ define hook-stop # Print current function on every stop printf "\n=== STOPPED at %s ===\n", __func__ # Print key state # nvidia_gsp_state end # ============================================================ # USAGE NOTES # ============================================================ # 1. Compile guest kernel with CONFIG_DEBUG_INFO=y CONFIG_GDB_SCRIPTS=y # 2. Copy vmlinux from guest to host # 3. Launch QEMU: ./scripts/qemu_gdb_attach.sh # 4. In another terminal: gdb -x tools/gdb_scripts/nvidia_init.gdb ./vmlinux # 5. (gdb) target remote localhost:1234 # 6. (gdb) continue # # For specific debugging: # - PCI probe issues: break nvidia_probe # - GSP firmware load: break nv_gsp_firmware_load # - MSI-X setup: break pci_enable_msix_range # - BAR mapping: break pci_iomap # - RPC communication: break nv_gsp_rpc_send