14ea49401f3c8c61422aefbda43809e275f60c6cvboxsync * CDDL HEADER START
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsync * The contents of this file are subject to the terms of the
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsync * Common Development and Distribution License (the "License").
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsync * You may not use this file except in compliance with the License.
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsync * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsync * See the License for the specific language governing permissions
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsync * and limitations under the License.
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsync * When distributing Covered Code, include this CDDL HEADER in each
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsync * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsync * If applicable, add the following below this CDDL HEADER, with the
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsync * fields enclosed by brackets "[]" replaced with your own identifying
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsync * information: Portions Copyright [yyyy] [name of copyright owner]
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsync * CDDL HEADER END
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsync * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsync * Use is subject to license terms.
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsync#define SYSTRACE_ISENTRY(x) ((int)(x) >> SYSTRACE_SHIFT)
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsync#define SYSTRACE_SYSNUM(x) ((int)(x) & ((1 << SYSTRACE_SHIFT) - 1))
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsync#define SYSTRACE_ENTRY(id) ((1 << SYSTRACE_SHIFT) | (id))
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsync#error 1 << SYSTRACE_SHIFT must exceed number of system calls
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsyncsystrace_init(struct sysent *actual, systrace_sysent_t **interposed)
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsync *interposed = sysent = kmem_zalloc(sizeof (systrace_sysent_t) *
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsync for (i = 0; i < NSYSCALL; i++) {
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsync/*ARGSUSED*/
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsyncsystrace_provide(void *arg, const dtrace_probedesc_t *desc)
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsync for (i = 0; i < NSYSCALL; i++) {
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsync (void) dtrace_probe_create(systrace_id, NULL, syscallnames[i],
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsync (void) dtrace_probe_create(systrace_id, NULL, syscallnames[i],
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsync/*ARGSUSED*/
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsyncsystrace_destroy(void *arg, dtrace_id_t id, void *parg)
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsync * There's nothing to do here but assert that we have actually been
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsync * disabled.
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsync ASSERT(systrace_sysent[sysnum].stsy_entry == DTRACE_IDNONE);
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsync ASSERT(systrace_sysent32[sysnum].stsy_entry == DTRACE_IDNONE);
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsync ASSERT(systrace_sysent[sysnum].stsy_return == DTRACE_IDNONE);
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsync ASSERT(systrace_sysent32[sysnum].stsy_return == DTRACE_IDNONE);
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsync/*ARGSUSED*/
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsyncsystrace_enable(void *arg, dtrace_id_t id, void *parg)
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsync int enabled = (systrace_sysent[sysnum].stsy_entry != DTRACE_IDNONE ||
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsync systrace_sysent[sysnum].stsy_return != DTRACE_IDNONE);
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsync ASSERT(sysent[sysnum].sy_callc == dtrace_systrace_syscall);
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsync return (0);
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsync return (0);
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsync/*ARGSUSED*/
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsyncsystrace_disable(void *arg, dtrace_id_t id, void *parg)
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsync int disable = (systrace_sysent[sysnum].stsy_entry == DTRACE_IDNONE ||
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsync systrace_sysent[sysnum].stsy_return == DTRACE_IDNONE);
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsync (void *)systrace_sysent32[sysnum].stsy_underlying);
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsync systrace_sysent[sysnum].stsy_entry = DTRACE_IDNONE;
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsync systrace_sysent32[sysnum].stsy_entry = DTRACE_IDNONE;
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsync systrace_sysent[sysnum].stsy_return = DTRACE_IDNONE;
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsync systrace_sysent32[sysnum].stsy_return = DTRACE_IDNONE;
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsync{ DTRACE_STABILITY_EVOLVING, DTRACE_STABILITY_EVOLVING, DTRACE_CLASS_COMMON },
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsync{ DTRACE_STABILITY_PRIVATE, DTRACE_STABILITY_PRIVATE, DTRACE_CLASS_UNKNOWN },
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsync{ DTRACE_STABILITY_PRIVATE, DTRACE_STABILITY_PRIVATE, DTRACE_CLASS_ISA },
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsync{ DTRACE_STABILITY_EVOLVING, DTRACE_STABILITY_EVOLVING, DTRACE_CLASS_COMMON },
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsync{ DTRACE_STABILITY_PRIVATE, DTRACE_STABILITY_PRIVATE, DTRACE_CLASS_ISA },
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsyncsystrace_attach(dev_info_t *devi, ddi_attach_cmd_t cmd)
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsync if (ddi_create_minor_node(devi, "systrace", S_IFCHR, 0,
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsync dtrace_register("syscall", &systrace_attr, DTRACE_PRIV_USER, NULL,
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsyncsystrace_detach(dev_info_t *devi, ddi_detach_cmd_t cmd)
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsync/*ARGSUSED*/
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsyncsystrace_info(dev_info_t *dip, ddi_info_cmd_t infocmd, void *arg, void **result)
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsync *result = (void *)0;
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsync/*ARGSUSED*/
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsyncsystrace_open(dev_t *devp, int flag, int otyp, cred_t *cred_p)
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsync return (0);
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsync 0, /* streamtab */
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsync 0, /* refcnt */
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsync * Module linkage information for the kernel.
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsync &mod_driverops, /* module type (this is a pseudo driver) */