Peter Maydell <peter.mayd...@linaro.org> writes:
> On Thu, 23 May 2019 at 11:39, Alex Bennée <alex.ben...@linaro.org> wrote: >> >> This provides two functions for handling console output that handle >> the common backend behaviour for semihosting. >> >> Signed-off-by: Alex Bennée <alex.ben...@linaro.org> > >> diff --git a/include/exec/gdbstub.h b/include/exec/gdbstub.h >> index 08363969c14..b2963547c48 100644 >> --- a/include/exec/gdbstub.h >> +++ b/include/exec/gdbstub.h >> @@ -44,6 +44,17 @@ void gdb_do_syscall(gdb_syscall_complete_cb cb, const >> char *fmt, ...); >> * argument list. >> */ >> void gdb_do_syscallv(gdb_syscall_complete_cb cb, const char *fmt, va_list >> va); >> +/** >> + * gdb_do_console_out: >> + * @gs: guest address of string to send >> + * @len: length of string >> + * >> + * Sends a string to gdb console. Unlike the system call interface >> + * there is no callback and we assume the system call always >> + * succeeds. >> + */ >> +void gdb_do_console_out(target_ulong s, int len); > > I'm not sure about the "no callback" part of this API. The operation > here is genuinely asynchronous and providing no mechanism for the > caller to be able to say "ok, now wait til it completes" doesn't > seem like a good plan. Well the caller doesn't really get a choice. At least in system mode gdbstub does a vm_stop(RUN_STATE_DEBUG) and brings everything to a halt anyway. All we've removed is the ability to tack on a callback (which can get run in all sorts of contexts) when we restart. I could just drop the API here and allow the semihosting API to call gdb_do_syscallv directly? -- Alex Bennée