diff --git a/main.go b/main.go index 38aadac1f..3e057d093 100644 --- a/main.go +++ b/main.go @@ -310,10 +310,12 @@ func FlashGDB(pkgName string, ocdOutput bool, options *compileopts.Options) erro switch gdbInterface { case "msd", "command", "": if len(config.Target.Emulator) != 0 { - // Assume QEMU as an emulator. if config.Target.Emulator[0] == "mgba" { gdbInterface = "mgba" + } else if config.Target.Emulator[0] == "simavr" { + gdbInterface = "simavr" } else { + // Assume QEMU as an emulator. gdbInterface = "qemu" } } else if openocdInterface != "" && config.Target.OpenOCDTarget != "" { @@ -379,6 +381,14 @@ func FlashGDB(pkgName string, ocdOutput bool, options *compileopts.Options) erro daemon = exec.Command(config.Target.Emulator[0], args...) daemon.Stdout = os.Stdout daemon.Stderr = os.Stderr + case "simavr": + gdbCommands = append(gdbCommands, "target remote :1234") + + // Run in an emulator. + args := append(config.Target.Emulator[1:], "-g", tmppath) + daemon = exec.Command(config.Target.Emulator[0], args...) + daemon.Stdout = os.Stdout + daemon.Stderr = os.Stderr case "msd": return errors.New("gdb is not supported for drag-and-drop programmable devices") default: diff --git a/targets/avr.json b/targets/avr.json index 932717e2c..b7f87ca42 100644 --- a/targets/avr.json +++ b/targets/avr.json @@ -6,11 +6,15 @@ "gc": "conservative", "linker": "avr-gcc", "scheduler": "none", + "cflags": [ + "-gdwarf-4" + ], "ldflags": [ "-T", "targets/avr.ld", "-Wl,--gc-sections" ], "extra-files": [ "src/runtime/scheduler_avr.S" - ] + ], + "gdb": "avr-gdb" }