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 } |