Ruby 2.7.0p0(2019-12-25revision647ee6f091eafcce70ffb75ddf7e121e192ab217)

Data Structures | Macros | Typedefs | Enumerations | Functions
vm_trace.c File Reference
`#include "internal.h"`
`#include "ruby/debug.h"`
`#include "vm_core.h"`
`#include "mjit.h"`
`#include "iseq.h"`
`#include "eval_intern.h"`
`#include "builtin.h"`
`#include "trace_point.rbinc"`

Go to the source code of this file.

## Data Structures
struct | rb_event_hook_struct
struct | rb_tp_struct
struct | rb_postponed_job_struct
struct | rb_workqueue_job

## Macros
#define | MAX_EVENT_NUM 32
#define | MATCH_ANY_FILTER_TH ((rb_thread_t *)1)
#define | C(name, NAME) case RUBY_EVENT_##NAME: CONST_ID(id, #name); return id;
#define | C(name, NAME) CONST_ID(id, #name); if (sym == ID2SYM(id)) return RUBY_EVENT_##NAME
#define | MAX_POSTPONED_JOB 1000
#define | MAX_POSTPONED_JOB_SPECIAL_ADDITION 24

## Typedefs
typedef struct rb_event_hook_struct | rb_event_hook_t
typedef void(* | rb_event_hook_raw_arg_func_t) (VALUE data, const rb_trace_arg_t *arg)
typedef struct rb_tp_struct | rb_tp_t
typedef struct rb_postponed_job_struct | rb_postponed_job_t

## Enumerations
enum | postponed_job_register_result { PJRR_SUCCESS = 0, PJRR_FULL = 1, PJRR_INTERRUPTED = 2 }

## Functions
void | rb_hook_list_mark (rb_hook_list_t *hooks)
void | rb_hook_list_free (rb_hook_list_t *hooks)
void | rb_thread_add_event_hook (VALUE thval, rb_event_hook_func_t func, rb_event_flag_t events, VALUE data)
void | rb_add_event_hook (rb_event_hook_func_t func, rb_event_flag_t events, VALUE data)
void | rb_thread_add_event_hook2 (VALUE thval, rb_event_hook_func_t func, rb_event_flag_t events, VALUE data, rb_event_hook_flag_t hook_flags)
void | rb_add_event_hook2 (rb_event_hook_func_t func, rb_event_flag_t events, VALUE data, rb_event_hook_flag_t hook_flags)
int | rb_thread_remove_event_hook (VALUE thval, rb_event_hook_func_t func)
int | rb_thread_remove_event_hook_with_data (VALUE thval, rb_event_hook_func_t func, VALUE data)
int | rb_remove_event_hook (rb_event_hook_func_t func)
int | rb_remove_event_hook_with_data (rb_event_hook_func_t func, VALUE data)
void | rb_ec_clear_current_thread_trace_func (const rb_execution_context_t *ec)
MJIT_FUNC_EXPORTED void | rb_exec_event_hooks (rb_trace_arg_t *trace_arg, rb_hook_list_t *hooks, int pop_p)
VALUE | rb_suppress_tracing (VALUE(*func)(VALUE), VALUE arg)
struct rb_trace_arg_struct * | rb_tracearg_from_tracepoint (VALUE tpval)
rb_event_flag_t | rb_tracearg_event_flag (rb_trace_arg_t *trace_arg)
VALUE | rb_tracearg_event (rb_trace_arg_t *trace_arg)
VALUE | rb_tracearg_lineno (rb_trace_arg_t *trace_arg)
VALUE | rb_tracearg_path (rb_trace_arg_t *trace_arg)
VALUE | rb_tracearg_parameters (rb_trace_arg_t *trace_arg)
VALUE | rb_tracearg_method_id (rb_trace_arg_t *trace_arg)
VALUE | rb_tracearg_callee_id (rb_trace_arg_t *trace_arg)
VALUE | rb_tracearg_defined_class (rb_trace_arg_t *trace_arg)
VALUE | rb_tracearg_binding (rb_trace_arg_t *trace_arg)
VALUE | rb_tracearg_self (rb_trace_arg_t *trace_arg)
VALUE | rb_tracearg_return_value (rb_trace_arg_t *trace_arg)
VALUE | rb_tracearg_raised_exception (rb_trace_arg_t *trace_arg)
VALUE | rb_tracearg_eval_script (rb_trace_arg_t *trace_arg)
VALUE | rb_tracearg_instruction_sequence (rb_trace_arg_t *trace_arg)
VALUE | rb_tracearg_object (rb_trace_arg_t *trace_arg)
VALUE | rb_tracepoint_enable (VALUE tpval)
const rb_method_definition_t * | rb_method_def (VALUE method)
VALUE | rb_tracepoint_disable (VALUE tpval)
void | rb_hook_list_connect_tracepoint (VALUE target, rb_hook_list_t *list, VALUE tpval, unsigned int target_line)
void | rb_hook_list_remove_tracepoint (rb_hook_list_t *list, VALUE tpval)
VALUE | rb_tracepoint_enabled_p (VALUE tpval)
VALUE | rb_tracepoint_new (VALUE target_thval, rb_event_flag_t events, void(*func)(VALUE, void *), void *data)
void | Init_vm_trace (void)
void | Init_vm_postponed_job (void)
int | rb_postponed_job_register (unsigned int flags, rb_postponed_job_func_t func, void *data)
int | rb_postponed_job_register_one (unsigned int flags, rb_postponed_job_func_t func, void *data)
int | rb_workqueue_register (unsigned flags, rb_postponed_job_func_t func, void *data)
void | rb_postponed_job_flush (rb_vm_t *vm)

