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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? rtl-stub.c

?? fsmlabs的real time linux的內(nèi)核
?? C
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
/* rtl-stub.c for Alpha, originally taken from alpha-gdbstub.c and modified to * work with RTLinux debugger.  See comments below. * * RTLinux Debugger modifications are written by Nathan Paul Simons and are * (C) Finite State Machine Labs Inc. 2000 business@fsmlabs.com * * Released under the terms of GPL 2. * Open RTLinux makes use of a patented process described in * US Patent 5,995,745. Use of this process is governed * by the Open RTLinux Patent License which can be obtained from * www.fsmlabs.com/PATENT or by sending email to * licensequestions@fsmlabs.com *//****************************************************************************		THIS SOFTWARE IS NOT COPYRIGHTED   HP offers the following for use in the public domain.  HP makes no   warranty with regard to the software or its performance and the   user accepts the software "AS IS" with all faults.   HP DISCLAIMS ANY WARRANTIES, EXPRESS OR IMPLIED, WITH REGARD   TO THIS SOFTWARE INCLUDING BUT NOT LIMITED TO THE WARRANTIES   OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.****************************************************************************//**************************************************************************** *  Header: remcom.c,v 1.34 91/03/09 12:29:49 glenne Exp $ * *  Module name: remcom.c $ *  Revision: 1.34 $ *  Date: 91/03/09 12:29:49 $ *  Contributor:     Lake Stevens Instrument Division$ * *  Description:     low level support for gdb debugger. $ * *  Considerations:  only works on target hardware $ * *  Written by:      Glenn Engel $ *  ModuleState:     Experimental $ * *  NOTES:           See Below $ * *  Modified for FreeBSD by Stu Grossman. * *  To enable debugger support, two things need to happen.  One, a *  call to set_debug_traps() is necessary in order to allow any breakpoints *  or error conditions to be properly intercepted and reported to gdb. *  Two, a breakpoint needs to be generated to begin communication.  This *  is most easily accomplished by a call to breakpoint().  Breakpoint() *  simulates a breakpoint by executing a trap #1. * *  The external function exceptionHandler() is *  used to attach a specific handler to a specific 386 vector number. *  It should use the same privilege level it runs at.  It should *  install it as an interrupt gate so that interrupts are masked *  while the handler runs. *  Also, need to assign exceptionHook and oldExceptionHook. * *  Because gdb will sometimes write to the stack area to execute function *  calls, this program cannot rely on using the supervisor stack so it *  uses its own stack area reserved in the int array remcomStack. * ************* * *    The following gdb commands are supported: * * command          function                               Return value * *    g             return the value of the CPU registers  hex data or ENN *    G             set the value of the CPU registers     OK or ENN * *    mAA..AA,LLLL  Read LLLL bytes at address AA..AA      hex data or ENN *    MAA..AA,LLLL: Write LLLL bytes at address AA.AA      OK or ENN * *    c             Resume at current address              SNN   ( signal NN) *    cAA..AA       Continue at address AA..AA             SNN * *    s             Step one instruction                   SNN *    sAA..AA       Step one instruction from AA..AA       SNN * *    k             kill * *    ?             What was the last sigval ?             SNN   (signal NN) * *    D             detach                                 OK * * All commands and responses are sent with a packet which includes a * checksum.  A packet consists of * * $<packet info>#<checksum>. * * where * <packet info> :: <characters representing the command or response> * <checksum>    :: < two hex digits computed as modulo 256 sum of <packetinfo>> * * When a packet is received, it is first acknowledged with either '+' or '-'. * '+' indicates a successful transfer.  '-' indicates a failed transfer. * * Example: * * Host:                  Reply: * $m0,10#2a               +$00010203040506070809101112131415#42 * ****************************************************************************/#include <linux/string.h>#include <asm/system.h>#include <asm/ptrace.h>		/* for linux pt_regs struct */#include <asm/reg.h>		/* for EF_* reg num defines */#include <asm/gentrap.h>	/* for GEN_* trap num defines */#include <linux/smp.h>#include <linux/smp_lock.h>#include <linux/kernel.h>#include <linux/mm.h>#include <linux/signal.h>/* RTLinux support */#define __NO_VERSION__#include <linux/module.h>#include <rtl_sync.h>#include <rtl_sched.h>#include <psc.h>#include "rtl_ex.c"#define strtoul simple_strtoul#define rtl_running_linux() (pthread_self() == &LOCAL_SCHED->rtl_linux_task)int rtl_debug_initialized = 0;/* end of RTLinux support *//* Indicate to caller of mem2hex or hex2mem that there has been an   error.  */static volatile int real_mem_err[NR_CPUS];static volatile int real_mem_err_expected[NR_CPUS];#define mem_err (real_mem_err[rtl_getcpuid()])#define mem_err_expected (real_mem_err_expected[rtl_getcpuid()])/* external low-level support routines */typedef void (*Function) (void);	/* pointer to a function */extern int putDebugChar(int);	/* write a single character      */extern int getDebugChar(void);	/* read and return a single char */extern int rtl_request_traps(int (*rtl_exception_intercept)			      (int vector, struct pt_regs * regs));/* ripped from arch/alpha/kernel/process.c  * XXX we should probably just export show_regs and use the pre-exisiting  * one to cut down on code size -Nathan */void show_regs(struct pt_regs *regs){	printk("\nps: %04lx pc: [<%016lx>]\n", regs->ps, regs->pc);	printk("rp: [<%016lx>] sp: %p\n", regs->r26, regs + 1);	printk(" r0: %016lx  r1: %016lx  r2: %016lx  r3: %016lx\n",	       regs->r0, regs->r1, regs->r2, regs->r3);	printk(" r4: %016lx  r5: %016lx  r6: %016lx  r7: %016lx\n",	       regs->r4, regs->r5, regs->r6, regs->r7);	printk(" r8: %016lx r16: %016lx r17: %016lx r18: %016lx\n",	       regs->r8, regs->r16, regs->r17, regs->r18);	printk("r19: %016lx r20: %016lx r21: %016lx r22: %016lx\n",	       regs->r19, regs->r20, regs->r21, regs->r22);	printk("r23: %016lx r24: %016lx r25: %016lx r26: %016lx\n",	       regs->r23, regs->r24, regs->r25, regs->r26);	printk("r27: %016lx r28: %016lx r29: %016lx hae: %016lx\n",	       regs->r27, regs->r28, regs->gp, regs->hae);}/* BUFMAX defines the maximum number of characters in inbound/outbound buffers * at least NUMREGBYTES*2 are needed for register packets */#define BUFMAX 1500int remote_debug = 0;static const char hexchars[] = "0123456789abcdef";static int hex(char ch){	if ((ch >= 'a') && (ch <= 'f'))		return (ch - 'a' + 10);	if ((ch >= '0') && (ch <= '9'))		return (ch - '0');	if ((ch >= 'A') && (ch <= 'F'))		return (ch - 'A' + 10);	return (-1);}/* scan for the sequence $<data>#<checksum>     */static void getpacket(char *buffer){	unsigned char checksum;	unsigned char xmitcsum;	int i;	int count;	unsigned char ch;	do {		/* wait around for the start character, ignore all other 		 * characters */		while ((ch = (getDebugChar() & 0x7f)) != '$');		checksum = 0;		xmitcsum = -1;		count = 0;		/* now, read until a # or end of buffer is found */		while (count < BUFMAX) {			ch = getDebugChar() & 0x7f;			if (ch == '#')				break;			checksum = checksum + ch;			buffer[count] = ch;			count = count + 1;		}		buffer[count] = 0;		if (ch == '#') {			xmitcsum = hex(getDebugChar() & 0x7f) << 4;			xmitcsum += hex(getDebugChar() & 0x7f);			if (checksum != xmitcsum)				putDebugChar('-');	/* failed checksum */			else {				putDebugChar('+');	/* successful xfer */				/* if a sequence char is present, reply the 				 * sequence ID */				if (buffer[2] == ':') {					putDebugChar(buffer[0]);					putDebugChar(buffer[1]);					/* remove sequence chars from buffer */					count = strlen(buffer);					for (i = 3; i <= count; i++)						buffer[i - 3] = buffer[i];				}			}		}	} while (checksum != xmitcsum);	if (strlen(buffer) >= BUFMAX)		panic("kgdb: buffer overflow");}				/* static void getpacket(char *buffer) *//* send the packet in buffer.  */static void putpacket(char *buffer){	unsigned char checksum;	int count;	unsigned char ch;	if (strlen(buffer) >= BUFMAX)		panic("kgdb: buffer overflow");	/*  $<packet info>#<checksum>. */	do {		putDebugChar('$');		checksum = 0;		count = 0;		while ((ch = buffer[count])) {			if (!putDebugChar(ch))				return;			checksum += ch;			count += 1;		}		putDebugChar('#');		putDebugChar(hexchars[checksum >> 4]);		putDebugChar(hexchars[checksum % 16]);	} while ((getDebugChar() & 0x7f) != '+');}				/* static void putpacket(char *buffer) */int get_char(char *addr){	return *addr;}void set_char(char *addr, int val){	*addr = val;}/* convert the memory pointed to by mem into hex, placing result in buf *//* return a pointer to the last char put in buf (null) */static char *mem2hex(char *mem, char *buf, int count){	unsigned char ch;	int may_fault = 1;	if (mem == 0) {		strcpy(buf, "E03");		return buf;	}	if (may_fault) {		mem_err_expected = 1;		mem_err = 0;	}	while (count-- > 0) {		ch = *mem++;		if (may_fault && mem_err) {			if (remote_debug)				printk				    ("Mem fault fetching from addr %lx\n",				     (long) (mem - 1));			*buf = 0;	/* truncate buffer */			return 0;		}		*buf++ = hexchars[ch >> 4];		*buf++ = hexchars[ch & 0xf];	}	*buf = 0;	if (may_fault)		mem_err_expected = 0;	return buf;}/* convert the hex array pointed to by buf into binary to be placed in mem *//* return a pointer to the character AFTER the last byte written */static char *hex2mem(char *buf, char *mem, int count){	unsigned char ch;	while (count-- > 0) {		ch = hex(*buf++) << 4;		ch = ch + hex(*buf++);		set_char(mem++, ch);	}	return mem;}/* * While we find nice hex chars, build an int. * Return number of chars processed. */static long hexToInt(char **ptr, long *intValue){	long numChars = 0;	long hexValue;	*intValue = 0;	while (**ptr) {		hexValue = hex(**ptr);		if (hexValue >= 0) {			*intValue = (*intValue << 4) | hexValue;			numChars++;		} else			break;		(*ptr)++;	}	return (numChars);}/* more RTLinux support */static spinlock_t bp_lock = SPIN_LOCK_UNLOCKED;#define RTL_MAX_BP 1024static struct bp_cache_entry {	char *mem;	unsigned char val;	struct bp_cache_entry *next;} bp_cache[RTL_MAX_BP];static struct bp_cache_entry *cache_start = 0;int insert_bp(char *mem){	int i;	struct bp_cache_entry *e;	int old;	char buf[3];	if (!mem2hex(mem, buf, 1)) {		return EINVAL;	/* memory error */	}	old = strtoul(buf, 0, 16);	for (e = cache_start; e; e = e->next) {		if (e->mem == mem) {			return EINVAL;	/* already there */		}	}	for (i = 0; i < RTL_MAX_BP; i++) {		if (bp_cache[i].mem == 0) {			break;		}	}	if (i == RTL_MAX_BP) {		return EINVAL;	/* no space */	}	bp_cache[i].val = old;	bp_cache[i].mem = mem;	bp_cache[i].next = cache_start;	cache_start = &bp_cache[i];	set_char(mem, 0xcc);	return 0;}#define CONFIG_RTL_DEBUGGER_THREADS#define CONFIG_RTL_DEBUGGER_Z_PROTOCOLstatic int send_exception_info = 0;static char remcomInBuffer[BUFMAX];static char remcomOutBuffer[BUFMAX];static short error;void debug_error(char *format, char *parm){	if (remote_debug)		printk(format, parm);}/* Alpha registers are 64 bit wide, so 8 bytes to a register, times 66 * registers we need to keep track of */#define NUMREGS	66#define BYTESPERREG	8#define NUMREGBYTES	(BYTESPERREG * NUMREGS)int remove_bp(char *mem){	struct bp_cache_entry *e = cache_start;	struct bp_cache_entry *f = 0;	if (!e) {		return EINVAL;	}	if (e->mem == mem) {		cache_start = e->next;		f = e;	} else {		for (; e->next; e = e->next) {			if (e->next->mem == mem) {				f = e->next;				e->next = f->next;				break;			}		}	}	if (!f) {		return EINVAL;	}	mem_err_expected = 1;	set_char(f->mem, f->val);	if (mem_err) {		return EINVAL;	}	mem_err_expected = 0;	return 0;}				/* int remove_bp(char *mem) *//* for some reason, the mappings in reg.h are not *completely* correct.  That * is, they don't match up with the mappings in GDB.  For instance, EF_PC is * supposed to be the 64th integer in the gdb_regs array, not the 28th.  i * don't know how gdb possibly works with normal core files, but to get things * to work here, we are going to *ignore* asm-alpha/regs.h and go with what * gdb says. -Nathan */static void regs_to_gdb_regs(unsigned long *gdb_regs, struct pt_regs *regs){	gdb_regs[EF_V0] = regs->r0;	/* return value */	gdb_regs[EF_T0] = regs->r1;	/* temporary registers 1-8 */	gdb_regs[EF_T1] = regs->r2;	gdb_regs[EF_T2] = regs->r3;	gdb_regs[EF_T3] = regs->r4;

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
7777精品伊人久久久大香线蕉完整版 | 男人的j进女人的j一区| 99国产精品久久久久久久久久 | 色婷婷国产精品综合在线观看| 日韩限制级电影在线观看| 亚洲欧美另类图片小说| 精品一区中文字幕| 欧美日韩成人一区| 亚洲人成小说网站色在线| 丰满岳乱妇一区二区三区| 久久久午夜电影| 久久99久久久久| 欧美一级高清片| 视频一区二区中文字幕| 91九色02白丝porn| 天涯成人国产亚洲精品一区av| 99精品国产热久久91蜜凸| 亚洲久草在线视频| 色噜噜狠狠一区二区三区果冻| 欧美高清在线视频| 成人免费视频免费观看| 亚洲欧洲日韩女同| 欧美视频你懂的| 日韩中文字幕av电影| 欧美成人精品3d动漫h| 久久精品99久久久| 欧美国产一区二区| 99久久精品免费观看| 亚洲一区二区不卡免费| 欧美不卡在线视频| av一区二区三区四区| 亚洲综合色网站| 久久综合视频网| 色先锋资源久久综合| 麻豆极品一区二区三区| 国产欧美日韩不卡| 欧美一区日韩一区| 99视频热这里只有精品免费| 婷婷激情综合网| 欧美经典一区二区| 日韩一级大片在线| 91在线观看视频| 国产98色在线|日韩| 奇米影视7777精品一区二区| 一区二区三区四区视频精品免费| 亚洲国产成人午夜在线一区 | 久久电影网站中文字幕| 夜夜嗨av一区二区三区中文字幕 | 国产网站一区二区三区| 欧美在线免费观看亚洲| av在线一区二区三区| 成人午夜激情在线| 成人午夜短视频| 色综合亚洲欧洲| 欧美唯美清纯偷拍| 3751色影院一区二区三区| 51精品久久久久久久蜜臀| 欧美一区二区三区免费观看视频| 91精品国产日韩91久久久久久| 欧美一区二区三区啪啪| 国产亚洲欧美日韩日本| 亚洲日本va在线观看| 亚洲国产精品久久人人爱蜜臀| 亚洲电影一级片| 韩国三级在线一区| 91在线观看地址| 日韩女优视频免费观看| 亚洲欧洲日产国码二区| 麻豆极品一区二区三区| 成人黄色免费短视频| 欧美人妇做爰xxxⅹ性高电影 | 99re在线精品| 欧美一区二区人人喊爽| 日韩美女视频19| 蜜桃一区二区三区在线观看| 白白色 亚洲乱淫| 日韩你懂的在线观看| 亚洲欧美一区二区三区极速播放 | 日韩av一级片| 成人的网站免费观看| 欧美成人性福生活免费看| 亚洲美女免费在线| 国产激情视频一区二区在线观看| 制服丝袜成人动漫| 亚洲欧美中日韩| 粉嫩av一区二区三区在线播放| 欧美精品v国产精品v日韩精品 | 久久理论电影网| 天天操天天综合网| 91久久奴性调教| 亚洲激情一二三区| 91亚洲精品乱码久久久久久蜜桃| 欧美大片在线观看一区二区| 日韩av一区二区三区四区| 欧美伦理电影网| 成人黄页在线观看| 日韩美女啊v在线免费观看| av日韩在线网站| 亚洲欧美日韩久久| 91视频国产资源| 一区二区三区自拍| 欧美视频精品在线| 久久精品72免费观看| 欧美精品一区二区久久久| 国产真实乱偷精品视频免| 久久久久久久网| 91在线播放网址| 亚洲高清在线视频| 精品日韩在线观看| 国产精品一二三四区| 一区二区三区四区不卡在线 | 香蕉久久夜色精品国产使用方法| 欧美唯美清纯偷拍| 国产麻豆视频一区| 亚洲综合色区另类av| 精品国产乱子伦一区| 成人免费视频免费观看| 亚洲国产精品尤物yw在线观看| 91麻豆精品久久久久蜜臀| 国产盗摄女厕一区二区三区| 亚洲一区二区av电影| 国产午夜精品理论片a级大结局| 97se亚洲国产综合自在线观| 美女视频网站久久| 1024精品合集| 精品国产乱码久久久久久图片 | 色综合色狠狠天天综合色| 日韩中文字幕亚洲一区二区va在线| 久久久一区二区三区| 欧美一区二区精品在线| 96av麻豆蜜桃一区二区| 韩国三级在线一区| 免费成人av在线播放| 亚洲欧美日韩综合aⅴ视频| 国产三区在线成人av| 91精品国产入口| 91精品国产入口在线| 欧美性极品少妇| 欧美亚洲综合久久| 色香色香欲天天天影视综合网| 国产成人综合在线观看| 狠狠色综合色综合网络| 免费成人av在线| 精品亚洲成a人| 麻豆成人综合网| 国产麻豆精品在线观看| 国产剧情av麻豆香蕉精品| 国产精品一二三四区| 成人在线视频首页| 99久久伊人网影院| 日本乱人伦aⅴ精品| 欧美军同video69gay| 精品国一区二区三区| www精品美女久久久tv| 国产精品国产三级国产普通话蜜臀 | 91小视频在线观看| 91国产免费观看| 91精品国产乱| 国产精品网站在线| 亚洲成人免费av| 国产一区中文字幕| 国产精品66部| 91丝袜美腿高跟国产极品老师| 91丝袜呻吟高潮美腿白嫩在线观看| 欧美色老头old∨ideo| 在线不卡一区二区| 久久综合九色综合欧美就去吻 | 亚洲高清免费视频| 日韩—二三区免费观看av| 国产精品一品二品| 欧美日韩三级在线| 日韩女同互慰一区二区| 欧美国产禁国产网站cc| 免费成人在线视频观看| 成人黄色在线看| 日韩三级免费观看| 亚洲最大成人综合| 国产精品自在在线| 91麻豆精品国产无毒不卡在线观看| 欧美精品一区二区三区在线播放 | 国产乱码精品一区二区三区av| 波多野结衣亚洲一区| 欧美精品视频www在线观看| 日韩欧美成人一区| 亚洲精品一二三四区| 国内精品久久久久影院薰衣草| 欧美精品日韩一本| 亚洲精品中文字幕在线观看| 国产一区二区视频在线| 精品国产一区二区三区不卡| 亚洲一级电影视频| 国产一区二区三区在线观看免费视频| 欧美日韩精品专区| 一二三区精品视频| 欧美日免费三级在线| 亚洲欧洲精品一区二区三区| 久久国产精品99久久人人澡| 69成人精品免费视频| 亚洲国产成人va在线观看天堂| 91捆绑美女网站|