Changeset View
Changeset View
Standalone View
Standalone View
sys/cddl/contrib/opensolaris/uts/common/dtrace/dtrace.c
- This file is larger than 256 KB, so syntax highlighting is disabled by default.
Show First 20 Lines • Show All 61 Lines • ▼ Show 20 Lines | |||||
* - Hook functions | * - Hook functions | ||||
* - Driver cookbook functions | * - Driver cookbook functions | ||||
* | * | ||||
* Each group of functions begins with a block comment labelled the "DTrace | * Each group of functions begins with a block comment labelled the "DTrace | ||||
* [Group] Functions", allowing one to find each block by searching forward | * [Group] Functions", allowing one to find each block by searching forward | ||||
* on capital-f functions. | * on capital-f functions. | ||||
*/ | */ | ||||
#include <sys/errno.h> | #include <sys/errno.h> | ||||
#include <sys/param.h> | |||||
#include <sys/types.h> | |||||
#ifndef illumos | #ifndef illumos | ||||
#include <sys/time.h> | #include <sys/time.h> | ||||
#endif | #endif | ||||
#include <sys/stat.h> | #include <sys/stat.h> | ||||
#include <sys/modctl.h> | |||||
#include <sys/conf.h> | #include <sys/conf.h> | ||||
#include <sys/systm.h> | #include <sys/systm.h> | ||||
#include <sys/endian.h> | |||||
#ifdef illumos | #ifdef illumos | ||||
#include <sys/ddi.h> | #include <sys/ddi.h> | ||||
#include <sys/sunddi.h> | #include <sys/sunddi.h> | ||||
#endif | #endif | ||||
#include <sys/cpuvar.h> | #include <sys/cpuvar.h> | ||||
#include <sys/kmem.h> | #include <sys/kmem.h> | ||||
#ifdef illumos | #ifdef illumos | ||||
#include <sys/strsubr.h> | #include <sys/strsubr.h> | ||||
#endif | #endif | ||||
#include <sys/sysmacros.h> | #include <sys/sysmacros.h> | ||||
#include <sys/dtrace_impl.h> | #include <sys/dtrace_impl.h> | ||||
#include <sys/atomic.h> | #include <sys/atomic.h> | ||||
#include <sys/cmn_err.h> | #include <sys/cmn_err.h> | ||||
#ifdef illumos | #ifdef illumos | ||||
#include <sys/mutex_impl.h> | #include <sys/mutex_impl.h> | ||||
#include <sys/rwlock_impl.h> | #include <sys/rwlock_impl.h> | ||||
#endif | #endif | ||||
#include <sys/ctf_api.h> | #include <sys/ctf_api.h> | ||||
#ifdef illumos | #ifdef illumos | ||||
#include <sys/panic.h> | #include <sys/panic.h> | ||||
#include <sys/priv_impl.h> | #include <sys/priv_impl.h> | ||||
#endif | #endif | ||||
#include <sys/policy.h> | |||||
#ifdef illumos | #ifdef illumos | ||||
#include <sys/cred_impl.h> | #include <sys/cred_impl.h> | ||||
#include <sys/procfs_isa.h> | #include <sys/procfs_isa.h> | ||||
#endif | #endif | ||||
#include <sys/taskq.h> | #include <sys/taskq.h> | ||||
#ifdef illumos | #ifdef illumos | ||||
#include <sys/mkdev.h> | #include <sys/mkdev.h> | ||||
#include <sys/kdi.h> | #include <sys/kdi.h> | ||||
#endif | #endif | ||||
#include <sys/zone.h> | #include <sys/zone.h> | ||||
#include <sys/socket.h> | #include <sys/socket.h> | ||||
#include <netinet/in.h> | #include <netinet/in.h> | ||||
#include "strtolctype.h" | #include "strtolctype.h" | ||||
/* FreeBSD includes: */ | /* FreeBSD includes: */ | ||||
#ifndef illumos | #ifndef illumos | ||||
#include <sys/callout.h> | #include <sys/callout.h> | ||||
#include <sys/ctype.h> | #include <sys/ctype.h> | ||||
#include <sys/eventhandler.h> | #include <sys/eventhandler.h> | ||||
#include <sys/limits.h> | #include <sys/limits.h> | ||||
#include <sys/linker.h> | #include <sys/linker.h> | ||||
#include <sys/kdb.h> | #include <sys/kdb.h> | ||||
#include <sys/jail.h> | |||||
#include <sys/kernel.h> | #include <sys/kernel.h> | ||||
#include <sys/malloc.h> | #include <sys/malloc.h> | ||||
#include <sys/lock.h> | #include <sys/lock.h> | ||||
#include <sys/mutex.h> | #include <sys/mutex.h> | ||||
#include <sys/ptrace.h> | #include <sys/ptrace.h> | ||||
#include <sys/random.h> | #include <sys/random.h> | ||||
#include <sys/rwlock.h> | #include <sys/rwlock.h> | ||||
#include <sys/sx.h> | #include <sys/sx.h> | ||||
#include <sys/sysctl.h> | #include <sys/sysctl.h> | ||||
#include <sys/mount.h> | |||||
#undef AT_UID | |||||
#undef AT_GID | |||||
#include <sys/vnode.h> | |||||
#include <sys/cred.h> | |||||
#include <sys/dtrace_bsd.h> | #include <sys/dtrace_bsd.h> | ||||
#include <netinet/in.h> | #include <netinet/in.h> | ||||
#include "dtrace_cddl.h" | #include "dtrace_cddl.h" | ||||
#include "dtrace_debug.c" | #include "dtrace_debug.c" | ||||
#endif | #endif | ||||
▲ Show 20 Lines • Show All 154 Lines • ▼ Show 20 Lines | |||||
#ifndef illumos | #ifndef illumos | ||||
/* XXX FreeBSD hacks. */ | /* XXX FreeBSD hacks. */ | ||||
#define cr_suid cr_svuid | #define cr_suid cr_svuid | ||||
#define cr_sgid cr_svgid | #define cr_sgid cr_svgid | ||||
#define ipaddr_t in_addr_t | #define ipaddr_t in_addr_t | ||||
#define mod_modname pathname | #define mod_modname pathname | ||||
#define vuprintf vprintf | #define vuprintf vprintf | ||||
#define ttoproc(_a) ((_a)->td_proc) | #ifndef crgetzoneid | ||||
#define crgetzoneid(_a) 0 | #define crgetzoneid(_a) 0 | ||||
#endif | |||||
#define ttoproc(_a) ((_a)->td_proc) | |||||
#define SNOCD 0 | #define SNOCD 0 | ||||
#define CPU_ON_INTR(_a) 0 | #define CPU_ON_INTR(_a) 0 | ||||
#define PRIV_EFFECTIVE (1 << 0) | #define PRIV_EFFECTIVE (1 << 0) | ||||
#define PRIV_DTRACE_KERNEL (1 << 1) | #define PRIV_DTRACE_KERNEL (1 << 1) | ||||
#define PRIV_DTRACE_PROC (1 << 2) | #define PRIV_DTRACE_PROC (1 << 2) | ||||
#define PRIV_DTRACE_USER (1 << 3) | #define PRIV_DTRACE_USER (1 << 3) | ||||
#define PRIV_PROC_OWNER (1 << 4) | #define PRIV_PROC_OWNER (1 << 4) | ||||
▲ Show 20 Lines • Show All 174 Lines • ▼ Show 20 Lines | #define DTRACE_INRANGE(testaddr, testsz, baseaddr, basesz) \ | ||||
(testaddr) + (testsz) - (uintptr_t)(baseaddr) <= (basesz) && \ | (testaddr) + (testsz) - (uintptr_t)(baseaddr) <= (basesz) && \ | ||||
(testaddr) + (testsz) >= (testaddr)) | (testaddr) + (testsz) >= (testaddr)) | ||||
#define DTRACE_RANGE_REMAIN(remp, addr, baseaddr, basesz) \ | #define DTRACE_RANGE_REMAIN(remp, addr, baseaddr, basesz) \ | ||||
do { \ | do { \ | ||||
if ((remp) != NULL) { \ | if ((remp) != NULL) { \ | ||||
*(remp) = (uintptr_t)(baseaddr) + (basesz) - (addr); \ | *(remp) = (uintptr_t)(baseaddr) + (basesz) - (addr); \ | ||||
} \ | } \ | ||||
_NOTE(CONSTCOND) } while (0) | } while (0) | ||||
/* | /* | ||||
* Test whether alloc_sz bytes will fit in the scratch region. We isolate | * Test whether alloc_sz bytes will fit in the scratch region. We isolate | ||||
* alloc_sz on the righthand side of the comparison in order to avoid overflow | * alloc_sz on the righthand side of the comparison in order to avoid overflow | ||||
* or underflow in the comparison with it. This is simpler than the INRANGE | * or underflow in the comparison with it. This is simpler than the INRANGE | ||||
* check above, because we know that the dtms_scratch_ptr is valid in the | * check above, because we know that the dtms_scratch_ptr is valid in the | ||||
* range. Allocations of size zero are allowed. | * range. Allocations of size zero are allowed. | ||||
▲ Show 20 Lines • Show All 17,922 Lines • Show Last 20 Lines |