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

📄 kernel.c

📁 早期freebsd实现
💻 C
字号:
/* * Copyright (c) 1992 Regents of the University of California. * All rights reserved. * * Redistribution and use in source and binary forms are permitted * provided that the above copyright notice and this paragraph are * duplicated in all such forms and that any documentation, * advertising materials, and other materials related to such * distribution and use acknowledge that the software was developed * by the University of California, Lawrence Berkeley Laboratory, * Berkeley, CA.  The name of the University may not be used to * endorse or promote products derived from this software without * specific prior written permission. * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. */#ifndef lintstatic char rcsid[] =    "@(#) $Header: kernel.c,v 1.2 93/02/19 15:24:35 mccanne Exp $ (LBL)";#endif#include <sys/param.h>#include <ctype.h>#include "defs.h"#include "symtab.h"#ifdef KERNELDEBUG#include "kernel.h"intis_a_vmunix(name)	char *name;{	register char *cp;		if (name && (cp = strstr(name, "vmunix")) &&	    (cp == name || cp[-1] == '/'))		return (1);	return (0);}/* * Lookup the address of a symbol and report a meaningful message  * if not found. */CORE_ADDRksym_lookup(name)        char *name;{        struct minimal_symbol *sym;        if ((sym = lookup_minimal_symbol(name, NULL)) == NULL)                error("Kernel symbol `%s' not found.", name);        return (sym->address);}/* * Read the panic string and print it out if set. */static voidpanicinfo(){	CORE_ADDR addr;	register char *cp;	char buf[256];        /* print out the panic string if there is one */        if (target_read_memory(ksym_lookup("panicstr"), &addr, 4) || 	    addr == 0 || target_read_memory(addr, buf, sizeof(buf)))                return;        for (cp = buf; cp < &buf[sizeof(buf)] && *cp; cp++)                if (!isascii(*cp) || (!isprint(*cp) && !isspace(*cp)))                        *cp = '?';        *cp = '\0';        if (buf[0] != '\0')                printf("panic: %s\n", buf);}/* * Print info about the kernel crashdump. */voidkerninfo(){        printf("sp=%x pc=%x psr=%x\n", 	       read_register(SP_REGNUM),	       read_register(PC_REGNUM),	       read_register(PS_REGNUM));	panicinfo();}/* * XXX this needs serious work to really work right. */voidset_procaddr_com(arg, from_tty)	char *arg;	int from_tty;{	u_int paddr, uaddr;		if (!kernel_debugging)		error("Not kernel debugging.");	if (arg == 0)		(void)set_procaddr(0);	else {		paddr = (u_int)parse_and_eval_address(arg);		if (set_procaddr(paddr))			error("invalid proc address");		flush_cached_frames();		set_current_frame(create_new_frame(read_register(FP_REGNUM),						   read_pc()));		select_frame(get_current_frame(), 0);	}}void_initialize_kernel(){	add_com("process-address", class_obscure, set_procaddr_com, "The process with proc structure at ADDR becomes the\n\\"current\" process context for kernel debugging.");	add_com_alias("paddr", "process-address", class_obscure, 0);}#endif

⌨️ 快捷键说明

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