}
static void
-clause_exc (MonoProfiler *prof, MonoMethod *method, int clause_type, int clause_num)
+clause_exc (MonoProfiler *prof, MonoMethod *method, int clause_type, int clause_num, MonoObject *exc)
{
ENTER_LOG (&exception_clauses_ctr, logbuffer,
EVENT_SIZE /* event */ +
emit_byte (logbuffer, clause_type);
emit_value (logbuffer, clause_num);
emit_method (logbuffer, method);
+ emit_obj (logbuffer, exc);
EXIT_LOG;
}
if (config.effective_mask & PROFLOG_EXCEPTION_EVENTS) {
events |= MONO_PROFILE_EXCEPTIONS;
- mono_profiler_install_exception (throw_exc, method_exc_leave, clause_exc);
+ mono_profiler_install_exception (throw_exc, method_exc_leave, NULL);
+ mono_profiler_install_exception_clause (clause_exc);
}
if (config.effective_mask & PROFLOG_ALLOCATION_EVENTS) {
int clause_num = decode_uleb128 (p, &p);
int64_t ptrdiff = decode_sleb128 (p, &p);
method_base += ptrdiff;
+ if (ctx->data_version > 13)
+ decode_uleb128 (p, &p); // exception object
if (record)
clause_summary [clause_type]++;
if (debug)