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

📄 ctf_mod.c

📁 Sun Solaris 10 中的 DTrace 组件的源代码。请参看: http://www.sun.com/software/solaris/observability.jsp
💻 C
字号:
/* * Copyright 2005 Sun Microsystems, Inc.  All rights reserved. * * The contents of this file are subject to the terms of the * Common Development and Distribution License, Version 1.0 only. * See the file usr/src/LICENSING.NOTICE in this distribution or * http://www.opensolaris.org/license/ for details. */#pragma ident	"@(#)ctf_mod.c	1.1	03/09/02 SMI"#include <sys/sysmacros.h>#include <sys/modctl.h>#include <sys/debug.h>#include <sys/mman.h>#include <sys/modctl.h>#include <sys/kobj.h>#include <ctf_impl.h>int ctf_leave_compressed = 0;static struct modlmisc modlmisc = {	&mod_miscops, "Compact C Type Format routines"};static struct modlinkage modlinkage = {	MODREV_1, &modlmisc, NULL};int_init(void){	return (mod_install(&modlinkage));}int_info(struct modinfo *mip){	return (mod_info(&modlinkage, mip));}int_fini(void){	return (mod_remove(&modlinkage));}/*ARGSUSED*/void *ctf_zopen(int *errp){	return ((void *)1); /* zmod is always loaded because we depend on it */}/*ARGSUSED*/const void *ctf_sect_mmap(ctf_sect_t *sp, int fd){	return (MAP_FAILED); /* we don't support this in the kernel */}/*ARGSUSED*/voidctf_sect_munmap(const ctf_sect_t *sp){	/* we don't support this in the kernel */}/*ARGSUSED*/ctf_file_t *ctf_fdopen(int fd, int *errp){	return (ctf_set_open_errno(errp, ENOTSUP));}/*ARGSUSED*/ctf_file_t *ctf_open(const char *filename, int *errp){	return (ctf_set_open_errno(errp, ENOTSUP));}/*ARGSUSED*/intctf_write(ctf_file_t *fp, int fd){	return (ctf_set_errno(fp, ENOTSUP));}intctf_version(int version){	ASSERT(version > 0 && version <= CTF_VERSION);	if (version > 0)		_libctf_version = MIN(CTF_VERSION, version);	return (_libctf_version);}/*ARGSUSED*/ctf_file_t *ctf_modopen(struct module *mp, int *error){	ctf_sect_t ctfsect, symsect, strsect;	ctf_file_t *fp = NULL;	int err;	if (error == NULL)		error = &err;	ctfsect.cts_name = ".SUNW_ctf";	ctfsect.cts_type = SHT_PROGBITS;	ctfsect.cts_flags = SHF_ALLOC;	ctfsect.cts_data = mp->ctfdata;	ctfsect.cts_size = mp->ctfsize;	ctfsect.cts_entsize = 1;	ctfsect.cts_offset = 0;	symsect.cts_name = ".symtab";	symsect.cts_type = SHT_SYMTAB;	symsect.cts_flags = 0;	symsect.cts_data = mp->symtbl;	symsect.cts_size = mp->symhdr->sh_size;#ifdef _LP64	symsect.cts_entsize = sizeof (Elf64_Sym);#else	symsect.cts_entsize = sizeof (Elf32_Sym);#endif	symsect.cts_offset = 0;	strsect.cts_name = ".strtab";	strsect.cts_type = SHT_STRTAB;	strsect.cts_flags = 0;	strsect.cts_data = mp->strings;	strsect.cts_size = mp->strhdr->sh_size;	strsect.cts_entsize = 1;	strsect.cts_offset = 0;	ASSERT(MUTEX_HELD(&mod_lock));	if ((fp = ctf_bufopen(&ctfsect, &symsect, &strsect, error)) == NULL)		return (NULL);	if (!ctf_leave_compressed && (caddr_t)fp->ctf_base != mp->ctfdata) {		/*		 * We must have just uncompressed the CTF data.  To avoid		 * others having to pay the (substantial) cost of decompressing		 * the data, we're going to substitute the uncompressed version		 * for the compressed version.  Note that this implies that the		 * first CTF consumer will induce memory impact on the system		 * (but in the name of performance of future CTF consumers).		 */		kobj_set_ctf(mp, (caddr_t)fp->ctf_base, fp->ctf_size);		fp->ctf_data.cts_data = fp->ctf_base;		fp->ctf_data.cts_size = fp->ctf_size;	}	return (fp);}

⌨️ 快捷键说明

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