main: support gdb debugging with AVR
Be able to run `tinygo gdb -target=arduino examples/serial` and debug a program with the power of a real debugger. Note that this only works on LLVM 11 because older versions have a bug in the AVR backend that cause it to produce invalid debug information: https://reviews.llvm.org/D74213.
Этот коммит содержится в:
родитель
bb27bbcb41
коммит
4cc1cdf672
2 изменённых файлов: 13 добавлений и 2 удалений
12
main.go
12
main.go
|
@ -348,12 +348,14 @@ func FlashGDB(pkgName string, ocdOutput bool, options *compileopts.Options) erro
|
||||||
switch gdbInterface {
|
switch gdbInterface {
|
||||||
case "msd", "command", "":
|
case "msd", "command", "":
|
||||||
if len(config.Target.Emulator) != 0 {
|
if len(config.Target.Emulator) != 0 {
|
||||||
// Assume QEMU as an emulator.
|
|
||||||
if config.Target.Emulator[0] == "mgba" {
|
if config.Target.Emulator[0] == "mgba" {
|
||||||
gdbInterface = "mgba"
|
gdbInterface = "mgba"
|
||||||
|
} else if config.Target.Emulator[0] == "simavr" {
|
||||||
|
gdbInterface = "simavr"
|
||||||
} else if strings.HasPrefix(config.Target.Emulator[0], "qemu-system-") {
|
} else if strings.HasPrefix(config.Target.Emulator[0], "qemu-system-") {
|
||||||
gdbInterface = "qemu"
|
gdbInterface = "qemu"
|
||||||
} else {
|
} else {
|
||||||
|
// Assume QEMU as an emulator.
|
||||||
gdbInterface = "qemu-user"
|
gdbInterface = "qemu-user"
|
||||||
}
|
}
|
||||||
} else if openocdInterface != "" && config.Target.OpenOCDTarget != "" {
|
} else if openocdInterface != "" && config.Target.OpenOCDTarget != "" {
|
||||||
|
@ -429,6 +431,14 @@ func FlashGDB(pkgName string, ocdOutput bool, options *compileopts.Options) erro
|
||||||
daemon = exec.Command(config.Target.Emulator[0], args...)
|
daemon = exec.Command(config.Target.Emulator[0], args...)
|
||||||
daemon.Stdout = os.Stdout
|
daemon.Stdout = os.Stdout
|
||||||
daemon.Stderr = os.Stderr
|
daemon.Stderr = os.Stderr
|
||||||
|
case "simavr":
|
||||||
|
gdbCommands = append(gdbCommands, "target remote :1234")
|
||||||
|
|
||||||
|
// Run in an emulator.
|
||||||
|
args := append(config.Target.Emulator[1:], "-g", result.Binary)
|
||||||
|
daemon = exec.Command(config.Target.Emulator[0], args...)
|
||||||
|
daemon.Stdout = os.Stdout
|
||||||
|
daemon.Stderr = os.Stderr
|
||||||
case "msd":
|
case "msd":
|
||||||
return errors.New("gdb is not supported for drag-and-drop programmable devices")
|
return errors.New("gdb is not supported for drag-and-drop programmable devices")
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -15,5 +15,6 @@
|
||||||
"extra-files": [
|
"extra-files": [
|
||||||
"src/internal/task/task_stack_avr.S",
|
"src/internal/task/task_stack_avr.S",
|
||||||
"src/runtime/gc_avr.S"
|
"src/runtime/gc_avr.S"
|
||||||
]
|
],
|
||||||
|
"gdb": "avr-gdb"
|
||||||
}
|
}
|
||||||
|
|
Загрузка…
Создание таблицы
Сослаться в новой задаче