Message ID | 20200603123754.19059-4-f4bug@amsat.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | target/unicore32: Semihosting cleanup | expand |
On 6/3/20 5:37 AM, Philippe Mathieu-Daudé wrote: > Use the common API for semihosting logging. > > Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org> > --- > default-configs/unicore32-softmmu.mak | 1 + > target/unicore32/helper.c | 57 +++------------------------ > 2 files changed, 6 insertions(+), 52 deletions(-) Reviewed-by: Richard Henderson <richard.henderson@linaro.org> r~
Le 03/06/2020 à 14:37, Philippe Mathieu-Daudé a écrit : > Use the common API for semihosting logging. > > Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org> > --- > default-configs/unicore32-softmmu.mak | 1 + > target/unicore32/helper.c | 57 +++------------------------ > 2 files changed, 6 insertions(+), 52 deletions(-) > > diff --git a/default-configs/unicore32-softmmu.mak b/default-configs/unicore32-softmmu.mak > index 0bfce48c6d..899288e3d7 100644 > --- a/default-configs/unicore32-softmmu.mak > +++ b/default-configs/unicore32-softmmu.mak > @@ -3,3 +3,4 @@ > # Boards: > # > CONFIG_PUV3=y > +CONFIG_SEMIHOSTING=y > diff --git a/target/unicore32/helper.c b/target/unicore32/helper.c > index 00371a7da6..54c26871fe 100644 > --- a/target/unicore32/helper.c > +++ b/target/unicore32/helper.c > @@ -14,9 +14,7 @@ > #include "cpu.h" > #include "exec/exec-all.h" > #include "exec/helper-proto.h" > -#ifndef CONFIG_USER_ONLY > -#include "ui/console.h" > -#endif > +#include "hw/semihosting/console.h" > > #undef DEBUG_UC32 > > @@ -161,58 +159,13 @@ uint32_t helper_cp0_get(CPUUniCore32State *env, uint32_t creg, uint32_t cop) > return 0; > } > > -#ifdef CONFIG_CURSES > - > -/* KEY_EVENT is defined in wincon.h and in curses.h. Avoid redefinition. */ > -#undef KEY_EVENT > -#include <curses.h> > -#undef KEY_EVENT > - > -/* > - * FIXME: > - * 1. curses windows will be blank when switching back > - * 2. backspace is not handled yet > - */ > -static void putc_on_screen(unsigned char ch) > +void helper_cp1_putc(target_ulong regval) > { > - static WINDOW *localwin; > - static int init; > + const char c = regval; > > - if (!init) { > - /* Assume 80 * 30 screen to minimize the implementation */ > - localwin = newwin(30, 80, 0, 0); > - scrollok(localwin, TRUE); > - init = TRUE; > - } > - > - if (isprint(ch)) { > - wprintw(localwin, "%c", ch); > - } else { > - switch (ch) { > - case '\n': > - wprintw(localwin, "%c", ch); > - break; > - case '\r': > - /* If '\r' is put before '\n', the curses window will destroy the > - * last print line. And meanwhile, '\n' implifies '\r' inside. */ > - break; > - default: /* Not handled, so just print it hex code */ > - wprintw(localwin, "-- 0x%x --", ch); > - } > - } > - > - wrefresh(localwin); > + qemu_semihosting_log_out(&c, sizeof(c)); > } > -#else > -#define putc_on_screen(c) do { } while (0) > -#endif > - > -void helper_cp1_putc(target_ulong x) > -{ > - putc_on_screen((unsigned char)x); /* Output to screen */ > - DPRINTF("%c", x); /* Output to stdout */ > -} > -#endif > +#endif /* !CONFIG_USER_ONLY */ > > bool uc32_cpu_exec_interrupt(CPUState *cs, int interrupt_request) > { > Applied to my trivial-patches branch. Thanks, Laurent
diff --git a/default-configs/unicore32-softmmu.mak b/default-configs/unicore32-softmmu.mak index 0bfce48c6d..899288e3d7 100644 --- a/default-configs/unicore32-softmmu.mak +++ b/default-configs/unicore32-softmmu.mak @@ -3,3 +3,4 @@ # Boards: # CONFIG_PUV3=y +CONFIG_SEMIHOSTING=y diff --git a/target/unicore32/helper.c b/target/unicore32/helper.c index 00371a7da6..54c26871fe 100644 --- a/target/unicore32/helper.c +++ b/target/unicore32/helper.c @@ -14,9 +14,7 @@ #include "cpu.h" #include "exec/exec-all.h" #include "exec/helper-proto.h" -#ifndef CONFIG_USER_ONLY -#include "ui/console.h" -#endif +#include "hw/semihosting/console.h" #undef DEBUG_UC32 @@ -161,58 +159,13 @@ uint32_t helper_cp0_get(CPUUniCore32State *env, uint32_t creg, uint32_t cop) return 0; } -#ifdef CONFIG_CURSES - -/* KEY_EVENT is defined in wincon.h and in curses.h. Avoid redefinition. */ -#undef KEY_EVENT -#include <curses.h> -#undef KEY_EVENT - -/* - * FIXME: - * 1. curses windows will be blank when switching back - * 2. backspace is not handled yet - */ -static void putc_on_screen(unsigned char ch) +void helper_cp1_putc(target_ulong regval) { - static WINDOW *localwin; - static int init; + const char c = regval; - if (!init) { - /* Assume 80 * 30 screen to minimize the implementation */ - localwin = newwin(30, 80, 0, 0); - scrollok(localwin, TRUE); - init = TRUE; - } - - if (isprint(ch)) { - wprintw(localwin, "%c", ch); - } else { - switch (ch) { - case '\n': - wprintw(localwin, "%c", ch); - break; - case '\r': - /* If '\r' is put before '\n', the curses window will destroy the - * last print line. And meanwhile, '\n' implifies '\r' inside. */ - break; - default: /* Not handled, so just print it hex code */ - wprintw(localwin, "-- 0x%x --", ch); - } - } - - wrefresh(localwin); + qemu_semihosting_log_out(&c, sizeof(c)); } -#else -#define putc_on_screen(c) do { } while (0) -#endif - -void helper_cp1_putc(target_ulong x) -{ - putc_on_screen((unsigned char)x); /* Output to screen */ - DPRINTF("%c", x); /* Output to stdout */ -} -#endif +#endif /* !CONFIG_USER_ONLY */ bool uc32_cpu_exec_interrupt(CPUState *cs, int interrupt_request) {
Use the common API for semihosting logging. Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org> --- default-configs/unicore32-softmmu.mak | 1 + target/unicore32/helper.c | 57 +++------------------------ 2 files changed, 6 insertions(+), 52 deletions(-)