fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee * CDDL HEADER START
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee * The contents of this file are subject to the terms of the
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee * Common Development and Distribution License (the "License").
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee * You may not use this file except in compliance with the License.
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee * See the License for the specific language governing permissions
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee * and limitations under the License.
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee * When distributing Covered Code, include this CDDL HEADER in each
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee * If applicable, add the following below this CDDL HEADER, with the
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee * fields enclosed by brackets "[]" replaced with your own identifying
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee * information: Portions Copyright [yyyy] [name of copyright owner]
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee * CDDL HEADER END
e77b06d21580f630e0a7c437495ab283d3672828tomee * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee * Use is subject to license terms.
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee * dtj_jnitab.c defines the JNI table of classes, methods, and fields belonging
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee * to the Java DTrace API. Another JNI table defining classes from the JDK is
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee * defined in dtj_util.c. Utility functions specific to the Java DTrace API are
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee * also defined here, while general utilities are defined in dtj_util.c.
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee/* LocalConsumer */
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee/* DTraceException */
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee/* InterfaceAttributes */
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee/* ProbeDescription */
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee/* ProbeInfo */
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee/* Program */
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee/* Program.File */
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee/* ProgramInfo */
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee/* ProbeData */
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee/* ProcessState */
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee/* Aggregate */
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee/* AggregateSpec */
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee/* AggregationRecord */
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee/* SumValue */
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee/* CountValue */
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee/* AvgValue */
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee/* MinValue */
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee/* MaxValue */
e77b06d21580f630e0a7c437495ab283d3672828tomee/* StddevValue */
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee/* KernelStackRecord */
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee/* UserStackRecord */
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee/* Distribution */
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee/* LogDistribution */
ae94d716ff8759d2dc2de680b5b85a291219a4c1Richard Lowe/* LogLinear Distribution */
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee/* LinearDistribution */
127bbe13a6d36580af6a8ded154f1201a6250772tomee/* KernelSymbolRecord */
127bbe13a6d36580af6a8ded154f1201a6250772tomee/* UserSymbolRecord */
127bbe13a6d36580af6a8ded154f1201a6250772tomee/* ScalarRecord */
4ae67516a1d5dc4a5dbc761762bad5b596647388tomee * If you change this table, increment DTRACE_JNI_VERSION in
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee /* LocalConsumer */
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee { JMETHOD, &g_interval_began_jm, "intervalBegan", "()V" },
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee { JMETHOD, &g_interval_ended_jm, "intervalEnded", "()V" },
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee /* DTraceException */
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee /* InterfaceAttributes */
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee /* ProbeDescription */
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee /* ProbeInfo */
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee /* Probe */
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee { JCLASS, &g_probe_jc, "org/opensolaris/os/dtrace/Probe" },
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee /* Program */
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee /* Program.File */
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee /* ProgramInfo */
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee { JCLASS, &g_flow_jc, "org/opensolaris/os/dtrace/Flow" },
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee /* ProbeData */
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee { JMETHOD, &g_pdataadd_trace_jm, "addTraceRecord", "(I)V" },
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee { JMETHOD, &g_pdataadd_printf_jm, "addPrintfRecord", "()V" },
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee { JMETHOD, &g_pdataadd_printa_jm, "addPrintaRecord", "(JZ)V" },
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee { JMETHOD, &g_pdataadd_aggrec_jm, "addAggregationRecord",
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee "addPrintaFormattedString",
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee { JMETHOD, &g_pdataadd_exit_jm, "addExitRecord", "(I)V" },
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee { JMETHOD, &g_pdataset_formatted_jm, "setFormattedString",
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee { JMETHOD, &g_pdataclear_jm, "clearNativeElements", "()V" },
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee { JCLASS, &g_drop_jc, "org/opensolaris/os/dtrace/Drop" },
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee /* Error */
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee { JCLASS, &g_error_jc, "org/opensolaris/os/dtrace/Error" },
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee /* ProcessState */
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee /* Aggregate */
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee { JCLASS, &g_agg_jc, "org/opensolaris/os/dtrace/Aggregate" },
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee /* AggregateSpec */
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee /* Tuple */
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee { JCLASS, &g_tuple_jc, "org/opensolaris/os/dtrace/Tuple" },
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee /* AggregationRecord */
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee /* SumValue */
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee /* CountValue */
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee /* AvgValue */
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee /* MinValue */
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee /* MaxValue */
e77b06d21580f630e0a7c437495ab283d3672828tomee /* StddevValue */
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee /* KernelStackRecord */
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee /* UserStackRecord */
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee /* Distribution */
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee { JMETHOD, &g_dist_normal_jm, "normalizeBuckets", "(J)V" },
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee /* LogDistribution */
ae94d716ff8759d2dc2de680b5b85a291219a4c1Richard Lowe /* LogLinearDistribution */
ae94d716ff8759d2dc2de680b5b85a291219a4c1Richard Lowe "org/opensolaris/os/dtrace/LogLinearDistribution" },
ae94d716ff8759d2dc2de680b5b85a291219a4c1Richard Lowe { JMETHOD, &g_lldistinit_jm, CONSTRUCTOR, "(J[J)V" },
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee /* LinearDistribution */
127bbe13a6d36580af6a8ded154f1201a6250772tomee /* KernelSymbolRecord */
127bbe13a6d36580af6a8ded154f1201a6250772tomee /* UserSymbolRecord */
127bbe13a6d36580af6a8ded154f1201a6250772tomee /* ScalarRecord */
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee /* Java Error pending */
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee g_request_pool = uu_list_pool_create("g_request_pool",
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomeedtj_request_create(JNIEnv *jenv, dtj_request_type_t type, ...)
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee "Failed to allocate request pool");
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee for (i = 0; i < len; ++i) {
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee "Failed to add request arg");
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee "Failed to allocate request arglist");
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee "Failed to allocate request");
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee return (r);
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee g_program_pool = uu_list_pool_create("g_program_pool",
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomeedtj_program_create(JNIEnv *jenv, dtj_program_type_t type, const char *name)
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee "Failed to allocate program pool");
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee "Failed to allocate program name");
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee "Failed to allocate program");
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee return (p);
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomeedtj_aggval_create(JNIEnv *jenv, jobject aggval, const char *aggname,
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee "Failed to allocate aggval entry pool");
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee "Failed to allocate aggregation name");
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee /* caller responsible for input java reference */
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee "Failed to allocate aggval entry");
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee return (e);
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomeedtj_java_consumer_init(JNIEnv *jenv, dtj_java_consumer_t *jc)
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee "Failed to allocate aggval pool");
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee jc->dtjj_aggval_list = uu_list_create(g_aggval_pool, NULL,
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee "Failed to allocate aggval list");
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee /* Does not throw exceptions */
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee jc->dtjj_consumer_lock = (*jenv)->GetObjectField(jenv, jc->dtjj_caller,
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomeedtj_java_consumer_fini(JNIEnv *jenv, dtj_java_consumer_t *jc)
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee (*jenv)->DeleteLocalRef(jenv, jc->dtjj_printa_buffer);
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee * aggregate_spec records an input argument to a native JNI
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee * function (a reference we did not create), so we are not
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee * responsible for it.
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee * probelist records an in-out argument to a native JNI function
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee * (a reference we did not create), so we are not responsible
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee (*jenv)->DeleteLocalRef(jenv, jc->dtjj_consumer_lock);
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee "Failed to allocate request pool");
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee "Failed to allocate program pool");
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee c->dtjc_request_list = uu_list_create(g_request_pool, NULL,
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee "Failed to allocate consumer request list");
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee (void) pthread_mutex_init(&c->dtjc_request_list_lock, NULL);
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee c->dtjc_program_list = uu_list_create(g_program_pool, NULL,
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee "Failed to allocate consumer program list");
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee "Failed to allocate consumer");
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee return (c);
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee/* ARGSUSED */
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee/* ARGSUSED */
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee * Frees per-consumer state. Assumes that the DTrace handle has been closed
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee dtj_list_destroy(c->dtjc_request_list, dtj_request_destroy,
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee (void) pthread_mutex_destroy(&c->dtjc_request_list_lock);
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee dtj_list_destroy(c->dtjc_program_list, dtj_program_destroy,
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee * Cannot dtrace_proc_release the c->process_list proc
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee * elements here, because we need the dtrace handle for that.
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee * By the time this destructor is called, the dtrace handle is
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee * already closed. The proc elements are released in
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomeedtj_throw_dtrace_exception(dtj_java_consumer_t *jc, const char *fmt, ...)
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee return; /* java exception pending */