annotate src/os/solaris/vm/dtraceJSDT_solaris.cpp @ 6725:da91efe96a93

6964458: Reimplement class meta-data storage to use native memory Summary: Remove PermGen, allocate meta-data in metaspace linked to class loaders, rewrite GC walking, rewrite and rename metadata to be C++ classes Reviewed-by: jmasa, stefank, never, coleenp, kvn, brutisso, mgerdin, dholmes, jrose, twisti, roland Contributed-by: jmasa <jon.masamitsu@oracle.com>, stefank <stefan.karlsson@oracle.com>, mgerdin <mikael.gerdin@oracle.com>, never <tom.rodriguez@oracle.com>
author coleenp
date Sat, 01 Sep 2012 13:25:18 -0400
parents 4ee06e614636
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
116
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
1 /*
6605
4ee06e614636 7116786: RFE: Detailed information on VerifyErrors
kamg
parents: 2426
diff changeset
2 * Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved.
116
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
4 *
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
7 * published by the Free Software Foundation.
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
8 *
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
9 * This code is distributed in the hope that it will be useful, but WITHOUT
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
12 * version 2 for more details (a copy is included in the LICENSE file that
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
13 * accompanied this code).
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
14 *
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License version
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
16 * 2 along with this work; if not, write to the Free Software Foundation,
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
18 *
1552
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 196
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 196
diff changeset
20 * or visit www.oracle.com if you need additional information or have any
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 196
diff changeset
21 * questions.
116
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
22 *
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
23 */
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
24
1972
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
25 #include "precompiled.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
26 #include "classfile/javaClasses.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
27 #include "code/codeBlob.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
28 #include "memory/allocation.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
29 #include "prims/jvm.h"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
30 #include "runtime/dtraceJSDT.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
31 #include "runtime/jniHandles.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
32 #include "runtime/os.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
33 #include "runtime/signature.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
34 #include "utilities/globalDefinitions.hpp"
116
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
35
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
36 #ifdef HAVE_DTRACE_H
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
37
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
38 #include <sys/types.h>
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
39 #include <sys/stat.h>
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
40 #include <fcntl.h>
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
41 #include <unistd.h>
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
42 #include <dtrace.h>
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
43
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
44 static const char* devname = "/dev/dtrace/helper";
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
45 static const char* olddevname = "/devices/pseudo/dtrace@0:helper";
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
46
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
47 static const char* string_sig = "uintptr_t";
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
48 static const char* int_sig = "long";
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
49 static const char* long_sig = "long long";
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
50
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
51 static void printDOFHelper(dof_helper_t* helper);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
52
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
53 static int dofhelper_open() {
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
54 int fd;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
55 if ((fd = open64(devname, O_RDWR)) < 0) {
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
56 // Optimize next calls
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
57 devname = olddevname;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
58 if ((fd = open64(devname, O_RDWR)) < 0) {
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
59 return -1;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
60 }
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
61 }
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
62 return fd;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
63 }
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
64
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
65 static jint dof_register(jstring module, uint8_t* dof, void* modaddr) {
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
66 int probe;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
67 dof_helper_t dh;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
68 int fd;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
69
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
70 memset(&dh, 0, sizeof(dh));
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
71
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
72 char* module_name = java_lang_String::as_utf8_string(
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
73 JNIHandles::resolve_non_null(module));
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
74 jio_snprintf(dh.dofhp_mod, sizeof(dh.dofhp_mod), "%s", module_name);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
75 dh.dofhp_dof = (uint64_t)dof;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
76 dh.dofhp_addr = (uint64_t)modaddr;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
77
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
78 fd = dofhelper_open();
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
79 if (fd < 0)
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
80 return -1;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
81 probe = ioctl(fd, DTRACEHIOC_ADDDOF, &dh);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
82 close(fd);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
83 if (PrintDTraceDOF) {
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
84 printDOFHelper(&dh);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
85 tty->print_cr("DOF helper id = %d", probe);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
86 }
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
87 return probe;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
88 }
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
89
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
90 int DTraceJSDT::pd_activate(
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
91 void* moduleBaseAddress, jstring module,
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
92 jint providers_count, JVM_DTraceProvider* providers) {
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
93
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
94 // We need sections:
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
95 // (1) STRTAB
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
96 // (
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
97 // (2) PROVIDER
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
98 // (3) PROBES
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
99 // (4) PROBOFFS
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
100 // (5) PROBARGS
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
101 // ) * Number of Providers
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
102
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
103 // Type of sections we create
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
104 enum {
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
105 STRTAB = 0,
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
106 PROVIDERS = 1,
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
107 PROBES = 2,
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
108 PROBE_OFFSETS = 3,
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
109 ARG_OFFSETS = 4,
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
110 NUM_SECTIONS = 5
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
111 };
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
112
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
113 static int alignment_for[NUM_SECTIONS] = { 1, 4, 8, 4, 1 };
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
114
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
115 ResourceMark rm;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
116
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
117 uint32_t num_sections = 1 + 4 * providers_count;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
118 uint32_t offset = sizeof(dof_hdr_t) + (num_sections * sizeof(dof_sec_t));
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
119 uint32_t* secoffs = NEW_RESOURCE_ARRAY(uint32_t, num_sections);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
120 uint32_t* secsize = NEW_RESOURCE_ARRAY(uint32_t, num_sections);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
121
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
122 // Store offsets of all strings here in such order:
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
123 // zero-string (always 0)
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
124 // provider1-name
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
125 // probe1-function
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
126 // probe1-name
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
127 // arg-1
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
128 // arg-2
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
129 // ...
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
130 // probe2-function
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
131 // probe2-name
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
132 // arg-1
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
133 // arg-2
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
134 // provider2-name
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
135 // ...
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
136
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
137 uint32_t strcount = 0;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
138 // Count the number of strings we'll need
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
139 for(int prvc = 0; prvc < providers_count; ++prvc) {
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
140 JVM_DTraceProvider* provider = &providers[prvc];
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
141 // Provider name
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
142 ++strcount;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
143 for(int prbc = 0; prbc < provider->probe_count; ++prbc) {
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
144 JVM_DTraceProbe* p = &(provider->probes[prbc]);
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6605
diff changeset
145 Symbol* sig = Method::resolve_jmethod_id(p->method)->signature();
116
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
146 // function + name + one per argument
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
147 strcount += 2 + ArgumentCount(sig).size();
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
148 }
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
149 }
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
150
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
151 // Create place for string offsets
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
152 uint32_t* stroffs = NEW_RESOURCE_ARRAY(uint32_t, strcount + 1);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
153 uint32_t string_index = 0;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
154 uint32_t curstr = 0;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
155
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
156 // First we need an empty string: ""
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
157 stroffs[curstr++] = string_index;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
158 string_index += strlen("") + 1;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
159
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
160 for(int prvc = 0; prvc < providers_count; ++prvc) {
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
161 JVM_DTraceProvider* provider = &providers[prvc];
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
162 char* provider_name = java_lang_String::as_utf8_string(
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
163 JNIHandles::resolve_non_null(provider->name));
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
164 stroffs[curstr++] = string_index;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
165 string_index += strlen(provider_name) + 1;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
166
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
167 // All probes
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
168 for(int prbc = 0; prbc < provider->probe_count; ++prbc) {
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
169 JVM_DTraceProbe* p = &(provider->probes[prbc]);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
170
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
171 char* function = java_lang_String::as_utf8_string(
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
172 JNIHandles::resolve_non_null(p->function));
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
173 stroffs[curstr++] = string_index;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
174 string_index += strlen(function) + 1;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
175
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
176 char* name = java_lang_String::as_utf8_string(
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
177 JNIHandles::resolve_non_null(p->name));
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
178 stroffs[curstr++] = string_index;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
179 string_index += strlen(name) + 1;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
180
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6605
diff changeset
181 Symbol* sig = Method::resolve_jmethod_id(p->method)->signature();
116
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
182 SignatureStream ss(sig);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
183 for ( ; !ss.at_return_type(); ss.next()) {
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
184 BasicType bt = ss.type();
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
185 const char* t = NULL;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
186 if (bt == T_OBJECT &&
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
187 ss.as_symbol_or_null() == vmSymbols::java_lang_String()) {
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
188 t = string_sig;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
189 } else if (bt == T_LONG) {
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
190 t = long_sig;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
191 } else {
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
192 t = int_sig;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
193 }
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
194 stroffs[curstr++] = string_index;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
195 string_index += strlen(t) + 1;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
196 }
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
197 }
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
198 }
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
199 secoffs[STRTAB] = offset;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
200 secsize[STRTAB] = string_index;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
201 offset += string_index;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
202
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
203 // Calculate the size of the rest
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
204 for(int prvc = 0; prvc < providers_count; ++prvc) {
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
205 JVM_DTraceProvider* provider = &providers[prvc];
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
206 size_t provider_sec = PROVIDERS + prvc * 4;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
207 size_t probe_sec = PROBES + prvc * 4;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
208 size_t probeoffs_sec = PROBE_OFFSETS + prvc * 4;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
209 size_t argoffs_sec = ARG_OFFSETS + prvc * 4;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
210
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
211 // Allocate space for the provider data struction
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
212 secoffs[provider_sec] = align_size_up(offset, alignment_for[PROVIDERS]);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
213 secsize[provider_sec] = sizeof(dof_provider_t);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
214 offset = secoffs[provider_sec] + secsize[provider_sec];
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
215
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
216 // Allocate space for all the probes
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
217 secoffs[probe_sec] = align_size_up(offset, alignment_for[PROBES]);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
218 secsize[probe_sec] = sizeof(dof_probe_t) * provider->probe_count;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
219 offset = secoffs[probe_sec] + secsize[probe_sec];
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
220
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
221 // Allocate space for the probe offsets
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
222 secoffs[probeoffs_sec] = align_size_up(offset, alignment_for[PROBE_OFFSETS]);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
223 secsize[probeoffs_sec] = sizeof(uint32_t) * provider->probe_count;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
224 offset = secoffs[probeoffs_sec] + secsize[probeoffs_sec];
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
225
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
226 // We need number of arguments argoffs
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
227 uint32_t argscount = 0;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
228 for(int prbc = 0; prbc < provider->probe_count; ++prbc) {
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
229 JVM_DTraceProbe* p = &(provider->probes[prbc]);
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6605
diff changeset
230 Symbol* sig = Method::resolve_jmethod_id(p->method)->signature();
116
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
231 argscount += ArgumentCount(sig).size();
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
232 }
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
233 secoffs[argoffs_sec] = align_size_up(offset, alignment_for[ARG_OFFSETS]);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
234 secsize[argoffs_sec] = sizeof(uint8_t) * argscount;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
235 offset = secoffs[argoffs_sec] + secsize[argoffs_sec];
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
236 }
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
237
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
238 uint32_t size = offset;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
239
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
240 uint8_t* dof = NEW_RESOURCE_ARRAY(uint8_t, size);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
241 if (!dof) {
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
242 return -1;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
243 }
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
244 memset((void*)dof, 0, size);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
245
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
246 // Fill memory with proper values
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
247 dof_hdr_t* hdr = (dof_hdr_t*)dof;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
248 hdr->dofh_ident[DOF_ID_MAG0] = DOF_MAG_MAG0;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
249 hdr->dofh_ident[DOF_ID_MAG1] = DOF_MAG_MAG1;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
250 hdr->dofh_ident[DOF_ID_MAG2] = DOF_MAG_MAG2;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
251 hdr->dofh_ident[DOF_ID_MAG3] = DOF_MAG_MAG3;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
252 hdr->dofh_ident[DOF_ID_MODEL] = DOF_MODEL_NATIVE; // No variants
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
253 hdr->dofh_ident[DOF_ID_ENCODING] = DOF_ENCODE_NATIVE; // No variants
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
254 hdr->dofh_ident[DOF_ID_VERSION] = DOF_VERSION_1; // No variants
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
255 hdr->dofh_ident[DOF_ID_DIFVERS] = DIF_VERSION_2; // No variants
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
256 // all other fields of ident to zero
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
257
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
258 hdr->dofh_flags = 0;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
259 hdr->dofh_hdrsize = sizeof(dof_hdr_t);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
260 hdr->dofh_secsize = sizeof(dof_sec_t);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
261 hdr->dofh_secnum = num_sections;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
262 hdr->dofh_secoff = sizeof(dof_hdr_t);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
263 hdr->dofh_loadsz = size;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
264 hdr->dofh_filesz = size;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
265
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
266 // First section: STRTAB
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
267 dof_sec_t* sec = (dof_sec_t*)(dof + sizeof(dof_hdr_t));
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
268 sec->dofs_type = DOF_SECT_STRTAB;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
269 sec->dofs_align = alignment_for[STRTAB];
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
270 sec->dofs_flags = DOF_SECF_LOAD;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
271 sec->dofs_entsize = 0;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
272 sec->dofs_offset = secoffs[STRTAB];
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
273 sec->dofs_size = secsize[STRTAB];
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
274 // Make data for this section
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
275 char* str = (char*)(dof + sec->dofs_offset);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
276
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
277 *str = 0; str += 1; // ""
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
278
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
279 // Run through all strings again
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
280 for(int prvc = 0; prvc < providers_count; ++prvc) {
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
281 JVM_DTraceProvider* provider = &providers[prvc];
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
282 char* provider_name = java_lang_String::as_utf8_string(
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
283 JNIHandles::resolve_non_null(provider->name));
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
284 strcpy(str, provider_name);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
285 str += strlen(provider_name) + 1;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
286
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
287 // All probes
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
288 for(int prbc = 0; prbc < provider->probe_count; ++prbc) {
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
289 JVM_DTraceProbe* p = &(provider->probes[prbc]);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
290
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
291 char* function = java_lang_String::as_utf8_string(
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
292 JNIHandles::resolve_non_null(p->function));
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
293 strcpy(str, function);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
294 str += strlen(str) + 1;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
295
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
296 char* name = java_lang_String::as_utf8_string(
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
297 JNIHandles::resolve_non_null(p->name));
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
298 strcpy(str, name);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
299 str += strlen(name) + 1;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
300
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6605
diff changeset
301 Symbol* sig = Method::resolve_jmethod_id(p->method)->signature();
116
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
302 SignatureStream ss(sig);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
303 for ( ; !ss.at_return_type(); ss.next()) {
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
304 BasicType bt = ss.type();
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
305 const char* t;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
306 if (bt == T_OBJECT &&
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
307 ss.as_symbol_or_null() == vmSymbols::java_lang_String()) {
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
308 t = string_sig;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
309 } else if (bt == T_LONG) {
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
310 t = long_sig;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
311 } else {
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
312 t = int_sig;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
313 }
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
314 strcpy(str, t);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
315 str += strlen(t) + 1;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
316 }
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
317 }
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
318 }
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
319
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
320 curstr = 1;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
321 for(int prvc = 0; prvc < providers_count; ++prvc) {
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
322 JVM_DTraceProvider* provider = &providers[prvc];
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
323 size_t provider_sec = PROVIDERS + prvc * 4;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
324 size_t probe_sec = PROBES + prvc * 4;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
325 size_t probeoffs_sec = PROBE_OFFSETS + prvc * 4;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
326 size_t argoffs_sec = ARG_OFFSETS + prvc * 4;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
327
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
328 // PROVIDER ///////////////////////////////////////////////////////////////
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
329 // Section header
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
330 sec = (dof_sec_t*)
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
331 (dof + sizeof(dof_hdr_t) + sizeof(dof_sec_t) * provider_sec);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
332 sec->dofs_type = DOF_SECT_PROVIDER;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
333 sec->dofs_align = alignment_for[PROVIDERS];
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
334 sec->dofs_flags = DOF_SECF_LOAD;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
335 sec->dofs_entsize = 0;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
336 sec->dofs_offset = secoffs[provider_sec];
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
337 sec->dofs_size = secsize[provider_sec];
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
338 // Make provider decriiption
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
339 dof_provider_t* prv = (dof_provider_t*)(dof + sec->dofs_offset);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
340 prv->dofpv_strtab = STRTAB;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
341 prv->dofpv_probes = probe_sec;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
342 prv->dofpv_prargs = argoffs_sec;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
343 prv->dofpv_proffs = probeoffs_sec;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
344 prv->dofpv_name = stroffs[curstr++]; // Index in string table
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
345 prv->dofpv_provattr = DOF_ATTR(
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
346 provider->providerAttributes.nameStability,
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
347 provider->providerAttributes.dataStability,
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
348 provider->providerAttributes.dependencyClass);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
349 prv->dofpv_modattr = DOF_ATTR(
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
350 provider->moduleAttributes.nameStability,
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
351 provider->moduleAttributes.dataStability,
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
352 provider->moduleAttributes.dependencyClass);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
353 prv->dofpv_funcattr = DOF_ATTR(
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
354 provider->functionAttributes.nameStability,
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
355 provider->functionAttributes.dataStability,
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
356 provider->functionAttributes.dependencyClass);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
357 prv->dofpv_nameattr = DOF_ATTR(
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
358 provider->nameAttributes.nameStability,
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
359 provider->nameAttributes.dataStability,
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
360 provider->nameAttributes.dependencyClass);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
361 prv->dofpv_argsattr = DOF_ATTR(
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
362 provider->argsAttributes.nameStability,
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
363 provider->argsAttributes.dataStability,
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
364 provider->argsAttributes.dependencyClass);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
365
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
366 // PROBES /////////////////////////////////////////////////////////////////
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
367 // Section header
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
368 sec = (dof_sec_t*)
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
369 (dof + sizeof(dof_hdr_t) + sizeof(dof_sec_t) * probe_sec);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
370 sec->dofs_type = DOF_SECT_PROBES;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
371 sec->dofs_align = alignment_for[PROBES];
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
372 sec->dofs_flags = DOF_SECF_LOAD;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
373 sec->dofs_entsize = sizeof(dof_probe_t);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
374 sec->dofs_offset = secoffs[probe_sec];
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
375 sec->dofs_size = secsize[probe_sec];
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
376 // Make probes descriptions
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
377 uint32_t argsoffs = 0;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
378 for(int prbc = 0; prbc < provider->probe_count; ++prbc) {
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
379 JVM_DTraceProbe* probe = &(provider->probes[prbc]);
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6605
diff changeset
380 Method* m = Method::resolve_jmethod_id(probe->method);
116
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
381 int arg_count = ArgumentCount(m->signature()).size();
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
382 assert(m->code() != NULL, "must have an nmethod");
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
383
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
384 dof_probe_t* prb =
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
385 (dof_probe_t*)(dof + sec->dofs_offset + prbc * sizeof(dof_probe_t));
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
386
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
387 prb->dofpr_addr = (uint64_t)m->code()->entry_point();
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
388 prb->dofpr_func = stroffs[curstr++]; // Index in string table
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
389 prb->dofpr_name = stroffs[curstr++]; // Index in string table
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
390 prb->dofpr_nargv = stroffs[curstr ]; // Index in string table
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
391 // We spent siglen strings here
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
392 curstr += arg_count;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
393 prb->dofpr_xargv = prb->dofpr_nargv; // Same bunch of strings
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
394 prb->dofpr_argidx = argsoffs;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
395 prb->dofpr_offidx = prbc;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
396 prb->dofpr_nargc = arg_count;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
397 prb->dofpr_xargc = arg_count;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
398 prb->dofpr_noffs = 1; // Number of offsets
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
399 // Next bunch of offsets
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
400 argsoffs += arg_count;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
401 }
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
402
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
403 // PROFFS /////////////////////////////////////////////////////////////////
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
404 // Section header
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
405 sec = (dof_sec_t*)
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
406 (dof + sizeof(dof_hdr_t) + sizeof(dof_sec_t) * probeoffs_sec);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
407 sec->dofs_type = DOF_SECT_PROFFS;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
408 sec->dofs_align = alignment_for[PROBE_OFFSETS];
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
409 sec->dofs_flags = DOF_SECF_LOAD;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
410 sec->dofs_entsize = sizeof(uint32_t);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
411 sec->dofs_offset = secoffs[probeoffs_sec];
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
412 sec->dofs_size = secsize[probeoffs_sec];
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
413 // Make offsets
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
414 for (int prbc = 0; prbc < provider->probe_count; ++prbc) {
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
415 uint32_t* pof =
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
416 (uint32_t*)(dof + sec->dofs_offset + sizeof(uint32_t) * prbc);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
417 JVM_DTraceProbe* probe = &(provider->probes[prbc]);
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6605
diff changeset
418 Method* m = Method::resolve_jmethod_id(probe->method);
116
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
419 *pof = m->code()->trap_offset();
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
420 }
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
421
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
422 // PRARGS /////////////////////////////////////////////////////////////////
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
423 // Section header
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
424 sec = (dof_sec_t*)
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
425 (dof + sizeof(dof_hdr_t) + sizeof(dof_sec_t) * argoffs_sec);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
426 sec->dofs_type = DOF_SECT_PRARGS;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
427 sec->dofs_align = alignment_for[ARG_OFFSETS];
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
428 sec->dofs_flags = DOF_SECF_LOAD;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
429 sec->dofs_entsize = sizeof(uint8_t);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
430 sec->dofs_offset = secoffs[argoffs_sec];
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
431 sec->dofs_size = secsize[argoffs_sec];
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
432 // Make arguments
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
433 uint8_t* par = (uint8_t*)(dof + sec->dofs_offset);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
434 for (int prbc = 0; prbc < provider->probe_count; ++prbc) {
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
435 JVM_DTraceProbe* p = &(provider->probes[prbc]);
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6605
diff changeset
436 Symbol* sig = Method::resolve_jmethod_id(p->method)->signature();
116
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
437 uint8_t count = (uint8_t)ArgumentCount(sig).size();
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
438 for (uint8_t i = 0; i < count; ++i) {
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
439 *par++ = i;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
440 }
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
441 }
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
442 }
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
443
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
444 // Register module
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
445 return dof_register(module, dof, moduleBaseAddress);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
446 }
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
447
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
448
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
449 void DTraceJSDT::pd_dispose(int handle) {
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
450 int fd;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
451 if (handle == -1) {
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
452 return;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
453 }
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
454 fd = dofhelper_open();
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
455 if (fd < 0)
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
456 return;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
457 ioctl(fd, DTRACEHIOC_REMOVE, handle);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
458 close(fd);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
459 }
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
460
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
461 jboolean DTraceJSDT::pd_is_supported() {
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
462 int fd = dofhelper_open();
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
463 if (fd < 0) {
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
464 return false;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
465 }
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
466 close(fd);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
467 return true;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
468 }
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
469
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
470 static const char* dofSecTypeFor(uint32_t type) {
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
471 switch (type) {
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
472 case 0: return "DOF_SECT_NONE";
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
473 case 1: return "DOF_SECT_COMMENTS";
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
474 case 2: return "DOF_SECT_SOURCE";
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
475 case 3: return "DOF_SECT_ECBDESC";
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
476 case 4: return "DOF_SECT_PROBEDESC";
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
477 case 5: return "DOF_SECT_ACTDESC";
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
478 case 6: return "DOF_SECT_DIFOHDR";
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
479 case 7: return "DOF_SECT_DIF";
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
480 case 8: return "DOF_SECT_STRTAB";
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
481 case 9: return "DOF_SECT_VARTAB";
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
482 case 10: return "DOF_SECT_RELTAB";
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
483 case 11: return "DOF_SECT_TYPETAB";
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
484 case 12: return "DOF_SECT_URELHDR";
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
485 case 13: return "DOF_SECT_KRELHDR";
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
486 case 14: return "DOF_SECT_OPTDESC";
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
487 case 15: return "DOF_SECT_PROVIDER";
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
488 case 16: return "DOF_SECT_PROBES";
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
489 case 17: return "DOF_SECT_PRARGS";
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
490 case 18: return "DOF_SECT_PROFFS";
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
491 case 19: return "DOF_SECT_INTTAB";
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
492 case 20: return "DOF_SECT_UTSNAME";
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
493 case 21: return "DOF_SECT_XLTAB";
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
494 case 22: return "DOF_SECT_XLMEMBERS";
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
495 case 23: return "DOF_SECT_XLIMPORT";
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
496 case 24: return "DOF_SECT_XLEXPORT";
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
497 case 25: return "DOF_SECT_PREXPORT";
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
498 case 26: return "DOF_SECT_PRENOFFS";
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
499 default: return "<unknown>";
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
500 }
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
501 }
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
502
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
503 static void printDOFStringTabSec(void* dof, dof_sec_t* sec) {
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
504 size_t tab = sec->dofs_offset;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
505 size_t limit = sec->dofs_size;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
506 tty->print_cr("// String Table:");
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
507 for (size_t idx = 0; idx < limit; /*empty*/) {
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
508 char* str = ((char*)dof) + tab + idx;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
509 tty->print_cr("// [0x%x + 0x%x] '%s'", tab, idx, str);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
510 idx += strlen(str) + 1;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
511 }
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
512 }
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
513
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
514 static void printDOFProviderSec(void* dof, dof_sec_t* sec) {
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
515 dof_provider_t* prov = (dof_provider_t*)((char*)dof + sec->dofs_offset);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
516 tty->print_cr("// dof_provider_t {");
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
517 tty->print_cr("// dofpv_strtab = %d", prov->dofpv_strtab);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
518 tty->print_cr("// dofpv_probes = %d", prov->dofpv_probes);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
519 tty->print_cr("// dofpv_prargs = %d", prov->dofpv_prargs);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
520 tty->print_cr("// dofpv_proffs = %d", prov->dofpv_proffs);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
521 tty->print_cr("// dofpv_name = 0x%x", prov->dofpv_name);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
522 tty->print_cr("// dofpv_provattr = 0x%08x", prov->dofpv_provattr);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
523 tty->print_cr("// dofpv_modattr = 0x%08x", prov->dofpv_modattr);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
524 tty->print_cr("// dofpv_funcattr = 0x%08x", prov->dofpv_funcattr);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
525 tty->print_cr("// dofpv_nameattr = 0x%08x", prov->dofpv_nameattr);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
526 tty->print_cr("// dofpv_argsattr = 0x%08x", prov->dofpv_argsattr);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
527 tty->print_cr("// }");
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
528 }
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
529
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
530 static void printDOFProbesSec(void* dof, dof_sec_t* sec) {
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
531 size_t idx = sec->dofs_offset;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
532 size_t limit = idx + sec->dofs_size;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
533 for (size_t idx = sec->dofs_offset; idx < limit; idx += sec->dofs_entsize) {
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
534 dof_probe_t* prb = (dof_probe_t*)((char*)dof + idx);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
535 tty->print_cr("// dof_probe_t {");
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
536 tty->print_cr("// dofpr_addr = 0x%016llx", prb->dofpr_addr);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
537 tty->print_cr("// dofpr_func = 0x%x", prb->dofpr_func);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
538 tty->print_cr("// dofpr_name = 0x%x", prb->dofpr_name);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
539 tty->print_cr("// dofpr_nargv = 0x%x", prb->dofpr_nargv);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
540 tty->print_cr("// dofpr_xargv = 0x%x", prb->dofpr_xargv);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
541 tty->print_cr("// dofpr_argidx = 0x%x", prb->dofpr_argidx);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
542 tty->print_cr("// dofpr_offidx = 0x%x", prb->dofpr_offidx);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
543 tty->print_cr("// dofpr_nargc = %d", prb->dofpr_nargc);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
544 tty->print_cr("// dofpr_xargc = %d", prb->dofpr_xargc);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
545 tty->print_cr("// dofpr_noffs = %d", prb->dofpr_noffs);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
546 tty->print_cr("// }");
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
547 }
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
548 }
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
549
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
550 static void printDOFOffsetsSec(void* dof, dof_sec_t* sec) {
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
551 size_t tab = sec->dofs_offset;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
552 size_t limit = sec->dofs_size;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
553 tty->print_cr("// Offsets:");
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
554 for (size_t idx = 0; idx < limit; idx += sec->dofs_entsize) {
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
555 uint32_t* off = (uint32_t*)((char*)dof + tab + idx);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
556 tty->print_cr("// [0x%x + 0x%x]: %d", tab, idx, *off);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
557 }
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
558 }
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
559
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
560 static void printDOFArgsSec(void* dof, dof_sec_t* sec) {
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
561 size_t tab = sec->dofs_offset;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
562 size_t limit = sec->dofs_size;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
563 tty->print_cr("// Arguments:");
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
564 for (size_t idx = 0; idx < limit; idx += sec->dofs_entsize) {
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
565 uint8_t* arg = (uint8_t*)((char*)dof + tab + idx);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
566 tty->print_cr("// [0x%x + 0x%x]: %d", tab, idx, *arg);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
567 }
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
568 }
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
569
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
570 static void printDOFSection(void* dof, dof_sec_t* sec) {
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
571 tty->print_cr("// dof_sec_t {");
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
572 tty->print_cr("// dofs_type = 0x%x /* %s */",
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
573 sec->dofs_type, dofSecTypeFor(sec->dofs_type));
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
574 tty->print_cr("// dofs_align = %d", sec->dofs_align);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
575 tty->print_cr("// dofs_flags = 0x%x", sec->dofs_flags);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
576 tty->print_cr("// dofs_entsize = %d", sec->dofs_entsize);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
577 tty->print_cr("// dofs_offset = 0x%llx", sec->dofs_offset);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
578 tty->print_cr("// dofs_size = %lld", sec->dofs_size);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
579 tty->print_cr("// }");
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
580 switch (sec->dofs_type) {
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
581 case DOF_SECT_STRTAB: printDOFStringTabSec(dof, sec); break;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
582 case DOF_SECT_PROVIDER: printDOFProviderSec(dof, sec); break;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
583 case DOF_SECT_PROBES: printDOFProbesSec(dof, sec); break;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
584 case DOF_SECT_PROFFS: printDOFOffsetsSec(dof, sec); break;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
585 case DOF_SECT_PRARGS: printDOFArgsSec(dof, sec); break;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
586 default: tty->print_cr("// <section type not recognized>");
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
587 }
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
588 }
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
589
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
590 static void printDOFHeader(dof_hdr_t* hdr) {
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
591 tty->print_cr("// dof_hdr_t {");
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
592 tty->print_cr("// dofh_ident[DOF_ID_MAG0] = 0x%x",
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
593 hdr->dofh_ident[DOF_ID_MAG0]);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
594 tty->print_cr("// dofh_ident[DOF_ID_MAG1] = 0x%x",
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
595 hdr->dofh_ident[DOF_ID_MAG1]);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
596 tty->print_cr("// dofh_ident[DOF_ID_MAG2] = 0x%x",
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
597 hdr->dofh_ident[DOF_ID_MAG2]);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
598 tty->print_cr("// dofh_ident[DOF_ID_MAG3] = 0x%x",
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
599 hdr->dofh_ident[DOF_ID_MAG3]);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
600 tty->print_cr("// dofh_ident[DOF_ID_MODEL] = 0x%x",
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
601 hdr->dofh_ident[DOF_ID_MODEL]);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
602 tty->print_cr("// dofh_ident[DOF_ID_ENCODING] = 0x%x",
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
603 hdr->dofh_ident[DOF_ID_ENCODING]);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
604 tty->print_cr("// dofh_ident[DOF_ID_VERSION] = 0x%x",
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
605 hdr->dofh_ident[DOF_ID_VERSION]);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
606 tty->print_cr("// dofh_ident[DOF_ID_DIFVERS] = 0x%x",
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
607 hdr->dofh_ident[DOF_ID_DIFVERS]);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
608 tty->print_cr("// dofh_flags = 0x%x", hdr->dofh_flags);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
609 tty->print_cr("// dofh_hdrsize = %d", hdr->dofh_hdrsize);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
610 tty->print_cr("// dofh_secsize = %d", hdr->dofh_secsize);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
611 tty->print_cr("// dofh_secnum = %d", hdr->dofh_secnum);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
612 tty->print_cr("// dofh_secoff = %lld", hdr->dofh_secoff);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
613 tty->print_cr("// dofh_loadsz = %lld", hdr->dofh_loadsz);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
614 tty->print_cr("// dofh_filesz = %lld", hdr->dofh_filesz);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
615 tty->print_cr("// }");
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
616 }
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
617
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
618 static void printDOF(void* dof) {
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
619 dof_hdr_t* hdr = (dof_hdr_t*)dof;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
620 printDOFHeader(hdr);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
621 for (int i = 0; i < hdr->dofh_secnum; ++i) {
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
622 dof_sec_t* sec =
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
623 (dof_sec_t*)((char*)dof + sizeof(dof_hdr_t) + i * sizeof(dof_sec_t));
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
624 tty->print_cr("// [Section #%d]", i);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
625 printDOFSection(dof, sec);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
626 }
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
627 }
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
628
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
629 static void printDOFHelper(dof_helper_t* helper) {
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
630 tty->print_cr("// dof_helper_t {");
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
631 tty->print_cr("// dofhp_mod = \"%s\"", helper->dofhp_mod);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
632 tty->print_cr("// dofhp_addr = 0x%016llx", helper->dofhp_addr);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
633 tty->print_cr("// dofhp_dof = 0x%016llx", helper->dofhp_dof);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
634 printDOF((void*)helper->dofhp_dof);
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
635 tty->print_cr("// }");
6605
4ee06e614636 7116786: RFE: Detailed information on VerifyErrors
kamg
parents: 2426
diff changeset
636 size_t len = ((dof_hdr_t*)helper)->dofh_loadsz;
4ee06e614636 7116786: RFE: Detailed information on VerifyErrors
kamg
parents: 2426
diff changeset
637 tty->print_data((void*)helper->dofhp_dof, len, true);
116
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
638 }
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
639
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
640 #else // ndef HAVE_DTRACE_H
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
641
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
642 // Get here if we're not building on at least Solaris 10
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
643 int DTraceJSDT::pd_activate(
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
644 void* baseAddress, jstring module,
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
645 jint provider_count, JVM_DTraceProvider* providers) {
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
646 return -1;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
647 }
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
648
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
649 void DTraceJSDT::pd_dispose(int handle) {
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
650 }
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
651
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
652 jboolean DTraceJSDT::pd_is_supported() {
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
653 return false;
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
654 }
018d5b58dd4f 6537506: Provide a mechanism for specifying Java-level USDT-like dtrace probes
kamg
parents:
diff changeset
655 #endif