⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 inflow.c

📁 早期freebsd实现
💻 C
📖 第 1 页 / 共 2 页
字号:
#endif#ifdef HAVE_TERMIO  sg_ours.c_lflag |= ICANON;#else /* not HAVE_TERMIO */  sg_ours.sg_flags &= ~RAW & ~CBREAK;#endif /* not HAVE_TERMIO */  result = result;	/* lint */#endif}/* ARGSUSED */voidterm_info (arg, from_tty)     char *arg;     int from_tty;{  target_terminal_info (arg, from_tty);}/* ARGSUSED */voidchild_terminal_info (args, from_tty)     char *args;     int from_tty;{  register int i;  if (!gdb_has_a_terminal) {    printf_filtered ("This GDB does not control a terminal.\n");    return;  }#if !defined(__GO32__)#ifdef TIOCGPGRP  printf_filtered ("Inferior's terminal status (currently saved by GDB):\n");  printf_filtered ("owner pgrp = %d, fcntl flags = 0x%x.\n",	  pgrp_inferior, tflags_inferior);#endif /* TIOCGPGRP */#ifdef HAVE_TERMIO  printf_filtered ("c_iflag = 0x%x, c_oflag = 0x%x,\n",	  sg_inferior.c_iflag, sg_inferior.c_oflag);  printf_filtered ("c_cflag = 0x%x, c_lflag = 0x%x, c_line = 0x%x.\n",	  sg_inferior.c_cflag, sg_inferior.c_lflag, sg_inferior.c_line);  printf_filtered ("c_cc: ");  for (i = 0; (i < NCC); i += 1)    printf_filtered ("0x%x ", sg_inferior.c_cc[i]);  printf_filtered ("\n");#else /* not HAVE_TERMIO */  printf_filtered ("sgttyb.sg_flags = 0x%x.\n", sg_inferior.sg_flags);#endif /* not HAVE_TERMIO */#if defined(TIOCGETC) && !defined(TIOCGETC_BROKEN)  printf_filtered ("tchars: ");  for (i = 0; i < (int)sizeof (struct tchars); i++)    printf_filtered ("0x%x ", ((unsigned char *)&tc_inferior)[i]);  printf_filtered ("\n");#endif#if defined(TIOCGLTC) && !defined(TIOCGLTC_BROKEN)  printf_filtered ("ltchars: ");  for (i = 0; i < (int)sizeof (struct ltchars); i++)    printf_filtered ("0x%x ", ((unsigned char *)&ltc_inferior)[i]);  printf_filtered ("\n");#endif  #ifdef TIOCLGET  printf_filtered ("lmode:  0x%x\n", lmode_inferior);#endif#else  printf_filtered("This is a DOS machine; there is no terminal state\n");#endif}/* NEW_TTY_PREFORK is called before forking a new child process,   so we can record the state of ttys in the child to be formed.   TTYNAME is null if we are to share the terminal with gdb;   or points to a string containing the name of the desired tty.   NEW_TTY is called in new child processes under Unix, which will   become debugger target processes.  This actually switches to   the terminal specified in the NEW_TTY_PREFORK call.  */voidnew_tty_prefork (ttyname)     char *ttyname;{  /* Save the name for later, for determining whether we and the child     are sharing a tty.  */  inferior_thisrun_terminal = ttyname;}voidnew_tty (){  register int tty;  void (*osigttou) ();  if (inferior_thisrun_terminal == 0)    return;#if !defined(__GO32__)#ifdef TIOCNOTTY  /* Disconnect the child process from our controlling terminal.  On some     systems (SVR4 for example), this may cause a SIGTTOU, so temporarily     ignore SIGTTOU. */  tty = open("/dev/tty", O_RDWR);  if (tty > 0)    {      osigttou = (void (*)()) signal(SIGTTOU, SIG_IGN);      ioctl(tty, TIOCNOTTY, 0);      close(tty);      signal(SIGTTOU, osigttou);    }#endif  /* Now open the specified new terminal.  */#ifdef USE_O_NOCTTY  tty = open(inferior_thisrun_terminal, O_RDWR | O_NOCTTY);#else  tty = open(inferior_thisrun_terminal, O_RDWR);#endif  if (tty == -1)    {      print_sys_errmsg (inferior_thisrun_terminal, errno);      _exit(1);    }  /* Avoid use of dup2; doesn't exist on all systems.  */  if (tty != 0)    { close (0); dup (tty); }  if (tty != 1)    { close (1); dup (tty); }  if (tty != 2)    { close (2); dup (tty); }  if (tty > 2)    close(tty);#endif /* !go32*/o}/* Kill the inferior process.  Make us have no inferior.  *//* ARGSUSED */static voidkill_command (arg, from_tty)     char *arg;     int from_tty;{  if (inferior_pid == 0)    error ("The program is not being run.");  if (!query ("Kill the inferior process? "))    error ("Not confirmed.");  target_kill ();  /* Killing off the inferior can leave us with a core file.  If so,     print the state we are left in.  */  if (target_has_stack) {    printf_filtered ("In %s,\n", current_target->to_longname);    if (selected_frame == NULL)      fputs_filtered ("No selected stack frame.\n", stdout);    else      print_stack_frame (selected_frame, selected_frame_level, 1);  }}/* The inferior process has died.  Long live the inferior!  */voidgeneric_mourn_inferior (){  inferior_pid = 0;  attach_flag = 0;  mark_breakpoints_out ();  registers_changed ();#ifdef CLEAR_DEFERRED_STORES  /* Delete any pending stores to the inferior... */  CLEAR_DEFERRED_STORES;#endif  reopen_exec_file ();  if (target_has_stack) {    set_current_frame ( create_new_frame (read_register (FP_REGNUM),					  read_pc ()));    select_frame (get_current_frame (), 0);  } else {    set_current_frame (0);    select_frame ((FRAME) 0, -1);  }  /* It is confusing to the user for ignore counts to stick around     from previous runs of the inferior.  So clear them.  */  breakpoint_clear_ignore_counts ();}#if 0 /* This function is just for testing, and on some systems (Sony NewsOS   3.2) <sys/user.h> also includes <sys/time.h> which leads to errors   (since on this system at least sys/time.h is not protected against   multiple inclusion).  *//* ARGSUSED */static voidtry_writing_regs_command (arg, from_tty)     char *arg;     int from_tty;{  register int i;  register int value;  if (inferior_pid == 0)    error ("There is no inferior process now.");  /* A Sun 3/50 or 3/60 (at least) running SunOS 4.0.3 will have a     kernel panic if we try to write past the end of the user area.     Presumably Sun will fix this bug (it has been reported), but it     is tacky to crash the system, so at least on SunOS4 we need to     stop writing when we hit the end of the user area.  */  for (i = 0; i < sizeof (struct user); i += 2)    {      QUIT;      errno = 0;      value = call_ptrace (3, inferior_pid, (PTRACE_ARG3_TYPE) i, 0);      call_ptrace (6, inferior_pid, (PTRACE_ARG3_TYPE) i, value);      if (errno == 0)	{	  printf (" Succeeded with address 0x%x; value 0x%x (%d).\n",		  i, value, value);	}      else if ((i & 0377) == 0)	printf (" Failed at 0x%x.\n", i);    }}#endifvoid_initialize_inflow (){  int result;  add_info ("terminal", term_info,	   "Print inferior's saved terminal status.");#if 0  add_com ("try-writing-regs", class_obscure, try_writing_regs_command,	   "Try writing all locations in inferior's system block.\n\Report which ones can be written.");#endif  add_com ("kill", class_run, kill_command,	   "Kill execution of program being debugged.");  inferior_pid = 0;  /* Get all the current tty settings (including whether we have a tty at     all!).  */#if !defined(__GO32__)  tflags_ours = fcntl (0, F_GETFL, 0);  result = ioctl (0, TIOCGETP, &sg_ours);  if (result == 0) {    gdb_has_a_terminal = 1;    /* Get the rest of the tty settings, then... */#if defined(TIOCGETC) && !defined(TIOCGETC_BROKEN)    ioctl (0, TIOCGETC, &tc_ours);#endif#if defined(TIOCGLTC) && !defined(TIOCGLTC_BROKEN)    ioctl (0, TIOCGLTC, &ltc_ours);#endif#ifdef TIOCLGET    result = ioctl (0, TIOCLGET, &lmode_ours);    lmode_ours_valid = (result == 0);#endif#ifdef TIOCGPGRP    ioctl (0, TIOCGPGRP, &pgrp_ours);#endif /* TIOCGPGRP */  } else {    gdb_has_a_terminal = 0;  }#else  gdb_has_a_terminal = 0;#endif  terminal_is_ours = 1;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -