* Markus Armbruster (arm...@redhat.com) wrote:
> The various TARGET_cpu_list() take an fprintf()-like callback and a
> FILE * to pass to it.  Their callers (vl.c's main() via list_cpus(),
> bsd-user/main.c's main(), linux-user/main.c's main()) all pass
> fprintf() and stdout.  Thus, the flexibility provided by the (rather
> tiresome) indirection isn't actually used.
> 
> Drop the callback, and call qemu_fprintf() instead.

Actually calling qemu_printf

> Calling printf() would also work, but would make the code unsuitable
> for monitor context without making it simpler.

Gernally OK; but just checking - are there any flag combos that will
mean this ends up with the result going down a monitor rather than
stdout, and will that upset something like libvirt that might be using
this to enumerate a cpu list?

Dave

> Signed-off-by: Markus Armbruster <arm...@redhat.com>
> ---
>  bsd-user/main.c                  |  2 +-
>  cpus.c                           |  4 +--
>  include/exec/cpu-common.h        | 13 ---------
>  include/sysemu/cpus.h            |  3 +-
>  linux-user/main.c                |  2 +-
>  target/alpha/cpu.c               | 15 ++++------
>  target/alpha/cpu.h               |  2 +-
>  target/arm/cpu.c                 |  1 -
>  target/arm/cpu.h                 |  2 +-
>  target/arm/helper.c              | 15 ++++------
>  target/cris/cpu.c                | 14 ++++-----
>  target/cris/cpu.h                |  2 +-
>  target/hppa/cpu.c                | 14 ++++-----
>  target/hppa/cpu.h                |  2 +-
>  target/i386/cpu.c                | 29 ++++++++-----------
>  target/i386/cpu.h                |  2 +-
>  target/lm32/cpu.c                | 14 ++++-----
>  target/lm32/cpu.h                |  2 +-
>  target/m68k/cpu.h                |  2 +-
>  target/m68k/helper.c             | 14 +++------
>  target/mips/cpu.h                |  2 +-
>  target/mips/translate.c          |  1 +
>  target/mips/translate_init.inc.c |  5 ++--
>  target/openrisc/cpu.c            | 15 ++++------
>  target/openrisc/cpu.h            |  2 +-
>  target/ppc/cpu.h                 |  2 +-
>  target/ppc/translate_init.inc.c  | 26 +++++++----------
>  target/riscv/cpu.c               | 17 +++--------
>  target/riscv/cpu.h               |  2 +-
>  target/s390x/cpu.h               |  2 +-
>  target/s390x/cpu_models.c        | 21 ++++++--------
>  target/sh4/cpu.c                 | 17 +++--------
>  target/sh4/cpu.h                 |  2 +-
>  target/sparc/cpu.c               | 49 +++++++++++++++-----------------
>  target/sparc/cpu.h               |  2 +-
>  target/tricore/cpu.h             |  2 +-
>  target/tricore/helper.c          | 15 ++++------
>  target/xtensa/cpu.h              |  2 +-
>  target/xtensa/helper.c           |  7 +++--
>  vl.c                             |  2 +-
>  40 files changed, 129 insertions(+), 218 deletions(-)
> 
> diff --git a/bsd-user/main.c b/bsd-user/main.c
> index 0d3156974c..1b4a2f8693 100644
> --- a/bsd-user/main.c
> +++ b/bsd-user/main.c
> @@ -817,7 +817,7 @@ int main(int argc, char **argv)
>              if (is_help_option(cpu_model)) {
>  /* XXX: implement xxx_cpu_list for targets that still miss it */
>  #if defined(cpu_list)
> -                    cpu_list(stdout, &fprintf);
> +                    cpu_list();
>  #endif
>                  exit(1);
>              }
> diff --git a/cpus.c b/cpus.c
> index 684aa9679a..b4eecf70f0 100644
> --- a/cpus.c
> +++ b/cpus.c
> @@ -2181,11 +2181,11 @@ int vm_stop_force_state(RunState state)
>      }
>  }
>  
> -void list_cpus(FILE *f, fprintf_function cpu_fprintf, const char *optarg)
> +void list_cpus(const char *optarg)
>  {
>      /* XXX: implement xxx_cpu_list for targets that still miss it */
>  #if defined(cpu_list)
> -    cpu_list(f, cpu_fprintf);
> +    cpu_list();
>  #endif
>  }
>  
> diff --git a/include/exec/cpu-common.h b/include/exec/cpu-common.h
> index cef8b88a2a..848a4b94ab 100644
> --- a/include/exec/cpu-common.h
> +++ b/include/exec/cpu-common.h
> @@ -9,19 +9,6 @@
>  
>  #include "qemu/bswap.h"
>  #include "qemu/queue.h"
> -#include "qemu/fprintf-fn.h"
> -
> -/**
> - * CPUListState:
> - * @cpu_fprintf: Print function.
> - * @file: File to print to using @cpu_fprint.
> - *
> - * State commonly used for iterating over CPU models.
> - */
> -typedef struct CPUListState {
> -    fprintf_function cpu_fprintf;
> -    FILE *file;
> -} CPUListState;
>  
>  /* The CPU list lock nests outside page_(un)lock or mmap_(un)lock */
>  void qemu_init_cpu_list(void);
> diff --git a/include/sysemu/cpus.h b/include/sysemu/cpus.h
> index ef13a120cc..32c05f27e7 100644
> --- a/include/sysemu/cpus.h
> +++ b/include/sysemu/cpus.h
> @@ -1,7 +1,6 @@
>  #ifndef QEMU_CPUS_H
>  #define QEMU_CPUS_H
>  
> -#include "qemu/fprintf-fn.h"
>  #include "qemu/timer.h"
>  
>  /* cpus.c */
> @@ -39,7 +38,7 @@ extern int smp_cores;
>  extern int smp_threads;
>  #endif
>  
> -void list_cpus(FILE *f, fprintf_function cpu_fprintf, const char *optarg);
> +void list_cpus(const char *optarg);
>  
>  void qemu_tcg_configure(QemuOpts *opts, Error **errp);
>  
> diff --git a/linux-user/main.c b/linux-user/main.c
> index a0aba9cb1e..bef5e55880 100644
> --- a/linux-user/main.c
> +++ b/linux-user/main.c
> @@ -316,7 +316,7 @@ static void handle_arg_cpu(const char *arg)
>      if (cpu_model == NULL || is_help_option(cpu_model)) {
>          /* XXX: implement xxx_cpu_list for targets that still miss it */
>  #if defined(cpu_list)
> -        cpu_list(stdout, &fprintf);
> +        cpu_list();
>  #endif
>          exit(EXIT_FAILURE);
>      }
> diff --git a/target/alpha/cpu.c b/target/alpha/cpu.c
> index 1fd95d6c0f..ad3588a44a 100644
> --- a/target/alpha/cpu.c
> +++ b/target/alpha/cpu.c
> @@ -21,6 +21,7 @@
>  
>  #include "qemu/osdep.h"
>  #include "qapi/error.h"
> +#include "qemu/qemu-print.h"
>  #include "cpu.h"
>  #include "qemu-common.h"
>  #include "exec/exec-all.h"
> @@ -74,23 +75,17 @@ static void alpha_cpu_realizefn(DeviceState *dev, Error 
> **errp)
>  static void alpha_cpu_list_entry(gpointer data, gpointer user_data)
>  {
>      ObjectClass *oc = data;
> -    CPUListState *s = user_data;
>  
> -    (*s->cpu_fprintf)(s->file, "  %s\n",
> -                      object_class_get_name(oc));
> +    qemu_printf("  %s\n", object_class_get_name(oc));
>  }
>  
> -void alpha_cpu_list(FILE *f, fprintf_function cpu_fprintf)
> +void alpha_cpu_list(void)
>  {
> -    CPUListState s = {
> -        .file = f,
> -        .cpu_fprintf = cpu_fprintf,
> -    };
>      GSList *list;
>  
>      list = object_class_get_list_sorted(TYPE_ALPHA_CPU, false);
> -    (*cpu_fprintf)(f, "Available CPUs:\n");
> -    g_slist_foreach(list, alpha_cpu_list_entry, &s);
> +    qemu_printf("Available CPUs:\n");
> +    g_slist_foreach(list, alpha_cpu_list_entry, NULL);
>      g_slist_free(list);
>  }
>  
> diff --git a/target/alpha/cpu.h b/target/alpha/cpu.h
> index 7b50be785d..732764f23c 100644
> --- a/target/alpha/cpu.h
> +++ b/target/alpha/cpu.h
> @@ -470,7 +470,7 @@ void alpha_translate_init(void);
>  #define ALPHA_CPU_TYPE_NAME(model) model ALPHA_CPU_TYPE_SUFFIX
>  #define CPU_RESOLVING_TYPE TYPE_ALPHA_CPU
>  
> -void alpha_cpu_list(FILE *f, fprintf_function cpu_fprintf);
> +void alpha_cpu_list(void);
>  /* you can call this signal handler from your SIGBUS and SIGSEGV
>     signal handlers to inform the virtual CPU of exceptions. non zero
>     is returned if the signal was handled by the virtual CPU.  */
> diff --git a/target/arm/cpu.c b/target/arm/cpu.c
> index 4155782197..bb9fdc6304 100644
> --- a/target/arm/cpu.c
> +++ b/target/arm/cpu.c
> @@ -20,7 +20,6 @@
>  
>  #include "qemu/osdep.h"
>  #include "target/arm/idau.h"
> -#include "qemu/error-report.h"
>  #include "qapi/error.h"
>  #include "qapi/visitor.h"
>  #include "cpu.h"
> diff --git a/target/arm/cpu.h b/target/arm/cpu.h
> index d4d2836923..85c3bd642a 100644
> --- a/target/arm/cpu.h
> +++ b/target/arm/cpu.h
> @@ -1936,7 +1936,7 @@ static inline bool access_secure_reg(CPUARMState *env)
>                         (arm_is_secure(_env) && !arm_el_is_aa64((_env), 3)), \
>                         (_val))
>  
> -void arm_cpu_list(FILE *f, fprintf_function cpu_fprintf);
> +void arm_cpu_list(void);
>  uint32_t arm_phys_excp_target_el(CPUState *cs, uint32_t excp_idx,
>                                   uint32_t cur_el, bool secure);
>  
> diff --git a/target/arm/helper.c b/target/arm/helper.c
> index a36f4b3d69..57ef75b3fc 100644
> --- a/target/arm/helper.c
> +++ b/target/arm/helper.c
> @@ -10,6 +10,7 @@
>  #include "sysemu/sysemu.h"
>  #include "qemu/bitops.h"
>  #include "qemu/crc32c.h"
> +#include "qemu/qemu-print.h"
>  #include "exec/exec-all.h"
>  #include "exec/cpu_ldst.h"
>  #include "arm_ldst.h"
> @@ -6724,29 +6725,23 @@ static gint arm_cpu_list_compare(gconstpointer a, 
> gconstpointer b)
>  static void arm_cpu_list_entry(gpointer data, gpointer user_data)
>  {
>      ObjectClass *oc = data;
> -    CPUListState *s = user_data;
>      const char *typename;
>      char *name;
>  
>      typename = object_class_get_name(oc);
>      name = g_strndup(typename, strlen(typename) - strlen("-" TYPE_ARM_CPU));
> -    (*s->cpu_fprintf)(s->file, "  %s\n",
> -                      name);
> +    qemu_printf("  %s\n", name);
>      g_free(name);
>  }
>  
> -void arm_cpu_list(FILE *f, fprintf_function cpu_fprintf)
> +void arm_cpu_list(void)
>  {
> -    CPUListState s = {
> -        .file = f,
> -        .cpu_fprintf = cpu_fprintf,
> -    };
>      GSList *list;
>  
>      list = object_class_get_list(TYPE_ARM_CPU, false);
>      list = g_slist_sort(list, arm_cpu_list_compare);
> -    (*cpu_fprintf)(f, "Available CPUs:\n");
> -    g_slist_foreach(list, arm_cpu_list_entry, &s);
> +    qemu_printf("Available CPUs:\n");
> +    g_slist_foreach(list, arm_cpu_list_entry, NULL);
>      g_slist_free(list);
>  }
>  
> diff --git a/target/cris/cpu.c b/target/cris/cpu.c
> index a23aba2688..75729bfdd5 100644
> --- a/target/cris/cpu.c
> +++ b/target/cris/cpu.c
> @@ -23,6 +23,7 @@
>  
>  #include "qemu/osdep.h"
>  #include "qapi/error.h"
> +#include "qemu/qemu-print.h"
>  #include "cpu.h"
>  #include "qemu-common.h"
>  #include "mmu.h"
> @@ -103,27 +104,22 @@ static gint cris_cpu_list_compare(gconstpointer a, 
> gconstpointer b)
>  static void cris_cpu_list_entry(gpointer data, gpointer user_data)
>  {
>      ObjectClass *oc = data;
> -    CPUListState *s = user_data;
>      const char *typename = object_class_get_name(oc);
>      char *name;
>  
>      name = g_strndup(typename, strlen(typename) - 
> strlen(CRIS_CPU_TYPE_SUFFIX));
> -    (*s->cpu_fprintf)(s->file, "  %s\n", name);
> +    qemu_printf("  %s\n", name);
>      g_free(name);
>  }
>  
> -void cris_cpu_list(FILE *f, fprintf_function cpu_fprintf)
> +void cris_cpu_list(void)
>  {
> -    CPUListState s = {
> -        .file = f,
> -        .cpu_fprintf = cpu_fprintf,
> -    };
>      GSList *list;
>  
>      list = object_class_get_list(TYPE_CRIS_CPU, false);
>      list = g_slist_sort(list, cris_cpu_list_compare);
> -    (*cpu_fprintf)(f, "Available CPUs:\n");
> -    g_slist_foreach(list, cris_cpu_list_entry, &s);
> +    qemu_printf("Available CPUs:\n");
> +    g_slist_foreach(list, cris_cpu_list_entry, NULL);
>      g_slist_free(list);
>  }
>  
> diff --git a/target/cris/cpu.h b/target/cris/cpu.h
> index 8bb1dbc989..3d11922fb2 100644
> --- a/target/cris/cpu.h
> +++ b/target/cris/cpu.h
> @@ -308,6 +308,6 @@ static inline void cpu_get_tb_cpu_state(CPUCRISState 
> *env, target_ulong *pc,
>  }
>  
>  #define cpu_list cris_cpu_list
> -void cris_cpu_list(FILE *f, fprintf_function cpu_fprintf);
> +void cris_cpu_list(void);
>  
>  #endif
> diff --git a/target/hppa/cpu.c b/target/hppa/cpu.c
> index 00bf444620..e64f48581e 100644
> --- a/target/hppa/cpu.c
> +++ b/target/hppa/cpu.c
> @@ -20,6 +20,7 @@
>  
>  #include "qemu/osdep.h"
>  #include "qapi/error.h"
> +#include "qemu/qemu-print.h"
>  #include "cpu.h"
>  #include "qemu-common.h"
>  #include "exec/exec-all.h"
> @@ -113,22 +114,17 @@ static void hppa_cpu_realizefn(DeviceState *dev, Error 
> **errp)
>  static void hppa_cpu_list_entry(gpointer data, gpointer user_data)
>  {
>      ObjectClass *oc = data;
> -    CPUListState *s = user_data;
>  
> -    (*s->cpu_fprintf)(s->file, "  %s\n", object_class_get_name(oc));
> +    qemu_printf("  %s\n", object_class_get_name(oc));
>  }
>  
> -void hppa_cpu_list(FILE *f, fprintf_function cpu_fprintf)
> +void hppa_cpu_list(void)
>  {
> -    CPUListState s = {
> -        .file = f,
> -        .cpu_fprintf = cpu_fprintf,
> -    };
>      GSList *list;
>  
>      list = object_class_get_list_sorted(TYPE_HPPA_CPU, false);
> -    (*cpu_fprintf)(f, "Available CPUs:\n");
> -    g_slist_foreach(list, hppa_cpu_list_entry, &s);
> +    qemu_printf("Available CPUs:\n");
> +    g_slist_foreach(list, hppa_cpu_list_entry, NULL);
>      g_slist_free(list);
>  }
>  
> diff --git a/target/hppa/cpu.h b/target/hppa/cpu.h
> index c062c7969c..db8c9b812c 100644
> --- a/target/hppa/cpu.h
> +++ b/target/hppa/cpu.h
> @@ -272,7 +272,7 @@ void hppa_translate_init(void);
>  
>  #define CPU_RESOLVING_TYPE TYPE_HPPA_CPU
>  
> -void hppa_cpu_list(FILE *f, fprintf_function cpu_fprintf);
> +void hppa_cpu_list(void);
>  
>  static inline target_ulong hppa_form_gva_psw(target_ureg psw, uint64_t spc,
>                                               target_ureg off)
> diff --git a/target/i386/cpu.c b/target/i386/cpu.c
> index d6bb57d210..e1687f7547 100644
> --- a/target/i386/cpu.c
> +++ b/target/i386/cpu.c
> @@ -21,6 +21,7 @@
>  #include "qemu/units.h"
>  #include "qemu/cutils.h"
>  #include "qemu/bitops.h"
> +#include "qemu/qemu-print.h"
>  
>  #include "cpu.h"
>  #include "exec/exec-all.h"
> @@ -3671,7 +3672,7 @@ static void 
> x86_cpu_class_check_missing_features(X86CPUClass *xcc,
>  
>  /* Print all cpuid feature names in featureset
>   */
> -static void listflags(FILE *f, fprintf_function print, GList *features)
> +static void listflags(GList *features)
>  {
>      size_t len = 0;
>      GList *tmp;
> @@ -3679,13 +3680,13 @@ static void listflags(FILE *f, fprintf_function 
> print, GList *features)
>      for (tmp = features; tmp; tmp = tmp->next) {
>          const char *name = tmp->data;
>          if ((len + strlen(name) + 1) >= 75) {
> -            print(f, "\n");
> +            qemu_printf("\n");
>              len = 0;
>          }
> -        print(f, "%s%s", len == 0 ? "  " : " ", name);
> +        qemu_printf("%s%s", len == 0 ? "  " : " ", name);
>          len += strlen(name) + 1;
>      }
> -    print(f, "\n");
> +    qemu_printf("\n");
>  }
>  
>  /* Sort alphabetically by type name, respecting X86CPUClass::ordering. */
> @@ -3721,32 +3722,26 @@ static void x86_cpu_list_entry(gpointer data, 
> gpointer user_data)
>  {
>      ObjectClass *oc = data;
>      X86CPUClass *cc = X86_CPU_CLASS(oc);
> -    CPUListState *s = user_data;
>      char *name = x86_cpu_class_get_model_name(cc);
>      const char *desc = cc->model_description;
>      if (!desc && cc->cpu_def) {
>          desc = cc->cpu_def->model_id;
>      }
>  
> -    (*s->cpu_fprintf)(s->file, "x86 %-20s  %-48s\n",
> -                      name, desc);
> +    qemu_printf("x86 %-20s  %-48s\n", name, desc);
>      g_free(name);
>  }
>  
>  /* list available CPU models and flags */
> -void x86_cpu_list(FILE *f, fprintf_function cpu_fprintf)
> +void x86_cpu_list(void)
>  {
>      int i, j;
> -    CPUListState s = {
> -        .file = f,
> -        .cpu_fprintf = cpu_fprintf,
> -    };
>      GSList *list;
>      GList *names = NULL;
>  
> -    (*cpu_fprintf)(f, "Available CPUs:\n");
> +    qemu_printf("Available CPUs:\n");
>      list = get_sorted_cpu_model_list();
> -    g_slist_foreach(list, x86_cpu_list_entry, &s);
> +    g_slist_foreach(list, x86_cpu_list_entry, NULL);
>      g_slist_free(list);
>  
>      names = NULL;
> @@ -3761,9 +3756,9 @@ void x86_cpu_list(FILE *f, fprintf_function cpu_fprintf)
>  
>      names = g_list_sort(names, (GCompareFunc)strcmp);
>  
> -    (*cpu_fprintf)(f, "\nRecognized CPUID flags:\n");
> -    listflags(f, cpu_fprintf, names);
> -    (*cpu_fprintf)(f, "\n");
> +    qemu_printf("\nRecognized CPUID flags:\n");
> +    listflags(names);
> +    qemu_printf("\n");
>      g_list_free(names);
>  }
>  
> diff --git a/target/i386/cpu.h b/target/i386/cpu.h
> index 83fb522554..b39327dcb7 100644
> --- a/target/i386/cpu.h
> +++ b/target/i386/cpu.h
> @@ -1532,7 +1532,7 @@ int x86_cpu_gdb_write_register(CPUState *cpu, uint8_t 
> *buf, int reg);
>  void x86_cpu_exec_enter(CPUState *cpu);
>  void x86_cpu_exec_exit(CPUState *cpu);
>  
> -void x86_cpu_list(FILE *f, fprintf_function cpu_fprintf);
> +void x86_cpu_list(void);
>  int cpu_x86_support_mca_broadcast(CPUX86State *env);
>  
>  int cpu_get_pic_interrupt(CPUX86State *s);
> diff --git a/target/lm32/cpu.c b/target/lm32/cpu.c
> index b7499cb627..282da19994 100644
> --- a/target/lm32/cpu.c
> +++ b/target/lm32/cpu.c
> @@ -20,6 +20,7 @@
>  
>  #include "qemu/osdep.h"
>  #include "qapi/error.h"
> +#include "qemu/qemu-print.h"
>  #include "cpu.h"
>  #include "qemu-common.h"
>  
> @@ -34,27 +35,22 @@ static void lm32_cpu_set_pc(CPUState *cs, vaddr value)
>  static void lm32_cpu_list_entry(gpointer data, gpointer user_data)
>  {
>      ObjectClass *oc = data;
> -    CPUListState *s = user_data;
>      const char *typename = object_class_get_name(oc);
>      char *name;
>  
>      name = g_strndup(typename, strlen(typename) - 
> strlen(LM32_CPU_TYPE_SUFFIX));
> -    (*s->cpu_fprintf)(s->file, "  %s\n", name);
> +    qemu_printf("  %s\n", name);
>      g_free(name);
>  }
>  
>  
> -void lm32_cpu_list(FILE *f, fprintf_function cpu_fprintf)
> +void lm32_cpu_list(void)
>  {
> -    CPUListState s = {
> -        .file = f,
> -        .cpu_fprintf = cpu_fprintf,
> -    };
>      GSList *list;
>  
>      list = object_class_get_list_sorted(TYPE_LM32_CPU, false);
> -    (*cpu_fprintf)(f, "Available CPUs:\n");
> -    g_slist_foreach(list, lm32_cpu_list_entry, &s);
> +    qemu_printf("Available CPUs:\n");
> +    g_slist_foreach(list, lm32_cpu_list_entry, NULL);
>      g_slist_free(list);
>  }
>  
> diff --git a/target/lm32/cpu.h b/target/lm32/cpu.h
> index 66157eefe9..b8d539ead8 100644
> --- a/target/lm32/cpu.h
> +++ b/target/lm32/cpu.h
> @@ -243,7 +243,7 @@ static inline lm32_wp_t lm32_wp_type(uint32_t dc, int idx)
>     is returned if the signal was handled by the virtual CPU.  */
>  int cpu_lm32_signal_handler(int host_signum, void *pinfo,
>                            void *puc);
> -void lm32_cpu_list(FILE *f, fprintf_function cpu_fprintf);
> +void lm32_cpu_list(void);
>  void lm32_translate_init(void);
>  void cpu_lm32_set_phys_msb_ignore(CPULM32State *env, int value);
>  void QEMU_NORETURN raise_exception(CPULM32State *env, int index);
> diff --git a/target/m68k/cpu.h b/target/m68k/cpu.h
> index f154565117..9c1f0a2458 100644
> --- a/target/m68k/cpu.h
> +++ b/target/m68k/cpu.h
> @@ -499,7 +499,7 @@ static inline int m68k_feature(CPUM68KState *env, int 
> feature)
>      return (env->features & (1u << feature)) != 0;
>  }
>  
> -void m68k_cpu_list(FILE *f, fprintf_function cpu_fprintf);
> +void m68k_cpu_list(void);
>  
>  void register_m68k_insns (CPUM68KState *env);
>  
> diff --git a/target/m68k/helper.c b/target/m68k/helper.c
> index 3e26d337bf..bb64cf15c0 100644
> --- a/target/m68k/helper.c
> +++ b/target/m68k/helper.c
> @@ -22,9 +22,9 @@
>  #include "cpu.h"
>  #include "exec/exec-all.h"
>  #include "exec/gdbstub.h"
> -
>  #include "exec/helper-proto.h"
>  #include "fpu/softfloat.h"
> +#include "qemu/qemu-print.h"
>  
>  #define SIGNBIT (1u << 31)
>  
> @@ -49,28 +49,22 @@ static gint m68k_cpu_list_compare(gconstpointer a, 
> gconstpointer b)
>  static void m68k_cpu_list_entry(gpointer data, gpointer user_data)
>  {
>      ObjectClass *c = data;
> -    CPUListState *s = user_data;
>      const char *typename;
>      char *name;
>  
>      typename = object_class_get_name(c);
>      name = g_strndup(typename, strlen(typename) - strlen("-" TYPE_M68K_CPU));
> -    (*s->cpu_fprintf)(s->file, "%s\n",
> -                      name);
> +    qemu_printf("%s\n", name);
>      g_free(name);
>  }
>  
> -void m68k_cpu_list(FILE *f, fprintf_function cpu_fprintf)
> +void m68k_cpu_list(void)
>  {
> -    CPUListState s = {
> -        .file = f,
> -        .cpu_fprintf = cpu_fprintf,
> -    };
>      GSList *list;
>  
>      list = object_class_get_list(TYPE_M68K_CPU, false);
>      list = g_slist_sort(list, m68k_cpu_list_compare);
> -    g_slist_foreach(list, m68k_cpu_list_entry, &s);
> +    g_slist_foreach(list, m68k_cpu_list_entry, NULL);
>      g_slist_free(list);
>  }
>  
> diff --git a/target/mips/cpu.h b/target/mips/cpu.h
> index a10eeb0de3..1f41cf66d5 100644
> --- a/target/mips/cpu.h
> +++ b/target/mips/cpu.h
> @@ -1065,7 +1065,7 @@ static inline MIPSCPU *mips_env_get_cpu(CPUMIPSState 
> *env)
>  
>  #define ENV_OFFSET offsetof(MIPSCPU, env)
>  
> -void mips_cpu_list (FILE *f, fprintf_function cpu_fprintf);
> +void mips_cpu_list(void);
>  
>  #define cpu_signal_handler cpu_mips_signal_handler
>  #define cpu_list mips_cpu_list
> diff --git a/target/mips/translate.c b/target/mips/translate.c
> index 364bd6dc4f..d886a0c9b2 100644
> --- a/target/mips/translate.c
> +++ b/target/mips/translate.c
> @@ -38,6 +38,7 @@
>  #include "trace-tcg.h"
>  #include "exec/translator.h"
>  #include "exec/log.h"
> +#include "qemu/qemu-print.h"
>  
>  #define MIPS_DEBUG_DISAS 0
>  
> diff --git a/target/mips/translate_init.inc.c 
> b/target/mips/translate_init.inc.c
> index bf559aff08..1c2d017d36 100644
> --- a/target/mips/translate_init.inc.c
> +++ b/target/mips/translate_init.inc.c
> @@ -835,13 +835,12 @@ const mips_def_t mips_defs[] =
>  };
>  const int mips_defs_number = ARRAY_SIZE(mips_defs);
>  
> -void mips_cpu_list (FILE *f, fprintf_function cpu_fprintf)
> +void mips_cpu_list(void)
>  {
>      int i;
>  
>      for (i = 0; i < ARRAY_SIZE(mips_defs); i++) {
> -        (*cpu_fprintf)(f, "MIPS '%s'\n",
> -                       mips_defs[i].name);
> +        qemu_printf("MIPS '%s'\n", mips_defs[i].name);
>      }
>  }
>  
> diff --git a/target/openrisc/cpu.c b/target/openrisc/cpu.c
> index 541b2a66c7..d125236977 100644
> --- a/target/openrisc/cpu.c
> +++ b/target/openrisc/cpu.c
> @@ -19,6 +19,7 @@
>  
>  #include "qemu/osdep.h"
>  #include "qapi/error.h"
> +#include "qemu/qemu-print.h"
>  #include "cpu.h"
>  #include "qemu-common.h"
>  
> @@ -180,30 +181,24 @@ static gint openrisc_cpu_list_compare(gconstpointer a, 
> gconstpointer b)
>  static void openrisc_cpu_list_entry(gpointer data, gpointer user_data)
>  {
>      ObjectClass *oc = data;
> -    CPUListState *s = user_data;
>      const char *typename;
>      char *name;
>  
>      typename = object_class_get_name(oc);
>      name = g_strndup(typename,
>                       strlen(typename) - strlen("-" TYPE_OPENRISC_CPU));
> -    (*s->cpu_fprintf)(s->file, "  %s\n",
> -                      name);
> +    qemu_printf("  %s\n", name);
>      g_free(name);
>  }
>  
> -void cpu_openrisc_list(FILE *f, fprintf_function cpu_fprintf)
> +void cpu_openrisc_list(void)
>  {
> -    CPUListState s = {
> -        .file = f,
> -        .cpu_fprintf = cpu_fprintf,
> -    };
>      GSList *list;
>  
>      list = object_class_get_list(TYPE_OPENRISC_CPU, false);
>      list = g_slist_sort(list, openrisc_cpu_list_compare);
> -    (*cpu_fprintf)(f, "Available CPUs:\n");
> -    g_slist_foreach(list, openrisc_cpu_list_entry, &s);
> +    qemu_printf("Available CPUs:\n");
> +    g_slist_foreach(list, openrisc_cpu_list_entry, NULL);
>      g_slist_free(list);
>  }
>  
> diff --git a/target/openrisc/cpu.h b/target/openrisc/cpu.h
> index f1b31bc24a..9d2d49631e 100644
> --- a/target/openrisc/cpu.h
> +++ b/target/openrisc/cpu.h
> @@ -336,7 +336,7 @@ static inline OpenRISCCPU 
> *openrisc_env_get_cpu(CPUOpenRISCState *env)
>  
>  #define ENV_OFFSET offsetof(OpenRISCCPU, env)
>  
> -void cpu_openrisc_list(FILE *f, fprintf_function cpu_fprintf);
> +void cpu_openrisc_list(void);
>  void openrisc_cpu_do_interrupt(CPUState *cpu);
>  bool openrisc_cpu_exec_interrupt(CPUState *cpu, int int_req);
>  void openrisc_cpu_dump_state(CPUState *cpu, FILE *f,
> diff --git a/target/ppc/cpu.h b/target/ppc/cpu.h
> index 0707177584..382a323c61 100644
> --- a/target/ppc/cpu.h
> +++ b/target/ppc/cpu.h
> @@ -1308,7 +1308,7 @@ void ppc_store_ptcr(CPUPPCState *env, target_ulong 
> value);
>  #endif /* !defined(CONFIG_USER_ONLY) */
>  void ppc_store_msr (CPUPPCState *env, target_ulong value);
>  
> -void ppc_cpu_list (FILE *f, fprintf_function cpu_fprintf);
> +void ppc_cpu_list(void);
>  
>  /* Time-base and decrementer management */
>  #ifndef NO_CPU_IO_DEFS
> diff --git a/target/ppc/translate_init.inc.c b/target/ppc/translate_init.inc.c
> index 0bd555eb19..996356dd99 100644
> --- a/target/ppc/translate_init.inc.c
> +++ b/target/ppc/translate_init.inc.c
> @@ -28,6 +28,7 @@
>  #include "mmu-hash32.h"
>  #include "mmu-hash64.h"
>  #include "qemu/error-report.h"
> +#include "qemu/qemu-print.h"
>  #include "qapi/error.h"
>  #include "qapi/qmp/qnull.h"
>  #include "qapi/visitor.h"
> @@ -10215,7 +10216,6 @@ static gint ppc_cpu_list_compare(gconstpointer a, 
> gconstpointer b)
>  static void ppc_cpu_list_entry(gpointer data, gpointer user_data)
>  {
>      ObjectClass *oc = data;
> -    CPUListState *s = user_data;
>      PowerPCCPUClass *pcc = POWERPC_CPU_CLASS(oc);
>      DeviceClass *family = DEVICE_CLASS(ppc_cpu_get_family_class(pcc));
>      const char *typename = object_class_get_name(oc);
> @@ -10228,8 +10228,7 @@ static void ppc_cpu_list_entry(gpointer data, 
> gpointer user_data)
>  
>      name = g_strndup(typename,
>                       strlen(typename) - strlen(POWERPC_CPU_TYPE_SUFFIX));
> -    (*s->cpu_fprintf)(s->file, "PowerPC %-16s PVR %08x\n",
> -                      name, pcc->pvr);
> +    qemu_printf("PowerPC %-16s PVR %08x\n", name, pcc->pvr);
>      for (i = 0; ppc_cpu_aliases[i].alias != NULL; i++) {
>          PowerPCCPUAlias *alias = &ppc_cpu_aliases[i];
>          ObjectClass *alias_oc = ppc_cpu_class_by_name(alias->model);
> @@ -10242,33 +10241,28 @@ static void ppc_cpu_list_entry(gpointer data, 
> gpointer user_data)
>           * avoid printing the wrong alias here and use "preferred" instead
>           */
>          if (strcmp(alias->alias, family->desc) == 0) {
> -            (*s->cpu_fprintf)(s->file,
> -                              "PowerPC %-16s (alias for preferred %s CPU)\n",
> -                              alias->alias, family->desc);
> +            qemu_printf("PowerPC %-16s (alias for preferred %s CPU)\n",
> +                        alias->alias, family->desc);
>          } else {
> -            (*s->cpu_fprintf)(s->file, "PowerPC %-16s (alias for %s)\n",
> -                              alias->alias, name);
> +            qemu_printf("PowerPC %-16s (alias for %s)\n",
> +                        alias->alias, name);
>          }
>      }
>      g_free(name);
>  }
>  
> -void ppc_cpu_list(FILE *f, fprintf_function cpu_fprintf)
> +void ppc_cpu_list(void)
>  {
> -    CPUListState s = {
> -        .file = f,
> -        .cpu_fprintf = cpu_fprintf,
> -    };
>      GSList *list;
>  
>      list = object_class_get_list(TYPE_POWERPC_CPU, false);
>      list = g_slist_sort(list, ppc_cpu_list_compare);
> -    g_slist_foreach(list, ppc_cpu_list_entry, &s);
> +    g_slist_foreach(list, ppc_cpu_list_entry, NULL);
>      g_slist_free(list);
>  
>  #ifdef CONFIG_KVM
> -    cpu_fprintf(f, "\n");
> -    cpu_fprintf(f, "PowerPC %-16s\n", "host");
> +    qemu_printf("\n");
> +    qemu_printf("PowerPC %-16s\n", "host");
>  #endif
>  }
>  
> diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c
> index d61bce6d55..104e676ab0 100644
> --- a/target/riscv/cpu.c
> +++ b/target/riscv/cpu.c
> @@ -18,6 +18,7 @@
>   */
>  
>  #include "qemu/osdep.h"
> +#include "qemu/qemu-print.h"
>  #include "qemu/log.h"
>  #include "cpu.h"
>  #include "exec/exec-all.h"
> @@ -383,11 +384,6 @@ char *riscv_isa_string(RISCVCPU *cpu)
>      return isa_str;
>  }
>  
> -typedef struct RISCVCPUListState {
> -    fprintf_function cpu_fprintf;
> -    FILE *file;
> -} RISCVCPUListState;
> -
>  static gint riscv_cpu_list_compare(gconstpointer a, gconstpointer b)
>  {
>      ObjectClass *class_a = (ObjectClass *)a;
> @@ -401,24 +397,19 @@ static gint riscv_cpu_list_compare(gconstpointer a, 
> gconstpointer b)
>  
>  static void riscv_cpu_list_entry(gpointer data, gpointer user_data)
>  {
> -    RISCVCPUListState *s = user_data;
>      const char *typename = object_class_get_name(OBJECT_CLASS(data));
>      int len = strlen(typename) - strlen(RISCV_CPU_TYPE_SUFFIX);
>  
> -    (*s->cpu_fprintf)(s->file, "%.*s\n", len, typename);
> +    qemu_printf("%.*s\n", len, typename);
>  }
>  
> -void riscv_cpu_list(FILE *f, fprintf_function cpu_fprintf)
> +void riscv_cpu_list(void)
>  {
> -    RISCVCPUListState s = {
> -        .cpu_fprintf = cpu_fprintf,
> -        .file = f,
> -    };
>      GSList *list;
>  
>      list = object_class_get_list(TYPE_RISCV_CPU, false);
>      list = g_slist_sort(list, riscv_cpu_list_compare);
> -    g_slist_foreach(list, riscv_cpu_list_entry, &s);
> +    g_slist_foreach(list, riscv_cpu_list_entry, NULL);
>      g_slist_free(list);
>  }
>  
> diff --git a/target/riscv/cpu.h b/target/riscv/cpu.h
> index 20bce8742e..7d9f48973f 100644
> --- a/target/riscv/cpu.h
> +++ b/target/riscv/cpu.h
> @@ -264,7 +264,7 @@ void  riscv_cpu_do_unaligned_access(CPUState *cs, vaddr 
> addr,
>  int riscv_cpu_handle_mmu_fault(CPUState *cpu, vaddr address, int size,
>                                int rw, int mmu_idx);
>  char *riscv_isa_string(RISCVCPU *cpu);
> -void riscv_cpu_list(FILE *f, fprintf_function cpu_fprintf);
> +void riscv_cpu_list(void);
>  
>  #define cpu_signal_handler riscv_cpu_signal_handler
>  #define cpu_list riscv_cpu_list
> diff --git a/target/s390x/cpu.h b/target/s390x/cpu.h
> index cb6d77053a..d8990c405a 100644
> --- a/target/s390x/cpu.h
> +++ b/target/s390x/cpu.h
> @@ -753,7 +753,7 @@ static inline uint8_t s390_cpu_get_state(S390CPU *cpu)
>  
>  
>  /* cpu_models.c */
> -void s390_cpu_list(FILE *f, fprintf_function cpu_fprintf);
> +void s390_cpu_list(void);
>  #define cpu_list s390_cpu_list
>  void s390_set_qemu_cpu_model(uint16_t type, uint8_t gen, uint8_t ec_ga,
>                               const S390FeatInit feat_init);
> diff --git a/target/s390x/cpu_models.c b/target/s390x/cpu_models.c
> index eb125d4d0d..e5afa15512 100644
> --- a/target/s390x/cpu_models.c
> +++ b/target/s390x/cpu_models.c
> @@ -18,6 +18,7 @@
>  #include "qapi/error.h"
>  #include "qapi/visitor.h"
>  #include "qemu/error-report.h"
> +#include "qemu/qemu-print.h"
>  #include "qapi/qmp/qerror.h"
>  #include "qapi/qobject-input-visitor.h"
>  #include "qapi/qmp/qdict.h"
> @@ -308,7 +309,6 @@ const S390CPUDef *s390_find_cpu_def(uint16_t type, 
> uint8_t gen, uint8_t ec_ga,
>  
>  static void s390_print_cpu_model_list_entry(gpointer data, gpointer 
> user_data)
>  {
> -    CPUListState *s = user_data;
>      const S390CPUClass *scc = S390_CPU_CLASS((ObjectClass *)data);
>      char *name = g_strdup(object_class_get_name((ObjectClass *)data));
>      const char *details = "";
> @@ -321,8 +321,7 @@ static void s390_print_cpu_model_list_entry(gpointer 
> data, gpointer user_data)
>  
>      /* strip off the -s390x-cpu */
>      g_strrstr(name, "-" TYPE_S390_CPU)[0] = 0;
> -    (*s->cpu_fprintf)(s->file, "s390 %-15s %-35s %s\n", name, scc->desc,
> -                      details);
> +    qemu_printf("s390 %-15s %-35s %s\n", name, scc->desc, details);
>      g_free(name);
>  }
>  
> @@ -360,33 +359,29 @@ static gint s390_cpu_list_compare(gconstpointer a, 
> gconstpointer b)
>      return cc_a->is_static ? -1 : 1;
>  }
>  
> -void s390_cpu_list(FILE *f, fprintf_function print)
> +void s390_cpu_list(void)
>  {
> -    CPUListState s = {
> -        .file = f,
> -        .cpu_fprintf = print,
> -    };
>      S390FeatGroup group;
>      S390Feat feat;
>      GSList *list;
>  
>      list = object_class_get_list(TYPE_S390_CPU, false);
>      list = g_slist_sort(list, s390_cpu_list_compare);
> -    g_slist_foreach(list, s390_print_cpu_model_list_entry, &s);
> +    g_slist_foreach(list, s390_print_cpu_model_list_entry, NULL);
>      g_slist_free(list);
>  
> -    (*print)(f, "\nRecognized feature flags:\n");
> +    qemu_printf("\nRecognized feature flags:\n");
>      for (feat = 0; feat < S390_FEAT_MAX; feat++) {
>          const S390FeatDef *def = s390_feat_def(feat);
>  
> -        (*print)(f, "%-20s %-50s\n", def->name, def->desc);
> +        qemu_printf("%-20s %-50s\n", def->name, def->desc);
>      }
>  
> -    (*print)(f, "\nRecognized feature groups:\n");
> +    qemu_printf("\nRecognized feature groups:\n");
>      for (group = 0; group < S390_FEAT_GROUP_MAX; group++) {
>          const S390FeatGroupDef *def = s390_feat_group_def(group);
>  
> -        (*print)(f, "%-20s %-50s\n", def->name, def->desc);
> +        qemu_printf("%-20s %-50s\n", def->name, def->desc);
>      }
>  }
>  
> diff --git a/target/sh4/cpu.c b/target/sh4/cpu.c
> index b9f393b7c7..da2799082e 100644
> --- a/target/sh4/cpu.c
> +++ b/target/sh4/cpu.c
> @@ -21,6 +21,7 @@
>  
>  #include "qemu/osdep.h"
>  #include "qapi/error.h"
> +#include "qemu/qemu-print.h"
>  #include "cpu.h"
>  #include "qemu-common.h"
>  #include "migration/vmstate.h"
> @@ -79,30 +80,20 @@ static void superh_cpu_disas_set_info(CPUState *cpu, 
> disassemble_info *info)
>      info->print_insn = print_insn_sh;
>  }
>  
> -typedef struct SuperHCPUListState {
> -    fprintf_function cpu_fprintf;
> -    FILE *file;
> -} SuperHCPUListState;
> -
>  static void superh_cpu_list_entry(gpointer data, gpointer user_data)
>  {
> -    SuperHCPUListState *s = user_data;
>      const char *typename = object_class_get_name(OBJECT_CLASS(data));
>      int len = strlen(typename) - strlen(SUPERH_CPU_TYPE_SUFFIX);
>  
> -    (*s->cpu_fprintf)(s->file, "%.*s\n", len, typename);
> +    qemu_printf("%.*s\n", len, typename);
>  }
>  
> -void sh4_cpu_list(FILE *f, fprintf_function cpu_fprintf)
> +void sh4_cpu_list(void)
>  {
> -    SuperHCPUListState s = {
> -        .cpu_fprintf = cpu_fprintf,
> -        .file = f,
> -    };
>      GSList *list;
>  
>      list = object_class_get_list_sorted(TYPE_SUPERH_CPU, false);
> -    g_slist_foreach(list, superh_cpu_list_entry, &s);
> +    g_slist_foreach(list, superh_cpu_list_entry, NULL);
>      g_slist_free(list);
>  }
>  
> diff --git a/target/sh4/cpu.h b/target/sh4/cpu.h
> index 775b5743bf..3e43f0a1a5 100644
> --- a/target/sh4/cpu.h
> +++ b/target/sh4/cpu.h
> @@ -247,7 +247,7 @@ int cpu_sh4_signal_handler(int host_signum, void *pinfo,
>  int superh_cpu_handle_mmu_fault(CPUState *cpu, vaddr address, int size, int 
> rw,
>                                  int mmu_idx);
>  
> -void sh4_cpu_list(FILE *f, fprintf_function cpu_fprintf);
> +void sh4_cpu_list(void);
>  #if !defined(CONFIG_USER_ONLY)
>  void cpu_sh4_invalidate_tlb(CPUSH4State *s);
>  uint32_t cpu_sh4_read_mmaped_itlb_addr(CPUSH4State *s,
> diff --git a/target/sparc/cpu.c b/target/sparc/cpu.c
> index 4a4445bdf5..fd88a31806 100644
> --- a/target/sparc/cpu.c
> +++ b/target/sparc/cpu.c
> @@ -20,7 +20,7 @@
>  #include "qemu/osdep.h"
>  #include "qapi/error.h"
>  #include "cpu.h"
> -#include "qemu/error-report.h"
> +#include "qemu/qemu-print.h"
>  #include "exec/exec-all.h"
>  #include "hw/qdev-properties.h"
>  #include "qapi/visitor.h"
> @@ -556,47 +556,44 @@ static const char * const feature_name[] = {
>      "gl",
>  };
>  
> -static void print_features(FILE *f, fprintf_function cpu_fprintf,
> -                           uint32_t features, const char *prefix)
> +static void print_features(uint32_t features, const char *prefix)
>  {
>      unsigned int i;
>  
>      for (i = 0; i < ARRAY_SIZE(feature_name); i++) {
>          if (feature_name[i] && (features & (1 << i))) {
>              if (prefix) {
> -                (*cpu_fprintf)(f, "%s", prefix);
> +                qemu_printf("%s", prefix);
>              }
> -            (*cpu_fprintf)(f, "%s ", feature_name[i]);
> +            qemu_printf("%s ", feature_name[i]);
>          }
>      }
>  }
>  
> -void sparc_cpu_list(FILE *f, fprintf_function cpu_fprintf)
> +void sparc_cpu_list(void)
>  {
>      unsigned int i;
>  
>      for (i = 0; i < ARRAY_SIZE(sparc_defs); i++) {
> -        (*cpu_fprintf)(f, "Sparc %16s IU " TARGET_FMT_lx
> -                       " FPU %08x MMU %08x NWINS %d ",
> -                       sparc_defs[i].name,
> -                       sparc_defs[i].iu_version,
> -                       sparc_defs[i].fpu_version,
> -                       sparc_defs[i].mmu_version,
> -                       sparc_defs[i].nwindows);
> -        print_features(f, cpu_fprintf, CPU_DEFAULT_FEATURES &
> -                       ~sparc_defs[i].features, "-");
> -        print_features(f, cpu_fprintf, ~CPU_DEFAULT_FEATURES &
> -                       sparc_defs[i].features, "+");
> -        (*cpu_fprintf)(f, "\n");
> +        qemu_printf("Sparc %16s IU " TARGET_FMT_lx
> +                    " FPU %08x MMU %08x NWINS %d ",
> +                    sparc_defs[i].name,
> +                    sparc_defs[i].iu_version,
> +                    sparc_defs[i].fpu_version,
> +                    sparc_defs[i].mmu_version,
> +                    sparc_defs[i].nwindows);
> +        print_features(CPU_DEFAULT_FEATURES & ~sparc_defs[i].features, "-");
> +        print_features(~CPU_DEFAULT_FEATURES & sparc_defs[i].features, "+");
> +        qemu_printf("\n");
>      }
> -    (*cpu_fprintf)(f, "Default CPU feature flags (use '-' to remove): ");
> -    print_features(f, cpu_fprintf, CPU_DEFAULT_FEATURES, NULL);
> -    (*cpu_fprintf)(f, "\n");
> -    (*cpu_fprintf)(f, "Available CPU feature flags (use '+' to add): ");
> -    print_features(f, cpu_fprintf, ~CPU_DEFAULT_FEATURES, NULL);
> -    (*cpu_fprintf)(f, "\n");
> -    (*cpu_fprintf)(f, "Numerical features (use '=' to set): iu_version "
> -                   "fpu_version mmu_version nwindows\n");
> +    qemu_printf("Default CPU feature flags (use '-' to remove): ");
> +    print_features(CPU_DEFAULT_FEATURES, NULL);
> +    qemu_printf("\n");
> +    qemu_printf("Available CPU feature flags (use '+' to add): ");
> +    print_features(~CPU_DEFAULT_FEATURES, NULL);
> +    qemu_printf("\n");
> +    qemu_printf("Numerical features (use '=' to set): iu_version "
> +                "fpu_version mmu_version nwindows\n");
>  }
>  
>  static void cpu_print_cc(FILE *f, fprintf_function cpu_fprintf,
> diff --git a/target/sparc/cpu.h b/target/sparc/cpu.h
> index 4972ebcfd4..ab9fa3ddbf 100644
> --- a/target/sparc/cpu.h
> +++ b/target/sparc/cpu.h
> @@ -578,7 +578,7 @@ void cpu_raise_exception_ra(CPUSPARCState *, int, 
> uintptr_t) QEMU_NORETURN;
>  #ifndef NO_CPU_IO_DEFS
>  /* cpu_init.c */
>  void cpu_sparc_set_id(CPUSPARCState *env, unsigned int cpu);
> -void sparc_cpu_list(FILE *f, fprintf_function cpu_fprintf);
> +void sparc_cpu_list(void);
>  /* mmu_helper.c */
>  int sparc_cpu_handle_mmu_fault(CPUState *cpu, vaddr address, int size, int 
> rw,
>                                 int mmu_idx);
> diff --git a/target/tricore/cpu.h b/target/tricore/cpu.h
> index 00e69dc154..43d577ce8e 100644
> --- a/target/tricore/cpu.h
> +++ b/target/tricore/cpu.h
> @@ -375,7 +375,7 @@ void fpu_set_state(CPUTriCoreState *env);
>  
>  #define MMU_USER_IDX 2
>  
> -void tricore_cpu_list(FILE *f, fprintf_function cpu_fprintf);
> +void tricore_cpu_list(void);
>  
>  #define cpu_signal_handler cpu_tricore_signal_handler
>  #define cpu_list tricore_cpu_list
> diff --git a/target/tricore/helper.c b/target/tricore/helper.c
> index 0769046993..78ee87c9ea 100644
> --- a/target/tricore/helper.c
> +++ b/target/tricore/helper.c
> @@ -20,6 +20,7 @@
>  #include "cpu.h"
>  #include "exec/exec-all.h"
>  #include "fpu/softfloat.h"
> +#include "qemu/qemu-print.h"
>  
>  enum {
>      TLBRET_DIRTY = -4,
> @@ -82,28 +83,22 @@ int cpu_tricore_handle_mmu_fault(CPUState *cs, 
> target_ulong address,
>  static void tricore_cpu_list_entry(gpointer data, gpointer user_data)
>  {
>      ObjectClass *oc = data;
> -    CPUListState *s = user_data;
>      const char *typename;
>      char *name;
>  
>      typename = object_class_get_name(oc);
>      name = g_strndup(typename, strlen(typename) - strlen("-" 
> TYPE_TRICORE_CPU));
> -    (*s->cpu_fprintf)(s->file, "  %s\n",
> -                      name);
> +    qemu_printf("  %s\n", name);
>      g_free(name);
>  }
>  
> -void tricore_cpu_list(FILE *f, fprintf_function cpu_fprintf)
> +void tricore_cpu_list(void)
>  {
> -    CPUListState s = {
> -        .file = f,
> -        .cpu_fprintf = cpu_fprintf,
> -    };
>      GSList *list;
>  
>      list = object_class_get_list_sorted(TYPE_TRICORE_CPU, false);
> -    (*cpu_fprintf)(f, "Available CPUs:\n");
> -    g_slist_foreach(list, tricore_cpu_list_entry, &s);
> +    qemu_printf("Available CPUs:\n");
> +    g_slist_foreach(list, tricore_cpu_list_entry, NULL);
>      g_slist_free(list);
>  }
>  
> diff --git a/target/xtensa/cpu.h b/target/xtensa/cpu.h
> index 4d8152682f..4aaf1f7bb2 100644
> --- a/target/xtensa/cpu.h
> +++ b/target/xtensa/cpu.h
> @@ -600,7 +600,7 @@ void xtensa_irq_init(CPUXtensaState *env);
>  qemu_irq *xtensa_get_extints(CPUXtensaState *env);
>  qemu_irq xtensa_get_runstall(CPUXtensaState *env);
>  int cpu_xtensa_signal_handler(int host_signum, void *pinfo, void *puc);
> -void xtensa_cpu_list(FILE *f, fprintf_function cpu_fprintf);
> +void xtensa_cpu_list(void);
>  void xtensa_sync_window_from_phys(CPUXtensaState *env);
>  void xtensa_sync_phys_from_window(CPUXtensaState *env);
>  void xtensa_rotate_window(CPUXtensaState *env, uint32_t delta);
> diff --git a/target/xtensa/helper.c b/target/xtensa/helper.c
> index f4867a9b56..5f37f378a3 100644
> --- a/target/xtensa/helper.c
> +++ b/target/xtensa/helper.c
> @@ -31,6 +31,7 @@
>  #include "exec/gdbstub.h"
>  #include "exec/helper-proto.h"
>  #include "qemu/error-report.h"
> +#include "qemu/qemu-print.h"
>  #include "qemu/host-utils.h"
>  
>  static struct XtensaConfigList *xtensa_cores;
> @@ -228,12 +229,12 @@ void xtensa_breakpoint_handler(CPUState *cs)
>      }
>  }
>  
> -void xtensa_cpu_list(FILE *f, fprintf_function cpu_fprintf)
> +void xtensa_cpu_list(void)
>  {
>      XtensaConfigList *core = xtensa_cores;
> -    cpu_fprintf(f, "Available CPUs:\n");
> +    qemu_printf("Available CPUs:\n");
>      for (; core; core = core->next) {
> -        cpu_fprintf(f, "  %s\n", core->config->name);
> +        qemu_printf("  %s\n", core->config->name);
>      }
>  }
>  
> diff --git a/vl.c b/vl.c
> index fdfa1c7453..5d412e4aa2 100644
> --- a/vl.c
> +++ b/vl.c
> @@ -4051,7 +4051,7 @@ int main(int argc, char **argv, char **envp)
>      }
>  
>      if (cpu_model && is_help_option(cpu_model)) {
> -        list_cpus(stdout, &fprintf, cpu_model);
> +        list_cpus(cpu_model);
>          exit(0);
>      }
>  
> -- 
> 2.17.2
> 
--
Dr. David Alan Gilbert / dgilb...@redhat.com / Manchester, UK

Reply via email to