Sha256: 34a445d67d39bf10b43f5db4dfc0f688ee65fc8972b2f77b4a28e197d458f396

Contents?: true

Size: 1.16 KB

Versions: 1

Compression:

Stored size: 1.16 KB

Contents

#include "cruby.h"
#include "cruby/probes_helper.h"

// TODO: Use vm_dtrace after Ruby 2.5
static inline void
_llrb_insn_trace(rb_thread_t *th, rb_control_frame_t *cfp, rb_event_flag_t flag, VALUE val)
{
  if (RUBY_DTRACE_METHOD_ENTRY_ENABLED() ||
      RUBY_DTRACE_METHOD_RETURN_ENABLED() ||
      RUBY_DTRACE_CMETHOD_ENTRY_ENABLED() ||
      RUBY_DTRACE_CMETHOD_RETURN_ENABLED()) {

    switch (flag) {
      case RUBY_EVENT_CALL:
        RUBY_DTRACE_METHOD_ENTRY_HOOK(th, 0, 0);
        break;
      case RUBY_EVENT_C_CALL:
        RUBY_DTRACE_CMETHOD_ENTRY_HOOK(th, 0, 0);
        break;
      case RUBY_EVENT_RETURN:
        RUBY_DTRACE_METHOD_RETURN_HOOK(th, 0, 0);
        break;
      case RUBY_EVENT_C_RETURN:
        RUBY_DTRACE_CMETHOD_RETURN_HOOK(th, 0, 0);
        break;
    }
  }

  // TODO: Confirm it works!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  // Especially for :line event. We may need to update program counter.
  EXEC_EVENT_HOOK(th, flag, cfp->self, 0, 0, 0 /* id and klass are resolved at callee */, val);
}
void
llrb_insn_trace(VALUE th, VALUE cfp, rb_event_flag_t flag, VALUE val)
{
  _llrb_insn_trace((rb_thread_t *)th, (rb_control_frame_t *)cfp, flag, val);
}

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
llrb-0.0.1 ext/llrb_insn_trace.c