## Macro Definition Documentation

## ◆ C [1/2]

#define C | ( |  | name,
|  |  | NAME
| ) |  | case RUBY_EVENT_##NAME: CONST_ID(id, #name); return id;

## ◆ C [2/2]

#define C | ( |  | name,
|  |  | NAME
| ) |  | CONST_ID(id, #name); if (sym == ID2SYM(id)) return RUBY_EVENT_##NAME

## ◆ MATCH_ANY_FILTER_TH

#define MATCH_ANY_FILTER_TH ((rb_thread_t *)1)

Definition at line 215 of file vm_trace.c.

## ◆ MAX_EVENT_NUM

#define MAX_EVENT_NUM 32

Definition at line 50 of file vm_trace.c.

## ◆ MAX_POSTPONED_JOB

#define MAX_POSTPONED_JOB 1000

Definition at line 1536 of file vm_trace.c.

## ◆ MAX_POSTPONED_JOB_SPECIAL_ADDITION

#define MAX_POSTPONED_JOB_SPECIAL_ADDITION 24

Definition at line 1537 of file vm_trace.c.

## Typedef Documentation

## ◆ rb_event_hook_raw_arg_func_t

typedef void(* rb_event_hook_raw_arg_func_t) (VALUE data, const rb_trace_arg_t *arg)

Definition at line 48 of file vm_trace.c.

## ◆ rb_event_hook_t

typedef struct rb_event_hook_struct rb_event_hook_t

## ◆ rb_postponed_job_t

typedef struct rb_postponed_job_struct rb_postponed_job_t

## ◆ rb_tp_t

typedef struct rb_tp_struct rb_tp_t

## Enumeration Type Documentation

## ◆ postponed_job_register_result

enum postponed_job_register_result

Enumerator
PJRR_SUCCESS |
PJRR_FULL |
PJRR_INTERRUPTED |

Definition at line 1553 of file vm_trace.c.

## Function Documentation

## ◆ Init_vm_postponed_job()

void Init_vm_postponed_job | ( | void |  | ) |

Definition at line 1545 of file vm_trace.c.

References ALLOC_N, GET_VM, MAX_POSTPONED_JOB, rb_vm_struct::postponed_job_buffer, and rb_vm_struct::postponed_job_index.

## ◆ Init_vm_trace()

void Init_vm_trace | ( | void |  | ) |

Definition at line 1518 of file vm_trace.c.

References rb_define_global_function().

## ◆ rb_add_event_hook2()

void rb_add_event_hook2 | ( | rb_event_hook_func_t | func,
|  | rb_event_flag_t | events,
|  | VALUE | data,
|  | rb_event_hook_flag_t | hook_flags
| ) |  |

Definition at line 170 of file vm_trace.c.

## ◆ rb_ec_clear_current_thread_trace_func()

void rb_ec_clear_current_thread_trace_func | ( | const rb_execution_context_t * | ec | ) |

Definition at line 274 of file vm_trace.c.

Referenced by ruby_options().

## ◆ rb_exec_event_hooks()

MJIT_FUNC_EXPORTED void rb_exec_event_hooks | ( | rb_trace_arg_t * | trace_arg,
|  | rb_hook_list_t * | hooks,
|  | int | pop_p
| ) |  |

Definition at line 356 of file vm_trace.c.

References rb_trace_arg_struct::ec, rb_trace_arg_struct::event, RUBY_INTERNAL_EVENT_MASK, rb_execution_context_struct::trace_arg, and UNLIKELY.

## ◆ rb_hook_list_connect_tracepoint()

void rb_hook_list_connect_tracepoint | ( | VALUE | target,
|  | rb_hook_list_t * | list,
|  | VALUE | tpval,
|  | unsigned int | target_line
| ) |  |

Definition at line 1246 of file vm_trace.c.

## ◆ rb_hook_list_free()

void rb_hook_list_free | ( | rb_hook_list_t * | hooks | ) |

Definition at line 66 of file vm_trace.c.

## ◆ rb_hook_list_mark()

void rb_hook_list_mark | ( | rb_hook_list_t * | hooks | ) |

Definition at line 53 of file vm_trace.c.

References rb_event_hook_struct::data, rb_hook_list_struct::hooks, rb_event_hook_struct::next, and rb_gc_mark().

Referenced by rb_vm_mark().

## ◆ rb_hook_list_remove_tracepoint()

void rb_hook_list_remove_tracepoint | ( | rb_hook_list_t * | list,
|  | VALUE | tpval
| ) |  |

Definition at line 1256 of file vm_trace.c.

References rb_event_hook_struct::data, rb_event_hook_struct::events, rb_event_hook_struct::hook_flags, list, rb_event_hook_struct::next, RUBY_EVENT_HOOK_FLAG_DELETED, and TRUE.

## ◆ rb_method_def()

const rb_method_definition_t* rb_method_def | ( | VALUE | method | ) |

Definition at line 2646 of file proc.c.

References TypedData_Get_Struct.

## ◆ rb_postponed_job_flush()

void rb_postponed_job_flush | ( | rb_vm_t * | vm | ) |

Definition at line 1656 of file vm_trace.c.

References rb_execution_context_struct::errinfo, GET_EC, rb_execution_context_struct::interrupt_mask, POSTPONED_JOB_INTERRUPT_MASK, and TRAP_INTERRUPT_MASK.

## ◆ rb_postponed_job_register()

int rb_postponed_job_register | ( | unsigned int | flags,
|  | rb_postponed_job_func_t | func,
|  | void * | data
| ) |  |

Definition at line 1589 of file vm_trace.c.

References GET_EC.

## ◆ rb_postponed_job_register_one()

int rb_postponed_job_register_one | ( | unsigned int | flags,
|  | rb_postponed_job_func_t | func,
|  | void * | data
| ) |  |

Definition at line 1608 of file vm_trace.c.

References GET_EC.

## ◆ rb_remove_event_hook_with_data()

int rb_remove_event_hook_with_data | ( | rb_event_hook_func_t | func,
|  | VALUE | data
| ) |  |

Definition at line 268 of file vm_trace.c.

## ◆ rb_suppress_tracing()

VALUE rb_suppress_tracing | ( | VALUE(*)(VALUE) | func,
|  | VALUE | arg
| ) |  |

Definition at line 409 of file vm_trace.c.

## ◆ rb_thread_add_event_hook()

void rb_thread_add_event_hook | ( | VALUE | thval,
|  | rb_event_hook_func_t | func,
|  | rb_event_flag_t | events,
|  | VALUE | data
| ) |  |

Definition at line 151 of file vm_trace.c.

## ◆ rb_thread_add_event_hook2()

void rb_thread_add_event_hook2 | ( | VALUE | thval,
|  | rb_event_hook_func_t | func,
|  | rb_event_flag_t | events,
|  | VALUE | data,
|  | rb_event_hook_flag_t | hook_flags
| ) |  |

Definition at line 164 of file vm_trace.c.

## ◆ rb_thread_remove_event_hook()

int rb_thread_remove_event_hook | ( | VALUE | thval,
|  | rb_event_hook_func_t | func
| ) |  |

Definition at line 250 of file vm_trace.c.

## ◆ rb_thread_remove_event_hook_with_data()

int rb_thread_remove_event_hook_with_data | ( | VALUE | thval,
|  | rb_event_hook_func_t | func,
|  | VALUE | data
| ) |  |

Definition at line 256 of file vm_trace.c.

## ◆ rb_tracearg_binding()

VALUE rb_tracearg_binding | ( | rb_trace_arg_t * | trace_arg | ) |

Definition at line 907 of file vm_trace.c.

References rb_trace_arg_struct::cfp, cfp, rb_trace_arg_struct::ec, Qnil, rb_vm_get_binding_creatable_next_cfp(), and rb_vm_make_binding().

## ◆ rb_tracearg_callee_id()

VALUE rb_tracearg_callee_id | ( | rb_trace_arg_t * | trace_arg | ) |

Definition at line 893 of file vm_trace.c.

## ◆ rb_tracearg_defined_class()

VALUE rb_tracearg_defined_class | ( | rb_trace_arg_t * | trace_arg | ) |

Definition at line 900 of file vm_trace.c.

## ◆ rb_tracearg_eval_script()

VALUE rb_tracearg_eval_script | ( | rb_trace_arg_t * | trace_arg | ) |

Definition at line 957 of file vm_trace.c.

References rb_trace_arg_struct::data, rb_trace_arg_struct::event, Qundef, rb_bug(), rb_eRuntimeError, rb_raise(), and RUBY_EVENT_SCRIPT_COMPILED.

## ◆ rb_tracearg_event()

VALUE rb_tracearg_event | ( | rb_trace_arg_t * | trace_arg | ) |

Definition at line 798 of file vm_trace.c.

References ID2SYM.

## ◆ rb_tracearg_event_flag()

rb_event_flag_t rb_tracearg_event_flag | ( | rb_trace_arg_t * | trace_arg | ) |

Definition at line 792 of file vm_trace.c.

References rb_trace_arg_struct::event.

## ◆ rb_tracearg_from_tracepoint()

struct rb_trace_arg_struct* rb_tracearg_from_tracepoint | ( | VALUE | tpval | ) |

Definition at line 786 of file vm_trace.c.

## ◆ rb_tracearg_instruction_sequence()

VALUE rb_tracearg_instruction_sequence | ( | rb_trace_arg_t * | trace_arg | ) |

Definition at line 981 of file vm_trace.c.

References rb_trace_arg_struct::data, rb_trace_arg_struct::event, Qundef, rb_bug(), rb_eRuntimeError, rb_raise(), and RUBY_EVENT_SCRIPT_COMPILED.

## ◆ rb_tracearg_lineno()

VALUE rb_tracearg_lineno | ( | rb_trace_arg_t * | trace_arg | ) |

Definition at line 812 of file vm_trace.c.

## ◆ rb_tracearg_method_id()

VALUE rb_tracearg_method_id | ( | rb_trace_arg_t * | trace_arg | ) |

Definition at line 886 of file vm_trace.c.

## ◆ rb_tracearg_object()

VALUE rb_tracearg_object | ( | rb_trace_arg_t * | trace_arg | ) |

Definition at line 1008 of file vm_trace.c.

References rb_trace_arg_struct::data, rb_trace_arg_struct::event, Qundef, rb_bug(), rb_eRuntimeError, rb_raise(), RUBY_INTERNAL_EVENT_FREEOBJ, and RUBY_INTERNAL_EVENT_NEWOBJ.

## ◆ rb_tracearg_parameters()

VALUE rb_tracearg_parameters | ( | rb_trace_arg_t * | trace_arg | ) |

Definition at line 846 of file vm_trace.c.

References rb_trace_arg_struct::cfp, cfp, rb_trace_arg_struct::ec, rb_trace_arg_struct::event, rb_vm_get_ruby_level_next_cfp(), RUBY_EVENT_B_CALL, RUBY_EVENT_B_RETURN, RUBY_EVENT_CALL, and RUBY_EVENT_RETURN.

## ◆ rb_tracearg_path()

VALUE rb_tracearg_path | ( | rb_trace_arg_t * | trace_arg | ) |

Definition at line 818 of file vm_trace.c.

## ◆ rb_tracearg_raised_exception()

VALUE rb_tracearg_raised_exception | ( | rb_trace_arg_t * | trace_arg | ) |

Definition at line 942 of file vm_trace.c.

References rb_trace_arg_struct::data, rb_trace_arg_struct::event, Qundef, rb_bug(), rb_eRuntimeError, rb_raise(), and RUBY_EVENT_RAISE.

## ◆ rb_tracearg_return_value()

VALUE rb_tracearg_return_value | ( | rb_trace_arg_t * | trace_arg | ) |

Definition at line 927 of file vm_trace.c.

References rb_trace_arg_struct::data, rb_trace_arg_struct::event, Qundef, rb_bug(), rb_eRuntimeError, rb_raise(), RUBY_EVENT_B_RETURN, RUBY_EVENT_C_RETURN, and RUBY_EVENT_RETURN.

## ◆ rb_tracearg_self()

VALUE rb_tracearg_self | ( | rb_trace_arg_t * | trace_arg | ) |

Definition at line 921 of file vm_trace.c.

References rb_trace_arg_struct::self.

## ◆ rb_tracepoint_disable()

VALUE rb_tracepoint_disable | ( | VALUE | tpval | ) |

Definition at line 1221 of file vm_trace.c.

## ◆ rb_tracepoint_enable()

VALUE rb_tracepoint_enable | ( | VALUE | tpval | ) |

Definition at line 1113 of file vm_trace.c.

## ◆ rb_tracepoint_enabled_p()

VALUE rb_tracepoint_enabled_p | ( | VALUE | tpval | ) |

Definition at line 1335 of file vm_trace.c.

## ◆ rb_tracepoint_new()

VALUE rb_tracepoint_new | ( | VALUE | target_thval,
|  | rb_event_flag_t | events,
|  | void(*)(VALUE, void *) | func,
|  | void * | data
| ) |  |

Definition at line 1394 of file vm_trace.c.

References NULL, and RTEST.

## ◆ rb_workqueue_register()

int rb_workqueue_register | ( | unsigned | flags,
|  | rb_postponed_job_func_t | func,
|  | void * | data
| ) |  |

Definition at line 1637 of file vm_trace.c.

References rb_postponed_job_struct::data, FALSE, rb_postponed_job_struct::func, GET_EC, GET_VM, rb_workqueue_job::jnode, rb_workqueue_job::job, list_add_tail, malloc(), rb_nativethread_lock_lock(), rb_nativethread_lock_unlock(), RUBY_VM_SET_POSTPONED_JOB_INTERRUPT, TRUE, rb_vm_struct::workqueue, and rb_vm_struct::workqueue_lock.