else if (call_command_hook) call_command_hook (c, arg, from_tty & caution);
else if (deprecated_call_command_hook) deprecated_call_command_hook (c, arg, from_tty & caution);
execute_command (char *p, int from_tty){  struct cmd_list_element *c;  enum language flang;  static int warned = 0;  char *line;    free_all_values ();  /* Force cleanup of any alloca areas if using C alloca instead of     a builtin alloca.  */  alloca (0);  /* This can happen when command_line_input hits end of file.  */  if (p == NULL)    return;  serial_log_command (p);  while (*p == ' ' || *p == '\t')    p++;  if (*p)    {      char *arg;      line = p;      c = lookup_cmd (&p, cmdlist, "", 0, 1);      /* If the target is running, we allow only a limited set of         commands. */      if (event_loop_p && target_can_async_p () && target_executing)	if (strcmp (c->name, "help") != 0	    && strcmp (c->name, "pwd") != 0	    && strcmp (c->name, "show") != 0	    && strcmp (c->name, "stop") != 0)	  error ("Cannot execute this command while the target is running.");      /* Pass null arg rather than an empty one.  */      arg = *p ? p : 0;      /* FIXME: cagney/2002-02-02: The c->type test is pretty dodgy         while the is_complete_command(cfunc) test is just plain         bogus.  They should both be replaced by a test of the form         c->strip_trailing_white_space_p.  */      /* NOTE: cagney/2002-02-02: The function.cfunc in the below         can't be replaced with func.  This is because it is the         cfunc, and not the func, that has the value that the         is_complete_command hack is testing for.  */      /* Clear off trailing whitespace, except for set and complete         command.  */      if (arg	  && c->type != set_cmd	  && !is_complete_command (c))	{	  p = arg + strlen (arg) - 1;	  while (p >= arg && (*p == ' ' || *p == '\t'))	    p--;	  *(p + 1) = '\0';	}      /* If this command has been pre-hooked, run the hook first. */      execute_cmd_pre_hook (c);      if (c->flags & DEPRECATED_WARN_USER)	deprecated_cmd_warning (&line);      if (c->class == class_user)	execute_user_command (c, arg);      else if (c->type == set_cmd || c->type == show_cmd)	do_setshow_command (arg, from_tty & caution, c);      else if (!cmd_func_p (c))	error ("That is not a command, just a help topic.");      else if (call_command_hook)	call_command_hook (c, arg, from_tty & caution);      else	cmd_func (c, arg, from_tty & caution);             /* If this command has been post-hooked, run the hook last. */      execute_cmd_post_hook (c);    }  /* Tell the user if the language has changed (except first time).  */  if (current_language != expected_language)    {      if (language_mode == language_mode_auto)	{	  language_info (1);	/* Print what changed.  */	}      warned = 0;    }  /* Warn the user if the working language does not match the     language of the current frame.  Only warn the user if we are     actually running the program, i.e. there is a stack. */  /* FIXME:  This should be cacheing the frame and only running when     the frame changes.  */  if (target_has_stack)    {      flang = get_frame_language ();      if (!warned	  && flang != language_unknown	  && flang != current_language->la_language)	{	  printf_filtered ("%s\n", lang_frame_mismatch_warn);	  warned = 1;	}    }}