comparison 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
comparison
equal deleted inserted replaced
6724:36d1d483d5d6 6725:da91efe96a93
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 Symbol* sig = JNIHandles::resolve_jmethod_id(p->method)->signature(); 145 Symbol* sig = Method::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 Symbol* sig = JNIHandles::resolve_jmethod_id(p->method)->signature(); 181 Symbol* sig = Method::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 Symbol* sig = JNIHandles::resolve_jmethod_id(p->method)->signature(); 230 Symbol* sig = Method::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 Symbol* sig = JNIHandles::resolve_jmethod_id(p->method)->signature(); 301 Symbol* sig = Method::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 &&
375 sec->dofs_size = secsize[probe_sec]; 375 sec->dofs_size = secsize[probe_sec];
376 // Make probes descriptions 376 // Make probes descriptions
377 uint32_t argsoffs = 0; 377 uint32_t argsoffs = 0;
378 for(int prbc = 0; prbc < provider->probe_count; ++prbc) { 378 for(int prbc = 0; prbc < provider->probe_count; ++prbc) {
379 JVM_DTraceProbe* probe = &(provider->probes[prbc]); 379 JVM_DTraceProbe* probe = &(provider->probes[prbc]);
380 methodOop m = JNIHandles::resolve_jmethod_id(probe->method); 380 Method* m = Method::resolve_jmethod_id(probe->method);
381 int arg_count = ArgumentCount(m->signature()).size(); 381 int arg_count = ArgumentCount(m->signature()).size();
382 assert(m->code() != NULL, "must have an nmethod"); 382 assert(m->code() != NULL, "must have an nmethod");
383 383
384 dof_probe_t* prb = 384 dof_probe_t* prb =
385 (dof_probe_t*)(dof + sec->dofs_offset + prbc * sizeof(dof_probe_t)); 385 (dof_probe_t*)(dof + sec->dofs_offset + prbc * sizeof(dof_probe_t));
413 // Make offsets 413 // Make offsets
414 for (int prbc = 0; prbc < provider->probe_count; ++prbc) { 414 for (int prbc = 0; prbc < provider->probe_count; ++prbc) {
415 uint32_t* pof = 415 uint32_t* pof =
416 (uint32_t*)(dof + sec->dofs_offset + sizeof(uint32_t) * prbc); 416 (uint32_t*)(dof + sec->dofs_offset + sizeof(uint32_t) * prbc);
417 JVM_DTraceProbe* probe = &(provider->probes[prbc]); 417 JVM_DTraceProbe* probe = &(provider->probes[prbc]);
418 methodOop m = JNIHandles::resolve_jmethod_id(probe->method); 418 Method* m = Method::resolve_jmethod_id(probe->method);
419 *pof = m->code()->trap_offset(); 419 *pof = m->code()->trap_offset();
420 } 420 }
421 421
422 // PRARGS ///////////////////////////////////////////////////////////////// 422 // PRARGS /////////////////////////////////////////////////////////////////
423 // Section header 423 // Section header
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 Symbol* sig = JNIHandles::resolve_jmethod_id(p->method)->signature(); 436 Symbol* sig = Method::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 }