Mercurial > hg > truffle
comparison src/os/solaris/vm/dtraceJSDT_solaris.cpp @ 2177:3582bf76420e
6990754: Use native memory and reference counting to implement SymbolTable
Summary: move symbols from permgen into C heap and reference count them
Reviewed-by: never, acorn, jmasa, stefank
author | coleenp |
---|---|
date | Thu, 27 Jan 2011 16:11:27 -0800 |
parents | f95d63e2154a |
children | 1d1603768966 |
comparison
equal
deleted
inserted
replaced
2176:27e4ea99855d | 2177:3582bf76420e |
---|---|
140 JVM_DTraceProvider* provider = &providers[prvc]; | 140 JVM_DTraceProvider* provider = &providers[prvc]; |
141 // Provider name | 141 // Provider name |
142 ++strcount; | 142 ++strcount; |
143 for(int prbc = 0; prbc < provider->probe_count; ++prbc) { | 143 for(int prbc = 0; prbc < provider->probe_count; ++prbc) { |
144 JVM_DTraceProbe* p = &(provider->probes[prbc]); | 144 JVM_DTraceProbe* p = &(provider->probes[prbc]); |
145 symbolOop sig = JNIHandles::resolve_jmethod_id(p->method)->signature(); | 145 Symbol* sig = JNIHandles::resolve_jmethod_id(p->method)->signature(); |
146 // function + name + one per argument | 146 // function + name + one per argument |
147 strcount += 2 + ArgumentCount(sig).size(); | 147 strcount += 2 + ArgumentCount(sig).size(); |
148 } | 148 } |
149 } | 149 } |
150 | 150 |
176 char* name = java_lang_String::as_utf8_string( | 176 char* name = java_lang_String::as_utf8_string( |
177 JNIHandles::resolve_non_null(p->name)); | 177 JNIHandles::resolve_non_null(p->name)); |
178 stroffs[curstr++] = string_index; | 178 stroffs[curstr++] = string_index; |
179 string_index += strlen(name) + 1; | 179 string_index += strlen(name) + 1; |
180 | 180 |
181 symbolOop sig = JNIHandles::resolve_jmethod_id(p->method)->signature(); | 181 Symbol* sig = JNIHandles::resolve_jmethod_id(p->method)->signature(); |
182 SignatureStream ss(sig); | 182 SignatureStream ss(sig); |
183 for ( ; !ss.at_return_type(); ss.next()) { | 183 for ( ; !ss.at_return_type(); ss.next()) { |
184 BasicType bt = ss.type(); | 184 BasicType bt = ss.type(); |
185 const char* t = NULL; | 185 const char* t = NULL; |
186 if (bt == T_OBJECT && | 186 if (bt == T_OBJECT && |
225 | 225 |
226 // We need number of arguments argoffs | 226 // We need number of arguments argoffs |
227 uint32_t argscount = 0; | 227 uint32_t argscount = 0; |
228 for(int prbc = 0; prbc < provider->probe_count; ++prbc) { | 228 for(int prbc = 0; prbc < provider->probe_count; ++prbc) { |
229 JVM_DTraceProbe* p = &(provider->probes[prbc]); | 229 JVM_DTraceProbe* p = &(provider->probes[prbc]); |
230 symbolOop sig = JNIHandles::resolve_jmethod_id(p->method)->signature(); | 230 Symbol* sig = JNIHandles::resolve_jmethod_id(p->method)->signature(); |
231 argscount += ArgumentCount(sig).size(); | 231 argscount += ArgumentCount(sig).size(); |
232 } | 232 } |
233 secoffs[argoffs_sec] = align_size_up(offset, alignment_for[ARG_OFFSETS]); | 233 secoffs[argoffs_sec] = align_size_up(offset, alignment_for[ARG_OFFSETS]); |
234 secsize[argoffs_sec] = sizeof(uint8_t) * argscount; | 234 secsize[argoffs_sec] = sizeof(uint8_t) * argscount; |
235 offset = secoffs[argoffs_sec] + secsize[argoffs_sec]; | 235 offset = secoffs[argoffs_sec] + secsize[argoffs_sec]; |
296 char* name = java_lang_String::as_utf8_string( | 296 char* name = java_lang_String::as_utf8_string( |
297 JNIHandles::resolve_non_null(p->name)); | 297 JNIHandles::resolve_non_null(p->name)); |
298 strcpy(str, name); | 298 strcpy(str, name); |
299 str += strlen(name) + 1; | 299 str += strlen(name) + 1; |
300 | 300 |
301 symbolOop sig = JNIHandles::resolve_jmethod_id(p->method)->signature(); | 301 Symbol* sig = JNIHandles::resolve_jmethod_id(p->method)->signature(); |
302 SignatureStream ss(sig); | 302 SignatureStream ss(sig); |
303 for ( ; !ss.at_return_type(); ss.next()) { | 303 for ( ; !ss.at_return_type(); ss.next()) { |
304 BasicType bt = ss.type(); | 304 BasicType bt = ss.type(); |
305 const char* t; | 305 const char* t; |
306 if (bt == T_OBJECT && | 306 if (bt == T_OBJECT && |
431 sec->dofs_size = secsize[argoffs_sec]; | 431 sec->dofs_size = secsize[argoffs_sec]; |
432 // Make arguments | 432 // Make arguments |
433 uint8_t* par = (uint8_t*)(dof + sec->dofs_offset); | 433 uint8_t* par = (uint8_t*)(dof + sec->dofs_offset); |
434 for (int prbc = 0; prbc < provider->probe_count; ++prbc) { | 434 for (int prbc = 0; prbc < provider->probe_count; ++prbc) { |
435 JVM_DTraceProbe* p = &(provider->probes[prbc]); | 435 JVM_DTraceProbe* p = &(provider->probes[prbc]); |
436 symbolOop sig = JNIHandles::resolve_jmethod_id(p->method)->signature(); | 436 Symbol* sig = JNIHandles::resolve_jmethod_id(p->method)->signature(); |
437 uint8_t count = (uint8_t)ArgumentCount(sig).size(); | 437 uint8_t count = (uint8_t)ArgumentCount(sig).size(); |
438 for (uint8_t i = 0; i < count; ++i) { | 438 for (uint8_t i = 0; i < count; ++i) { |
439 *par++ = i; | 439 *par++ = i; |
440 } | 440 } |
441 } | 441 } |