diff options
author | Alan Wu <XrXr@users.noreply.github.com> | 2021-10-18 11:30:18 -0400 |
---|---|---|
committer | Alan Wu <XrXr@users.noreply.github.com> | 2021-10-20 18:19:43 -0400 |
commit | 5906a5a7329e34a43dc46d4fc3cdf1b04cc13d0a (patch) | |
tree | 736536624015891bf6c7dceb5e1ba49362f36385 /vm_core.h | |
parent | 1e23b1a6c2614c8e3a1be0be4df6dee9202701d5 (diff) |
Add comments about special runtime routines YJIT calls
When YJIT make calls to routines without reconstructing interpreter
state through jit_prepare_routine_call(), it relies on the routine to
never allocate, raise, and push/pop control frames. Comment about this
on the routines that YJTI calls.
This is probably something we should dynamically verify on debug builds.
It's hard to statically verify this as it requires verifying all
functions in the call tree. Maybe something to look at in the future.
Diffstat (limited to 'vm_core.h')
-rw-r--r-- | vm_core.h | 2 |
1 files changed, 2 insertions, 0 deletions
@@ -446,6 +446,8 @@ struct rb_iseq_constant_body { char catch_except_p; /* If a frame of this ISeq may catch exception, set TRUE */ // If true, this ISeq is leaf *and* backtraces are not used, for example, // by rb_profile_frames. We verify only leafness on VM_CHECK_MODE though. + // Note that GC allocations might use backtraces due to + // ObjectSpace#trace_object_allocations. // For more details, see: https://bugs.ruby-lang.org/issues/16956 bool builtin_inline_p; struct rb_id_table *outer_variables; |