+2013-09-06  Andrew Burgess  <aburgess@broadcom.com>
+
+       * cli/cli-interp.c (_initialize_cli_interp): Add a
+       command_loop_proc to interp_procs.
+       * event-top.c (cli_command_loop): Change signature to match
+       interp_command_loop_ftype.
+       * event-top.h (cli_command_loop): Same.
+       * interps.c (interp_new): Require every interpreter to have a
+       command_loop_proc.
+       (current_interp_command_loop): Just call the command_loop_proc on
+       the current interpreter.
+       * tui/tui-interp.c (_initialize_tui_interp): Add a
+       command_loop_proc to interp_procs.
+
 2013-09-06  Ricard Wanderlof  <ricardw@axis.com>
 
        * cris-tdep.c (cris_gdbarch_init): Add call to
 
     cli_interpreter_suspend,   /* suspend_proc */
     cli_interpreter_exec,      /* exec_proc */
     cli_interpreter_display_prompt_p,  /* prompt_proc_p */
-    cli_ui_out                 /* ui_out_proc */
+    cli_ui_out,                        /* ui_out_proc */
+    NULL,                       /* set_logging_proc */
+    cli_command_loop            /* command_loop_proc */
   };
   struct interp *cli_interp;
 
 
 }
 
 /* Initialize all the necessary variables, start the event loop,
-   register readline, and stdin, start the loop.  */
+   register readline, and stdin, start the loop.  The DATA is the
+   interpreter data cookie, ignored for now.  */
+
 void
-cli_command_loop (void)
+cli_command_loop (void *data)
 {
   display_gdb_prompt (0);
 
 
 extern int input_fd;
 extern void (*after_char_processing_hook) (void);
 
-extern void cli_command_loop (void);
+extern void cli_command_loop (void *);
 
 #endif
 
   new_interp->procs = procs;
   new_interp->inited = 0;
 
+  /* Check for required procs.  */
+  gdb_assert (procs->command_loop_proc != NULL);
+
   return new_interp;
 }
 
 void
 current_interp_command_loop (void)
 {
-  /* Somewhat messy.  For the moment prop up all the old ways of
-     selecting the command loop.  */
-  if (current_interpreter != NULL
-      && current_interpreter->procs->command_loop_proc != NULL)
-    current_interpreter->procs->command_loop_proc (current_interpreter->data);
-  else
-    cli_command_loop ();
+  gdb_assert (current_interpreter != NULL);
+
+  current_interpreter->procs->command_loop_proc (current_interpreter->data);
 }
 
 int
 
     tui_exec,
     tui_display_prompt_p,
     tui_ui_out,
+    NULL,
+    cli_command_loop
   };
   struct interp *tui_interp;