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

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

?? rtl_debug.c

?? fsmlabs的real time linux的內核
?? C
字號:
/* * RTLinux FIFO interface to GDB stub * * Written by Michael Barabanov (baraban@fsmlabs.com) * Copyright (C) 2000 Finite State Machine Labs Inc. * Released under the terms of the GPL Version 2.0 * */#include <rtl.h>#include <rtl_conf.h>#include <rtl_sync.h>#include <rtl_core.h>#include <rtl_fifo.h>#include <rtl_sched.h>#include <linux/ioctl.h>#include <rtl_mutex.h>/* #define RTL_DEBUG_PRINT */#include <rtl_debug.h>static int fifo = 10;#define RTL_FIFO_FROM_GDB  (fifo)#define RTL_FIFO_TO_GDB    (RTL_FIFO_FROM_GDB + 1)#define RTL_FIFO_FROM_GDB2 (RTL_FIFO_FROM_GDB + 2)static pthread_mutex_t gdb_lock = PTHREAD_MUTEX_INITIALIZER;static int oldprio = 0;static pthread_t oldprio_thread = 0;int rtl_send_exception_info = 0;/* find the module that supposedly contains a thread that caused an exception * and prepare offset information */static unsigned long text;static unsigned long data;static unsigned long bss;static struct module *last_module = 0;static pthread_t last_thread = 0;#if 0/* support stuff for trapping in kernel system calls. -Nathan */void (*old_sys_callp)(int);extern void (*sys_call_table)(int);extern int force_sig_info(int, struct siginfo *, struct task_struct *);#endifint rtl_search_module(struct module *mod){	int i;	text = 0;	data = 0;	bss = 0;	if (!mod) {		return -1;	}	for (i = 0; i < mod->nsyms; i++) {		if (strncmp(mod->syms[i].name, "__insmod_", 9)) {			continue;		}		if (strstr(mod->syms[i].name, "S.text")) {			text = mod->syms[i].value;		}		if (strstr(mod->syms[i].name, "S.data")) {			data = mod->syms[i].value;		}		if (strstr(mod->syms[i].name, "S.bss")) {			bss = mod->syms[i].value;		}/* 		rtl_cprintf("%s %x\n", mod->syms[i].name, mod->syms[i].value); */	}	if (!text) {		rtl_printf("rtl_debug warning: couldn't find section addresses; your insmod is too old\n");		return -1;	}	if (!data) {		data = text;	}	if (!bss) {		bss = text;	}	return 0;}void rtl_exit_debugger(void *arg){	int i;	for (i = 0; i < rtl_num_cpus(); i++) {		int cpu = cpu_logical_map (i);		rtl_sched[cpu].rtl_linux_task.sched_param.sched_priority = -1;#ifdef CONFIG_SMP		if (cpu != rtl_getcpuid()) {			rtl_reschedule(cpu);		}#endif/* 		last_module = 0; */	}	oldprio_thread->sched_param.sched_priority = oldprio;	pthread_mutex_unlock (&gdb_lock);}int rtl_enter_debugger(int exceptionVector, void *eip){	struct module *mod;	pthread_mutex_lock (&gdb_lock);	oldprio = pthread_self()->sched_param.sched_priority;	oldprio_thread = pthread_self();	pthread_self()->sched_param.sched_priority = sched_get_priority_max(0) + 3;	{		int i;		for (i = 0; i < rtl_num_cpus(); i++) {			int cpu = cpu_logical_map (i);			rtl_sched[cpu].rtl_linux_task.sched_param.sched_priority = sched_get_priority_max(0) + 1;#ifdef CONFIG_SMP			if (cpu != rtl_getcpuid()) {				rtl_reschedule(cpu);			}#endif		}	}	debugpr("passed\n");	mod = pthread_self()->creator;	if (mod && (last_module != mod)) {		/* 		rtl_printf("rtl_debug: module=%#x lastmodule=%#x\n", mod, last_module); */		if (&__this_module != pthread_self()->creator) {			last_module = mod;			last_thread = pthread_self();			rtl_printf("rtl_debug: exception %#x in %s (EIP=%#x), thread id %#x; (re)start GDB to debug\n", exceptionVector, mod->name, eip, last_thread);			rtl_search_module(mod);		} else {			rtl_printf("rtl_debug: interrupt (%#x)\n", exceptionVector);		}	}	/* reply to host that an exception has occurred */	if (rtf_isused(fifo)) {		set_bit (0, &rtl_send_exception_info);	}	return 0;}#include "arch/rtl-stub.c"static pthread_t waiting_thread = 0;static spinlock_t fifo_lock = SPIN_LOCK_UNLOCKED;int getDebugChar(void){	char c;	/* blocking FIFOs or mq_receive would be nice here */	while (1) {		rtl_irqstate_t flags;		rtl_spin_lock_irqsave(&fifo_lock, flags);		if (rtf_get(RTL_FIFO_FROM_GDB2, &c, 1) == 1) {			rtl_spin_unlock_irqrestore(&fifo_lock, flags);			break;		}/* 		debugpr("S"); */		pthread_kill (pthread_self(), RTL_SIGNAL_SUSPEND);		waiting_thread = pthread_self();		rtl_spin_unlock_irqrestore(&fifo_lock, flags);		rtl_schedule();		pthread_testcancel();	}/* 	debugpr("%c", c); */	return c;}int putDebugChar(int chr){	char c = chr;/* 	debugpr(">%c", c); */	rtf_put (RTL_FIFO_TO_GDB, &c, 1);	return 1;}pthread_t interrupt_threadid;static int fifo_handler(unsigned int fifo){	char c;	if (rtf_get(RTL_FIFO_FROM_GDB, &c, 1) <= 0) {		return 0;	}	if (c == 3)  {		pthread_wakeup_np(interrupt_threadid);	} else {		rtl_irqstate_t flags;		int cpu = -1;		do {			rtf_put(RTL_FIFO_FROM_GDB2, &c, 1);		} while (rtf_get(RTL_FIFO_FROM_GDB, &c, 1) == 1);		rtl_spin_lock_irqsave(&fifo_lock, flags);		if (waiting_thread) {			cpu = waiting_thread->cpu;			pthread_kill (waiting_thread, RTL_SIGNAL_WAKEUP);			waiting_thread = 0;		}		rtl_spin_unlock_irqrestore(&fifo_lock, flags);		if (cpu >= 0) {#ifdef CONFIG_SMP			if (cpu != rtl_getcpuid())				rtl_reschedule(cpu);			else#endif				rtl_schedule();		}	}	return 0;}static void *interrupt_thread(void *p){	while (1) {		pthread_suspend_np(pthread_self());		debugpr("breakpoint\n");		breakpoint();	}	return 0;}/* handle flushing */static int gdb_fifo_ioctl(unsigned int fifo, unsigned int cmd, unsigned long arg){	if (cmd == TCFLSH) {		if (arg == TCIFLUSH) {			rtf_flush (fifo + 1);		}	}	return 0;}#if 0/* handling of system calls in kernel for PSC programs. -Nathan */void rtlinux_sys_call(int syscall_no) {	if (is_psc_active()) {		/* do something to send a signal back to the offending		 * process 		struct siginfo ignored;		force_sig_info(SIGSEGV, &ignored, get_linux_current()); */	} else /* just do whatever the syscall would do */		old_sys_callp(syscall_no);}#endif#ifdef MODULEMODULE_AUTHOR("Michael Barabanov <baraban@fsmlabs.com>");MODULE_DESCRIPTION("RTLinux Debugger");MODULE_PARM(fifo, "i");static int bp = 0;MODULE_PARM(bp, "i");static int quiet = 0;MODULE_PARM(quiet, "i");#define CREATE_FIFO(f, sz) \do { \	int ret = rtf_create((f), (sz)); \	if (ret < 0) { \		printk("rtl_debug: failed to create FIFO %d (%d)\n", (f), ret); \		return -1; \	} \} while (0)int init_module(void){	pthread_attr_t attr;	struct sched_param sched_param;	pthread_attr_init (&attr);	sched_param.sched_priority = sched_get_priority_max(0) + 2;	pthread_attr_setschedparam (&attr, &sched_param);	CREATE_FIFO (RTL_FIFO_FROM_GDB, 4000);	CREATE_FIFO (RTL_FIFO_TO_GDB, 4000);	CREATE_FIFO (RTL_FIFO_FROM_GDB2, 4000);	rtf_make_user_pair (RTL_FIFO_FROM_GDB, RTL_FIFO_TO_GDB);	rtf_link_user_ioctl (RTL_FIFO_FROM_GDB, gdb_fifo_ioctl);	rtf_create_handler(RTL_FIFO_FROM_GDB, fifo_handler);	pthread_create (&interrupt_threadid, &attr, interrupt_thread, NULL);	if (set_debug_traps()) {		pthread_cancel (interrupt_threadid);		pthread_join (interrupt_threadid, NULL);		rtf_destroy(RTL_FIFO_FROM_GDB);		rtf_destroy(RTL_FIFO_TO_GDB);		rtf_destroy(RTL_FIFO_FROM_GDB2);		return -1;	}	if ( !quiet ) {		printk("RTLinux Debugger Loaded (http://www.fsmlabs.com/)\n");	}	if (bp) {		pthread_wakeup_np(interrupt_threadid);	}	return 0;#if 0	/* Support for catching system calls in kernel. -Nathan */#ifdef CONFIG_SMP#warning "Trapping system calls in kernel isn't SMP safe yet."#warning "Just try not to make any system calls from kernel space :-)"#endif /* CONFIG_SMP */	old_sys_callp = sys_call_table;	sys_call_table = &rtlinux_sys_call;#endif}void cleanup_module(void){	pthread_delete_np (interrupt_threadid);	rtf_destroy(RTL_FIFO_FROM_GDB);	rtf_destroy(RTL_FIFO_TO_GDB);	rtf_destroy(RTL_FIFO_FROM_GDB2);	unset_debug_traps();#if 0	/* Unhook system calls. -Nathan */	sys_call_table = old_sys_callp;#endif}#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜日韩在线观看| 91免费小视频| 激情综合色播激情啊| 三级在线观看一区二区| 久久精品亚洲一区二区三区浴池| 欧美成人乱码一区二区三区| 日韩一区二区电影网| 久久综合九色综合97婷婷女人| 欧美大白屁股肥臀xxxxxx| 精品国产凹凸成av人网站| 亚洲精品一区二区三区精华液 | 国产剧情一区二区| 成a人片国产精品| 日本韩国视频一区二区| 欧美精品第1页| 日韩欧美国产一区二区三区| 日韩欧美国产综合一区| 国产女主播视频一区二区| 亚洲制服丝袜av| 国产一区二区三区免费看| 91福利在线免费观看| 2021中文字幕一区亚洲| 亚洲免费在线看| 国产乱码精品一区二区三区忘忧草 | 久久综合999| 一区二区三区精品视频| 狠狠v欧美v日韩v亚洲ⅴ| 在线观看视频一区二区欧美日韩| 欧美大片在线观看| 午夜精品成人在线视频| 91精品久久久久久久99蜜桃| 久久嫩草精品久久久久| 亚洲国产视频a| 色呦呦网站一区| 国产精品美女久久久久久2018| 国产乱码精品一区二区三区av| 免费观看一级特黄欧美大片| 久久精品99国产精品| 欧美日韩一本到| 亚洲综合在线五月| 99re视频这里只有精品| 国产精品免费网站在线观看| 国产一区二区伦理片| 日韩欧美中文字幕制服| 日本在线不卡一区| 日韩欧美一级精品久久| 麻豆精品新av中文字幕| 91麻豆精品国产91久久久久久久久 | 9色porny自拍视频一区二区| 欧美国产精品v| 成人97人人超碰人人99| 最新国产の精品合集bt伙计| av不卡免费在线观看| 亚洲欧美日韩系列| 欧美亚洲国产怡红院影院| 亚洲成人精品一区| 精品三级在线看| 成人免费视频国产在线观看| 亚洲乱码国产乱码精品精的特点 | 亚洲精品中文字幕乱码三区| 日本精品一区二区三区高清| 午夜伦理一区二区| 国产日韩av一区二区| 97se亚洲国产综合在线| 日韩精品午夜视频| 久久五月婷婷丁香社区| 99久久免费国产| 婷婷久久综合九色综合伊人色| 91精品国产欧美一区二区18 | 91在线一区二区三区| 日韩激情av在线| 国产精品久久久久久久久动漫 | 亚洲欧洲国产专区| 666欧美在线视频| 粉嫩av一区二区三区| 亚洲一区欧美一区| 国产亚洲1区2区3区| 欧美三级电影精品| www.色综合.com| 激情伊人五月天久久综合| 亚洲女同一区二区| 2020国产精品| 欧美一区二区三区免费观看视频| 国产成人av资源| 久久精品国内一区二区三区| 麻豆91免费看| 五月天久久比比资源色| 最新日韩av在线| 2020国产精品自拍| 日韩一区二区三区在线观看| 欧美日韩在线三区| 色偷偷一区二区三区| 成人av综合一区| 国产v日产∨综合v精品视频| 午夜伦欧美伦电影理论片| 欧美精品 日韩| 国产a级毛片一区| 国产v综合v亚洲欧| 丁香五精品蜜臀久久久久99网站| 久久精品国产99国产| 奇米影视一区二区三区| 男女男精品视频网| 久久不见久久见中文字幕免费| 五月综合激情网| 免费成人在线视频观看| 国内国产精品久久| 国产成人精品一区二区三区四区| 国产一区二三区| 成人免费黄色大片| 99九九99九九九视频精品| 91小宝寻花一区二区三区| 成人av电影观看| 在线日韩一区二区| 日韩一区二区免费电影| 精品电影一区二区三区| 国产精品色一区二区三区| 亚洲三级在线看| 麻豆成人av在线| 不卡视频一二三| 欧美肥大bbwbbw高潮| 久久综合色鬼综合色| 亚洲精品第1页| 麻豆精品一区二区三区| 91麻豆swag| 欧美精品一区二区精品网| 国产精品高潮呻吟久久| 天堂影院一区二区| 国产成人免费9x9x人网站视频| 91国偷自产一区二区三区观看| 欧美久久免费观看| 国产精品美女久久久久av爽李琼| 五月天欧美精品| caoporm超碰国产精品| 欧美一区二区视频在线观看2022| 中文字幕av资源一区| 日本中文一区二区三区| 91蜜桃在线观看| 中文字幕电影一区| 国产一区二区三区精品欧美日韩一区二区三区 | 日韩va欧美va亚洲va久久| 高潮精品一区videoshd| 久久精品人人爽人人爽| 日本中文字幕一区| 欧美精品日韩一区| 亚洲不卡av一区二区三区| 99v久久综合狠狠综合久久| 精品国产123| 精品一区二区三区香蕉蜜桃| 欧美午夜视频网站| 一区二区三区高清在线| 高清shemale亚洲人妖| 欧美激情在线观看视频免费| 国产一区二区剧情av在线| 欧美成人乱码一区二区三区| 奇米精品一区二区三区在线观看一| 欧美日韩一区二区欧美激情| 亚洲一二三区在线观看| 欧美亚洲综合久久| 亚洲123区在线观看| 欧美精品v日韩精品v韩国精品v| 亚洲一区二区三区三| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 国产精品白丝在线| 在线欧美一区二区| 午夜一区二区三区视频| 免费不卡在线观看| 精品视频一区二区三区免费| 亚洲自拍偷拍麻豆| 欧美日韩免费不卡视频一区二区三区| 亚洲综合一区二区三区| 欧美熟乱第一页| 国产在线精品一区二区| 欧美国产综合色视频| 在线观看欧美黄色| 免费不卡在线观看| 国产欧美精品一区二区色综合朱莉| 99久久国产综合色|国产精品| 亚洲欧美aⅴ...| 日韩视频在线你懂得| 99免费精品视频| 91在线免费看| 五月婷婷综合网| 亚洲精品在线一区二区| 91精彩视频在线| 国产乱淫av一区二区三区| 亚洲国产精品欧美一二99| 精品伦理精品一区| 欧美体内she精高潮| 国产不卡免费视频| 美洲天堂一区二卡三卡四卡视频| 久久亚洲综合色| 日韩视频一区在线观看| 91成人国产精品| 国产成人免费视频| 美女精品一区二区| 日韩电影在线观看电影| 亚洲一区二区三区中文字幕| 欧美韩国一区二区| 欧美刺激脚交jootjob| 在线不卡中文字幕播放|