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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? remote.c

?? arm的bootloader代碼,很詳細(xì)
?? C
?? 第 1 頁 / 共 2 頁
字號:
			    "binary downloading NOT suppported by target\n");    }}/* Write memory data directly to the remote machine.   This does not inform the data cache; the data cache uses this.   MEMADDR is the address in the remote memory space.   MYADDR is the address of the buffer in our space.   LEN is the number of bytes.   Returns number of bytes transferred, or 0 for error.  */intremote_write_bytes (memaddr, myaddr, len)     CORE_ADDR memaddr;     char *myaddr;     int len;{  unsigned char *buf = alloca (PBUFSIZ);  int max_buf_size;		/* Max size of packet output buffer */  int origlen;  extern int verbose;  /* Verify that the target can support a binary download */  check_binary_download (memaddr);  /* Chop the transfer down if necessary */  max_buf_size = min (remote_write_size, PBUFSIZ);  if (remote_register_buf_size != 0)    max_buf_size = min (max_buf_size, remote_register_buf_size);  /* Subtract header overhead from max payload size -  $M<memaddr>,<len>:#nn */  max_buf_size -= 2 + hexnumlen (memaddr + len - 1) + 1 + hexnumlen (len) + 4;  origlen = len;  while (len > 0)    {      unsigned char *p, *plen;      int todo;      int i;      /* construct "M"<memaddr>","<len>":" */      /* sprintf (buf, "M%lx,%x:", (unsigned long) memaddr, todo); */      memaddr = remote_address_masked (memaddr);      p = buf;      if (remote_binary_download)	{	  *p++ = 'X';	  todo = min (len, max_buf_size);	}      else	{	  *p++ = 'M';	  todo = min (len, max_buf_size / 2);	/* num bytes that will fit */	}      p += hexnumstr ((char *)p, (ULONGEST) memaddr);      *p++ = ',';      plen = p;			/* remember where len field goes */      p += hexnumstr ((char *)p, (ULONGEST) todo);      *p++ = ':';      *p = '\0';      /* We send target system values byte by byte, in increasing byte         addresses, each byte encoded as two hex characters (or one         binary character).  */      if (remote_binary_download)	{	  int escaped = 0;	  for (i = 0;	       (i < todo) && (i + escaped) < (max_buf_size - 2);	       i++)	    {	      switch (myaddr[i] & 0xff)		{		case '$':		case '#':		case 0x7d:		  /* These must be escaped */		  escaped++;		  *p++ = 0x7d;		  *p++ = (myaddr[i] & 0xff) ^ 0x20;		  break;		default:		  *p++ = myaddr[i] & 0xff;		  break;		}	    }	  if (i < todo)	    {	      /* Escape chars have filled up the buffer prematurely,	         and we have actually sent fewer bytes than planned.	         Fix-up the length field of the packet.  */	      /* FIXME: will fail if new len is a shorter string than	         old len.  */	      plen += hexnumstr ((char *)plen, (ULONGEST) i);	      *plen++ = ':';	    }	}      else	{	  for (i = 0; i < todo; i++)	    {	      *p++ = tohex ((myaddr[i] >> 4) & 0xf);	      *p++ = tohex (myaddr[i] & 0xf);	    }	  *p = '\0';	}      putpkt_binary ((char *)buf, (int) (p - buf));      getpkt ((char *)buf, 0);      if (buf[0] == 'E')	{	  /* There is no correspondance between what the remote protocol uses	     for errors and errno codes.  We would like a cleaner way of	     representing errors (big enough to include errno codes, bfd_error	     codes, and others).  But for now just return EIO.  */	  errno = EIO;	  return 0;	}      /* Increment by i, not by todo, in case escape chars         caused us to send fewer bytes than we'd planned.  */      myaddr += i;      memaddr += i;      len -= i;      if (verbose)	putc('.', stderr);    }  return origlen;}/* Stuff for dealing with the packets which are part of this protocol.   See comment at top of file for details.  *//* Read a single character from the remote end, masking it down to 7 bits. */static intreadchar (int timeout){  int ch;  ch = SERIAL_READCHAR (remote_desc, timeout);  switch (ch)    {    case SERIAL_EOF:      error ("Remote connection closed");    case SERIAL_ERROR:      perror_with_name ("Remote communication error");    case SERIAL_TIMEOUT:      return ch;    default:      return ch & 0x7f;    }}static intputpkt (buf)     char *buf;{  return putpkt_binary (buf, strlen (buf));}/* Send a packet to the remote machine, with error checking.  The data   of the packet is in BUF.  The string in BUF can be at most  PBUFSIZ - 5   to account for the $, # and checksum, and for a possible /0 if we are   debugging (remote_debug) and want to print the sent packet as a string */static intputpkt_binary (buf, cnt)     char *buf;     int cnt;{  int i;  unsigned char csum = 0;  char *buf2 = alloca (PBUFSIZ);  char *junkbuf = alloca (PBUFSIZ);  int ch;  int tcount = 0;  char *p;  /* Copy the packet into buffer BUF2, encapsulating it     and giving it a checksum.  */  if (cnt > BUFSIZ - 5)		/* Prosanity check */    abort ();  p = buf2;  *p++ = '$';  for (i = 0; i < cnt; i++)    {      csum += buf[i];      *p++ = buf[i];    }  *p++ = '#';  *p++ = tohex ((csum >> 4) & 0xf);  *p++ = tohex (csum & 0xf);  /* Send it over and over until we get a positive ack.  */  while (1)    {      int started_error_output = 0;      if (remote_debug)	{	  *p = '\0';	  fprintf_unfiltered (gdb_stdlog, "Sending packet: ");	  fputstrn_unfiltered (buf2, p - buf2, 0, gdb_stdlog);	  fprintf_unfiltered (gdb_stdlog, "...");	  gdb_flush (gdb_stdlog);	}      if (SERIAL_WRITE (remote_desc, buf2, p - buf2))	perror_with_name ("putpkt: write failed");      /* read until either a timeout occurs (-2) or '+' is read */      while (1)	{	  ch = readchar (remote_timeout);	  if (remote_debug)	    {	      switch (ch)		{		case '+':		case SERIAL_TIMEOUT:		case '$':		  if (started_error_output)		    {		      putchar_unfiltered ('\n');		      started_error_output = 0;		    }		}	    }	  switch (ch)	    {	    case '+':	      if (remote_debug)		fprintf_unfiltered (gdb_stdlog, "Ack\n");	      return 1;	    case SERIAL_TIMEOUT:	      tcount++;	      if (tcount > 3)		return 0;	      break;		/* Retransmit buffer */	    case '$':	      {		/* It's probably an old response, and we're out of sync.		   Just gobble up the packet and ignore it.  */		getpkt (junkbuf, 0);		continue;	/* Now, go look for + */	      }	    default:	      if (remote_debug)		{		  if (!started_error_output)		    {		      started_error_output = 1;		      fprintf_unfiltered (gdb_stdlog, "putpkt: Junk: ");		    }		  fputc_unfiltered (ch & 0177, gdb_stdlog);		}	      continue;	    }	  break;		/* Here to retransmit */	}#if 0      /* This is wrong.  If doing a long backtrace, the user should be         able to get out next time we call QUIT, without anything as         violent as interrupt_query.  If we want to provide a way out of         here without getting to the next QUIT, it should be based on         hitting ^C twice as in remote_wait.  */      if (quit_flag)	{	  quit_flag = 0;	  interrupt_query ();	}#endif    }}/* Come here after finding the start of the frame.  Collect the rest   into BUF, verifying the checksum, length, and handling run-length   compression.  Returns 0 on any error, 1 on success.  */static intread_frame (char *buf){  unsigned char csum;  char *bp;  int c;  csum = 0;  bp = buf;  while (1)    {      c = readchar (remote_timeout);      switch (c)	{	case SERIAL_TIMEOUT:	  if (remote_debug)	    fputs_filtered ("Timeout in mid-packet, retrying\n", gdb_stdlog);	  return 0;	case '$':	  if (remote_debug)	    fputs_filtered ("Saw new packet start in middle of old one\n",			    gdb_stdlog);	  return 0;		/* Start a new packet, count retries */	case '#':	  {	    unsigned char pktcsum;	    *bp = '\000';	    pktcsum = fromhex (readchar (remote_timeout)) << 4;	    pktcsum |= fromhex (readchar (remote_timeout));	    if (csum == pktcsum)	      {		return 1;	      }	    if (remote_debug)	      {		fprintf_filtered (gdb_stdlog,			      "Bad checksum, sentsum=0x%x, csum=0x%x, buf=",				  pktcsum, csum);		fputs_filtered (buf, gdb_stdlog);		fputs_filtered ("\n", gdb_stdlog);	      }	    return 0;	  }	case '*':		/* Run length encoding */	  csum += c;	  c = readchar (remote_timeout);	  csum += c;	  c = c - ' ' + 3;	/* Compute repeat count */	  if (c > 0 && c < 255 && bp + c - 1 < buf + PBUFSIZ - 1)	    {	      memset (bp, *(bp - 1), c);	      bp += c;	      continue;	    }	  *bp = '\0';	  printf_filtered ("Repeat count %d too large for buffer: ", c);	  puts_filtered (buf);	  puts_filtered ("\n");	  return 0;	default:	  if (bp < buf + PBUFSIZ - 1)	    {	      *bp++ = c;	      csum += c;	      continue;	    }	  *bp = '\0';	  puts_filtered ("Remote packet too long: ");	  puts_filtered (buf);	  puts_filtered ("\n");	  return 0;	}    }}/* Read a packet from the remote machine, with error checking, and   store it in BUF.  BUF is expected to be of size PBUFSIZ.  If   FOREVER, wait forever rather than timing out; this is used while   the target is executing user code.  */static voidgetpkt (buf, forever)     char *buf;     int forever;{  int c;  int tries;  int timeout;  int val;  strcpy (buf, "timeout");  if (forever)    {      timeout = watchdog > 0 ? watchdog : -1;    }  else    timeout = remote_timeout;#define MAX_TRIES 3  for (tries = 1; tries <= MAX_TRIES; tries++)    {      /* This can loop forever if the remote side sends us characters         continuously, but if it pauses, we'll get a zero from readchar         because of timeout.  Then we'll count that as a retry.  */      /* Note that we will only wait forever prior to the start of a packet.         After that, we expect characters to arrive at a brisk pace.  They         should show up within remote_timeout intervals.  */      do	{	  c = readchar (timeout);	  if (c == SERIAL_TIMEOUT)	    {	      if (forever)	/* Watchdog went off.  Kill the target. */		{		  target_mourn_inferior ();		  error ("Watchdog has expired.  Target detached.\n");		}	      if (remote_debug)		fputs_filtered ("Timed out.\n", gdb_stdlog);	      goto retry;	    }	}      while (c != '$');      /* We've found the start of a packet, now collect the data.  */      val = read_frame (buf);      if (val == 1)	{	  if (remote_debug)	    {	      fprintf_unfiltered (gdb_stdlog, "Packet received: ");	      fputstr_unfiltered (buf, 0, gdb_stdlog);	      fprintf_unfiltered (gdb_stdlog, "\n");	    }	  SERIAL_WRITE (remote_desc, "+", 1);	  return;	}      /* Try the whole thing again.  */    retry:      SERIAL_WRITE (remote_desc, "-", 1);    }  /* We have tried hard enough, and just can't receive the packet.  Give up. */  printf_unfiltered ("Ignoring packet error, continuing...\n");  SERIAL_WRITE (remote_desc, "+", 1);}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲综合久久久| 亚洲国产一区二区三区青草影视| 成人免费观看男女羞羞视频| 中文字幕在线不卡视频| 欧美系列在线观看| 亚洲成人精品一区二区| 欧美成人性福生活免费看| 粉嫩欧美一区二区三区高清影视| 一区二区日韩电影| 精品国产一区二区三区四区四| 9l国产精品久久久久麻豆| 亚洲色图一区二区| 日韩欧美电影一区| 91免费看片在线观看| 日韩国产精品久久久久久亚洲| 国产精品久久久久久久久久久免费看 | 国产精品久久一卡二卡| 91久久精品网| 国产经典欧美精品| 日韩精品欧美精品| 综合自拍亚洲综合图不卡区| 精品捆绑美女sm三区| 在线观看日产精品| 国产不卡视频在线观看| 日本大胆欧美人术艺术动态| 亚洲六月丁香色婷婷综合久久| 久久麻豆一区二区| 欧美日韩亚洲综合在线| 国内精品第一页| 日本中文在线一区| 亚洲一二三区在线观看| 欧美国产日韩亚洲一区| 欧美成人一级视频| 日韩一二三区视频| 欧美制服丝袜第一页| 成人a级免费电影| 国产精品一区二区在线观看网站| 亚洲sss视频在线视频| 自拍偷拍亚洲欧美日韩| 国产精品丝袜91| 日韩亚洲欧美中文三级| 欧美伊人久久久久久久久影院 | 成人黄色小视频在线观看| 美女视频网站久久| 欧美a级理论片| 亚洲成人一二三| 一区二区三区在线视频播放| 久久人人爽人人爽| 精品精品欲导航| 日韩欧美一区二区免费| 在线电影院国产精品| 欧美日韩一区二区在线视频| 高清beeg欧美| 99久久久精品| 99国产精品国产精品毛片| 成人夜色视频网站在线观看| 国产成人精品亚洲午夜麻豆| 国产在线一区观看| 蜜乳av一区二区三区| 久久草av在线| 国产呦精品一区二区三区网站| 久久成人18免费观看| 国产成人免费视频| 国产成人在线视频网址| 成人性生交大片| 色欧美乱欧美15图片| 欧美性猛交xxxx黑人交| 99久久精品免费| 色噜噜夜夜夜综合网| 欧美三级中文字幕在线观看| 91麻豆自制传媒国产之光| 欧美日韩在线播放| 日韩女优视频免费观看| 欧美日精品一区视频| 欧美高清dvd| 精品国产亚洲在线| 国产精品久久久久久妇女6080 | 精品国产在天天线2019| 久久久久久久电影| 亚洲免费av在线| 日韩高清不卡在线| 国产麻豆9l精品三级站| jizz一区二区| 欧美三级资源在线| 精品国产a毛片| 国产精品免费网站在线观看| 一区二区三区在线高清| 奇米888四色在线精品| 日韩电影在线观看网站| 国产乱码精品一区二区三区五月婷| 丁香六月久久综合狠狠色| caoporen国产精品视频| 欧美日韩精品一二三区| 久久伊99综合婷婷久久伊| 中文字幕欧美一区| 日日夜夜精品视频天天综合网| 国产一区二区三区在线观看精品| 99天天综合性| 337p亚洲精品色噜噜狠狠| 日韩丝袜情趣美女图片| 国产精品免费视频网站| 日韩中文字幕1| 99精品1区2区| 精品成a人在线观看| 亚洲天堂av一区| 亚洲乱码国产乱码精品精可以看| 美女www一区二区| 91麻豆自制传媒国产之光| 日韩一级片在线观看| 亚洲欧美日韩系列| 国产精品99久久久久久久女警| 91精品福利在线| 欧美国产丝袜视频| 麻豆国产精品一区二区三区| av午夜一区麻豆| 欧美精品久久久久久久多人混战| 亚洲国产高清不卡| 国内外成人在线| 日韩写真欧美这视频| 亚洲第一综合色| 色综合视频在线观看| 国产精品毛片久久久久久久| 国产老肥熟一区二区三区| 精品国产亚洲在线| 激情文学综合丁香| 久久色视频免费观看| 另类小说视频一区二区| 欧美一区二区三区在线视频| 亚洲va欧美va人人爽午夜| 欧美日韩一区二区三区高清| 一区二区三区91| 欧美日韩黄色一区二区| 亚洲午夜激情网站| 欧美片网站yy| 午夜欧美2019年伦理| 欧美视频一区二区三区在线观看 | 成人动漫精品一区二区| 国产婷婷精品av在线| 国产成人综合网站| 亚洲欧洲日韩一区二区三区| www.av亚洲| 亚洲伊人伊色伊影伊综合网| 欧美午夜精品久久久久久孕妇| 亚洲成av人综合在线观看| 欧美嫩在线观看| 久久91精品久久久久久秒播| 26uuu久久综合| 粉嫩aⅴ一区二区三区四区 | 91麻豆精品国产自产在线观看一区 | 国产精品人妖ts系列视频| 成人av网站在线| 一区二区三区影院| 5月丁香婷婷综合| 国产一区免费电影| 亚洲欧洲日韩av| 欧美日本在线播放| 麻豆91精品91久久久的内涵| 久久午夜国产精品| 色综合天天在线| 日韩精品久久久久久| 精品日韩一区二区三区免费视频| 丁香另类激情小说| 亚洲成av人影院| 欧美精品一区二区三区在线播放| 粉嫩av一区二区三区在线播放| 一区二区三区欧美| 日韩小视频在线观看专区| 粗大黑人巨茎大战欧美成人| 亚洲精品ww久久久久久p站| 欧美日韩激情一区| 国产成人99久久亚洲综合精品| 夜夜嗨av一区二区三区四季av| 欧美精品1区2区3区| 国产黄色精品视频| 亚洲动漫第一页| 久久久久久9999| 欧美另类高清zo欧美| 国产精品自拍一区| 一区二区三区日本| 久久看人人爽人人| 欧美系列在线观看| 国产成人aaa| 青娱乐精品在线视频| 最新日韩在线视频| 欧美成人三级在线| 欧美性大战久久| 成人涩涩免费视频| 免费黄网站欧美| 一区二区三区产品免费精品久久75| 欧美精品一区二区三区蜜臀 | 欧美日高清视频| 成人午夜免费视频| 免费在线看成人av| 一区二区三区在线高清| 久久久蜜臀国产一区二区| 欧美中文字幕一区二区三区 | 亚洲欧美日韩中文字幕一区二区三区 | 国产精品自拍一区| 免费成人小视频| 亚洲一区中文在线|