亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? remote-eb.c

?? 早期freebsd實現(xiàn)
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* Remote debugging interface for AMD 29000 EBMON on IBM PC, for GDB.   Copyright 1990, 1991, 1992 Free Software Foundation, Inc.   Contributed by Cygnus Support.  Written by Jim Kingdon for Cygnus.This file is part of GDB.This program is free software; you can redistribute it and/or modifyit under the terms of the GNU General Public License as published bythe Free Software Foundation; either version 2 of the License, or(at your option) any later version.This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See theGNU General Public License for more details.You should have received a copy of the GNU General Public Licensealong with this program; if not, write to the Free SoftwareFoundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  *//* This is like remote.c but is for an esoteric situation--   having a 29k board in a PC hooked up to a unix machine with   a serial line, and running ctty com1 on the PC, through which   the unix machine can run ebmon.  Not to mention that the PC   has PC/NFS, so it can access the same executables that gdb can,   over the net in real time.  */#define	 TM_FILE_OVERRIDE#include "defs.h"#include <string.h>#include "tm-29k.h"#include "inferior.h"#include "wait.h"#include "value.h"#include <ctype.h>#include <fcntl.h>#include <signal.h>#include <errno.h>#include "terminal.h"#include "target.h"#include "gdbcore.h"extern struct target_ops eb_ops;		/* Forward declaration */static void eb_close();#define LOG_FILE "eb.log"#if defined (LOG_FILE)FILE *log_file;#endifstatic int timeout = 24;/* Descriptor for I/O to remote machine.  Initialize it to -1 so that   eb_open knows that we don't have a file open when the program   starts.  */int eb_desc = -1;/* stream which is fdopen'd from eb_desc.  Only valid when   eb_desc != -1.  */FILE *eb_stream;/* Read a character from the remote system, doing all the fancy   timeout stuff.  */static intreadchar (){  char buf;  buf = '\0';#ifdef HAVE_TERMIO  /* termio does the timeout for us.  */  read (eb_desc, &buf, 1);#else  alarm (timeout);  if (read (eb_desc, &buf, 1) < 0)    {      if (errno == EINTR)	error ("Timeout reading from remote system.");      else	perror_with_name ("remote");    }  alarm (0);#endif  if (buf == '\0')    error ("Timeout reading from remote system.");#if defined (LOG_FILE)  putc (buf & 0x7f, log_file);#endif  return buf & 0x7f;}/* Keep discarding input from the remote system, until STRING is found.    Let the user break out immediately.  */static voidexpect (string)     char *string;{  char *p = string;  immediate_quit = 1;  while (1)    {      if (readchar() == *p)	{	  p++;	  if (*p == '\0')	    {	      immediate_quit = 0;	      return;	    }	}      else	p = string;    }}/* Keep discarding input until we see the ebmon prompt.   The convention for dealing with the prompt is that you   o give your command   o *then* wait for the prompt.   Thus the last thing that a procedure does with the serial line   will be an expect_prompt().  Exception:  eb_resume does not   wait for the prompt, because the terminal is being handed over   to the inferior.  However, the next thing which happens after that   is a eb_wait which does wait for the prompt.   Note that this includes abnormal exit, e.g. error().  This is   necessary to prevent getting into states from which we can't   recover.  */static voidexpect_prompt (){#if defined (LOG_FILE)  /* This is a convenient place to do this.  The idea is to do it often     enough that we never lose much data if we terminate abnormally.  */  fflush (log_file);#endif  expect ("\n# ");}/* Get a hex digit from the remote system & return its value.   If ignore_space is nonzero, ignore spaces (not newline, tab, etc).  */static intget_hex_digit (ignore_space)     int ignore_space;{  int ch;  while (1)    {      ch = readchar ();      if (ch >= '0' && ch <= '9')	return ch - '0';      else if (ch >= 'A' && ch <= 'F')	return ch - 'A' + 10;      else if (ch >= 'a' && ch <= 'f')	return ch - 'a' + 10;      else if (ch == ' ' && ignore_space)	;      else	{	  expect_prompt ();	  error ("Invalid hex digit from remote system.");	}    }}/* Get a byte from eb_desc and put it in *BYT.  Accept any number   leading spaces.  */static voidget_hex_byte (byt)     char *byt;{  int val;  val = get_hex_digit (1) << 4;  val |= get_hex_digit (0);  *byt = val;}/* Get N 32-bit words from remote, each preceded by a space,   and put them in registers starting at REGNO.  */static voidget_hex_regs (n, regno)     int n;     int regno;{  long val;  int i;  for (i = 0; i < n; i++)    {      int j;            val = 0;      for (j = 0; j < 8; j++)	val = (val << 4) + get_hex_digit (j == 0);      supply_register (regno++, &val);    }}/* Called when SIGALRM signal sent due to alarm() timeout.  */#ifndef HAVE_TERMIO#ifndef __STDC__#define volatile /**/#endifvolatile int n_alarms;voideb_timer (){#if 0  if (kiodebug)    printf ("eb_timer called\n");#endif  n_alarms++;}#endif/* malloc'd name of the program on the remote system.  */static char *prog_name = NULL;/* Nonzero if we have loaded the file ("yc") and not yet issued a "gi"   command.  "gi" is supposed to happen exactly once for each "yc".  */static int need_gi = 0;/* Number of SIGTRAPs we need to simulate.  That is, the next   NEED_ARTIFICIAL_TRAP calls to eb_wait should just return   SIGTRAP without actually waiting for anything.  */static int need_artificial_trap = 0;/* This is called not only when we first attach, but also when the   user types "run" after having attached.  */static voideb_create_inferior (execfile, args, env)     char *execfile;     char *args;     char **env;{  int entry_pt;  if (args && *args)    error ("Can't pass arguments to remote EBMON process");  if (execfile == 0 || exec_bfd == 0)    error ("No exec file specified");  entry_pt = (int) bfd_get_start_address (exec_bfd);#ifdef CREATE_INFERIOR_HOOK  CREATE_INFERIOR_HOOK (0);		/* No process-ID */#endif    {    /* OK, now read in the file.  Y=read, C=COFF, D=no symbols       0=start address, %s=filename.  */    fprintf (eb_stream, "YC D,0:%s", prog_name);    if (args != NULL)	fprintf(eb_stream, " %s", args);    fprintf (eb_stream, "\n");    fflush (eb_stream);    expect_prompt ();    need_gi = 1;  }/* The "process" (board) is already stopped awaiting our commands, and   the program is already downloaded.  We just set its PC and go.  */  clear_proceed_status ();  /* Tell wait_for_inferior that we've started a new process.  */  init_wait_for_inferior ();  /* Set up the "saved terminal modes" of the inferior     based on what modes we are starting it with.  */  target_terminal_init ();  /* Install inferior's terminal modes.  */  target_terminal_inferior ();  /* insert_step_breakpoint ();  FIXME, do we need this?  */  proceed ((CORE_ADDR)entry_pt, -1, 0);		/* Let 'er rip... */}/* Translate baud rates from integers to damn B_codes.  Unix should   have outgrown this crap years ago, but even POSIX wouldn't buck it.  */#ifndef B19200#define B19200 EXTA#endif#ifndef B38400#define B38400 EXTB#endifstruct {int rate, damn_b;} baudtab[] = {	{0, B0},	{50, B50},	{75, B75},	{110, B110},	{134, B134},	{150, B150},	{200, B200},	{300, B300},	{600, B600},	{1200, B1200},	{1800, B1800},	{2400, B2400},	{4800, B4800},	{9600, B9600},	{19200, B19200},	{38400, B38400},	{-1, -1},};int damn_b (rate)     int rate;{  int i;  for (i = 0; baudtab[i].rate != -1; i++)    if (rate == baudtab[i].rate) return baudtab[i].damn_b;  return B38400;	/* Random */}/* Open a connection to a remote debugger.   NAME is the filename used for communication, then a space,   then the name of the program as we should name it to EBMON.  */static int baudrate = 9600;static char *dev_name;voideb_open (name, from_tty)     char *name;     int from_tty;{  TERMINAL sg;  char *p;  target_preopen (from_tty);    /* Find the first whitespace character, it separates dev_name from     prog_name.  */  if (name == 0)    goto erroid;  for (p = name;       *p != '\0' && !isspace (*p); p++)    ;  if (*p == '\0')erroid:    error ("\Please include the name of the device for the serial port,\n\the baud rate, and the name of the program to run on the remote system.");  dev_name = alloca (p - name + 1);  strncpy (dev_name, name, p - name);  dev_name[p - name] = '\0';  /* Skip over the whitespace after dev_name */  for (; isspace (*p); p++)    /*EMPTY*/;    if (1 != sscanf (p, "%d ", &baudrate))    goto erroid;  /* Skip the number and then the spaces */  for (; isdigit (*p); p++)    /*EMPTY*/;  for (; isspace (*p); p++)    /*EMPTY*/;    if (prog_name != NULL)    free (prog_name);  prog_name = savestring (p, strlen (p));  eb_close (0);  eb_desc = open (dev_name, O_RDWR);  if (eb_desc < 0)    perror_with_name (dev_name);  ioctl (eb_desc, TIOCGETP, &sg);#ifdef HAVE_TERMIO  sg.c_cc[VMIN] = 0;		/* read with timeout.  */  sg.c_cc[VTIME] = timeout * 10;  sg.c_lflag &= ~(ICANON | ECHO);  sg.c_cflag = (sg.c_cflag & ~CBAUD) | damn_b (baudrate);#else  sg.sg_ispeed = damn_b (baudrate);  sg.sg_ospeed = damn_b (baudrate);  sg.sg_flags |= RAW | ANYP;  sg.sg_flags &= ~ECHO;#endif  ioctl (eb_desc, TIOCSETP, &sg);  eb_stream = fdopen (eb_desc, "r+");  push_target (&eb_ops);  if (from_tty)    printf ("Remote %s debugging %s using %s\n", target_shortname,	    prog_name, dev_name);#ifndef HAVE_TERMIO#ifndef NO_SIGINTERRUPT  /* Cause SIGALRM's to make reads fail with EINTR instead of resuming     the read.  */  if (siginterrupt (SIGALRM, 1) != 0)    perror ("eb_open: error in siginterrupt");#endif  /* Set up read timeout timer.  */  if ((void (*)) signal (SIGALRM, eb_timer) == (void (*)) -1)    perror ("eb_open: error in signal");#endif#if defined (LOG_FILE)  log_file = fopen (LOG_FILE, "w");  if (log_file == NULL)    perror_with_name (LOG_FILE);#endif  /* Hello?  Are you there?  */  write (eb_desc, "\n", 1);    expect_prompt ();}/* Close out all files and local state before this target loses control. */static voideb_close (quitting)     int quitting;{  /* Due to a bug in Unix, fclose closes not only the stdio stream,     but also the file descriptor.  So we don't actually close     eb_desc.  */  if (eb_stream)    fclose (eb_stream);	/* This also closes eb_desc */  if (eb_desc >= 0)    /* close (eb_desc); */  /* Do not try to close eb_desc again, later in the program.  */  eb_stream = NULL;  eb_desc = -1;#if defined (LOG_FILE)  if (log_file) {    if (ferror (log_file))      printf ("Error writing log file.\n");    if (fclose (log_file) != 0)      printf ("Error closing log file.\n");  }#endif}/* Terminate the open connection to the remote debugger.   Use this when you want to detach and do something else   with your gdb.  */voideb_detach (from_tty)     int from_tty;{  pop_target();		/* calls eb_close to do the real work */  if (from_tty)    printf ("Ending remote %s debugging\n", target_shortname);} /* Tell the remote machine to resume.  */voideb_resume (step, sig)     int step, sig;{  if (step)    {      write (eb_desc, "t 1,s\n", 6);      /* Wait for the echo.  */      expect ("t 1,s\r");      /* Then comes a line containing the instruction we stepped to.  */      expect ("\n@");      /* Then we get the prompt.  */      expect_prompt ();      /* Force the next eb_wait to return a trap.  Not doing anything         about I/O from the target means that the user has to type         "continue" to see any.  This should be fixed.  */      need_artificial_trap = 1;    }  else    {      if (need_gi)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
美女mm1313爽爽久久久蜜臀| 国产日韩三级在线| 亚洲永久精品大片| 欧美午夜精品久久久久久超碰| 亚洲你懂的在线视频| 在线看国产日韩| 午夜激情一区二区| 日韩欧美激情一区| 国产在线日韩欧美| 中文字幕在线观看不卡视频| 色综合天天综合给合国产| 夜夜亚洲天天久久| 91麻豆精品国产91久久久久久| 日本一区中文字幕| 久久精品欧美日韩| 91麻豆成人久久精品二区三区| 亚洲亚洲精品在线观看| 欧美一区二区三区小说| 国产久卡久卡久卡久卡视频精品| 国产精品美女久久久久aⅴ | 国产亚洲一区字幕| 99久久777色| 日本欧美一区二区三区| 久久久久国产精品厨房| 日本道精品一区二区三区| 日韩av电影免费观看高清完整版 | 久久99久久精品欧美| 国产亚洲福利社区一区| 91久久精品一区二区三区| 免费成人在线网站| 1区2区3区国产精品| 欧美疯狂性受xxxxx喷水图片| 国内精品伊人久久久久av一坑 | 亚洲香肠在线观看| 久久综合久久99| 色综合天天综合网天天狠天天| 蜜桃在线一区二区三区| 亚洲欧洲综合另类| 久久精品人人爽人人爽| 91精品麻豆日日躁夜夜躁| 成人av集中营| 久久精品国产免费看久久精品| 亚洲麻豆国产自偷在线| 337p粉嫩大胆色噜噜噜噜亚洲| 在线视频一区二区免费| 成人午夜电影久久影院| 日韩电影免费在线看| 亚洲男人天堂av| 国产日韩精品一区二区浪潮av| 宅男噜噜噜66一区二区66| 色综合久久久久网| 成人精品视频网站| 国产真实乱子伦精品视频| 日本美女一区二区三区| 亚洲免费在线观看视频| 久久久精品国产99久久精品芒果| 欧美日韩高清一区二区| 色婷婷国产精品久久包臀| 成人永久aaa| 国产精品系列在线观看| 狠狠色丁香婷婷综合久久片| 日韩影院精彩在线| 一区二区三区欧美| 亚洲欧美日韩精品久久久久| 国产农村妇女毛片精品久久麻豆 | 国产午夜亚洲精品理论片色戒| 欧美丰满美乳xxx高潮www| 欧美在线观看视频一区二区| 91蜜桃在线观看| 99re这里只有精品首页| voyeur盗摄精品| 成人激情图片网| 成人app下载| 丁香六月久久综合狠狠色| 国产伦精品一区二区三区免费| 精品综合久久久久久8888| 蜜桃视频在线观看一区| 麻豆91在线观看| 日本vs亚洲vs韩国一区三区| 日韩不卡手机在线v区| 日本在线不卡视频| 久久99久久精品| 国产久卡久卡久卡久卡视频精品| 国产成人免费视频网站 | 亚洲电影一级片| 亚洲成av人片一区二区梦乃| 午夜精品久久久久| 奇米影视一区二区三区小说| 精品一区二区三区在线观看| 国产精品一级片在线观看| 国产福利一区二区三区| 99精品视频中文字幕| 91国偷自产一区二区三区观看| 欧美在线小视频| 日韩精品一区二区三区中文不卡 | 欧美在线制服丝袜| 在线成人午夜影院| 欧美大白屁股肥臀xxxxxx| 精品久久久久久久久久久久久久久 | 972aa.com艺术欧美| 91黄色免费网站| 欧美电视剧在线观看完整版| 国产亚洲欧洲997久久综合| 中文字幕视频一区| 亚洲国产一区二区三区| 日本成人在线网站| 国产大陆精品国产| 在线看国产一区| 精品裸体舞一区二区三区| 国产精品色噜噜| 亚洲高清在线精品| 国产精选一区二区三区| 欧美无砖专区一中文字| 精品国产乱码久久久久久久久| 国产精品久久三区| 天天综合日日夜夜精品| 国产91精品欧美| 欧美精品在线观看一区二区| 日本一区二区三区在线不卡| 亚洲电影视频在线| 粉嫩av一区二区三区在线播放| 欧美亚一区二区| 久久久久久久综合色一本| 亚洲精品免费在线播放| 黄页视频在线91| 欧美唯美清纯偷拍| 国产精品三级久久久久三级| 蜜桃久久久久久久| 色偷偷成人一区二区三区91| 精品国产乱码久久久久久闺蜜 | 日韩欧美中文字幕一区| 亚洲天堂网中文字| 黄网站免费久久| 欧美日韩一区二区不卡| 欧美极品少妇xxxxⅹ高跟鞋| 视频一区二区三区在线| 91在线播放网址| 久久嫩草精品久久久久| 日韩av二区在线播放| 在线免费av一区| 亚洲天堂福利av| 成人精品亚洲人成在线| 26uuu成人网一区二区三区| 午夜精品久久久久久久99樱桃| 97久久超碰精品国产| 久久久久久电影| 乱中年女人伦av一区二区| 欧美日韩亚洲国产综合| 亚洲欧美激情插| 不卡一二三区首页| 久久天堂av综合合色蜜桃网| 欧美aa在线视频| 91精品国产色综合久久久蜜香臀| 亚洲综合丝袜美腿| 91久久一区二区| 一区二区免费在线| 一本大道久久a久久综合| 亚洲婷婷国产精品电影人久久| 成人自拍视频在线观看| 中文一区一区三区高中清不卡| 国内精品免费在线观看| 精品国产免费视频| 激情综合色综合久久综合| 日韩亚洲欧美在线观看| 日本在线不卡一区| 日韩欧美的一区| 久久66热偷产精品| 久久综合九色综合欧美就去吻 | 亚洲伊人伊色伊影伊综合网| 一本色道久久综合亚洲91| 国产精品家庭影院| 99国产精品久久久久| 亚洲激情男女视频| 一本色道**综合亚洲精品蜜桃冫| 亚洲精品日韩专区silk| 欧美亚洲另类激情小说| 天堂资源在线中文精品| 91精品国产综合久久久蜜臀图片 | 国产精品人人做人人爽人人添| 国产精品自在在线| 国产欧美日韩中文久久| 99国产一区二区三精品乱码| 亚洲精品视频免费看| 欧美区一区二区三区| 免费日韩伦理电影| 久久久综合九色合综国产精品| 国产乱人伦精品一区二区在线观看 | 日韩二区在线观看| 日韩免费电影一区| 懂色av一区二区三区免费观看| 国产精品久久久久久久岛一牛影视| 色呦呦日韩精品| 日韩在线观看一区二区| 久久久av毛片精品| 99久久精品久久久久久清纯| 亚洲高清免费在线| 2022国产精品视频| 一本久道中文字幕精品亚洲嫩| 日韩精品乱码av一区二区| 国产欧美一区二区精品秋霞影院|