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

📄 bpt.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
字号:
#include <u.h>#include <libc.h>#include <bio.h>#include <mach.h>#include <ctype.h>#include "arm.h"voiddobplist(void){	Breakpoint *b;	char buf[512];	for(b = bplist; b; b = b->next) {		switch(b->type) {		case Instruction:			Bprint(bioout, "0x%lux,%d:b %d done, at ", b->addr, b->count, b->done);			symoff(buf, sizeof(buf), b->addr, CTEXT);			Bprint(bioout, buf);			break;		case Access:			Bprint(bioout, "0x%lux,%d:ba %d done, at ", b->addr, b->count, b->done);			symoff(buf, sizeof(buf), b->addr, CDATA);			Bprint(bioout, buf);			break;		case Read:			Bprint(bioout, "0x%lux,%d:br %d done, at ", b->addr, b->count, b->done);			symoff(buf, sizeof(buf), b->addr, CDATA);			Bprint(bioout, buf);			break;		case Write:			Bprint(bioout, "0x%lux,%d:bw %d done, at ", b->addr, b->count, b->done);			symoff(buf, sizeof(buf), b->addr, CDATA);			Bprint(bioout, buf);			break;		case Equal:			Bprint(bioout, "0x%lux,%d:be at ", b->addr, b->count);			symoff(buf, sizeof(buf), b->addr, CDATA);			Bprint(bioout, buf);			break;		}		Bprint(bioout, "\n");	}}voidbreakpoint(char *addr, char *cp){	Breakpoint *b;	int type;	cp = nextc(cp);	type = Instruction;	switch(*cp) {	case 'r':		membpt++;		type = Read;		break;	case 'a':		membpt++;		type = Access;		break;	case 'w':		membpt++;		type = Write;		break;	case 'e':		membpt++;		type = Equal;		break;	}	b = emalloc(sizeof(Breakpoint));	b->addr = expr(addr);	b->type = type;	b->count = cmdcount;	b->done = cmdcount;	b->next = bplist;	bplist = b;}voiddelbpt(char *addr){	Breakpoint *b, **l;	ulong baddr;	baddr = expr(addr);	l = &bplist;	for(b = *l; b; b = b->next) {		if(b->addr == baddr) {			if(b->type != Instruction)				membpt++;			*l = b->next;			free(b);			return;		}		l = &b->next;		}	Bprint(bioout, "no breakpoint\n");}voidbrkchk(ulong addr, int type){	Breakpoint *b;	for(b = bplist; b; b = b->next) {		if(b->addr == addr && (b->type&type)) {			if(b->type == Equal && getmem_4(addr) == b->count) {				count = 1;				atbpt = 1;				return;			}			if(--b->done == 0) {				b->done = b->count;				count = 1;				atbpt = 1;				return;			}		}	}	}

⌨️ 快捷键说明

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