diff options
author | nagachika <nagachika@ruby-lang.org> | 2020-09-06 11:05:52 +0900 |
---|---|---|
committer | nagachika <nagachika@ruby-lang.org> | 2020-09-06 11:05:52 +0900 |
commit | 3fef159f81fad6ffb9af5b60f4c8ec867fdb2391 (patch) | |
tree | 6b4902e5cc9c7491e02f062a6542aaee0990b112 /iseq.c | |
parent | e778de2c82478dda930cfc8d795ed4e0e60ea775 (diff) |
merge revision(s) 3e02cd518fbe4d91c2aca7fbc3c5aafa387d3cb7: [Backport #17149]
Trace :return of builtin methods
using opt_invokebuiltin_delegate_leave insn.
Since Ruby 2.7, :return of methods using builtin have not been traced properly.
Diffstat (limited to 'iseq.c')
-rw-r--r-- | iseq.c | 6 |
1 files changed, 5 insertions, 1 deletions
@@ -3094,8 +3094,12 @@ rb_vm_encoded_insn_data_table_init(void) encoded_insn_data = st_init_numtable_with_size(VM_INSTRUCTION_SIZE / 2); for (insn = 0; insn < VM_INSTRUCTION_SIZE/2; insn++) { + int traced_insn = insn; + if (traced_insn == BIN(opt_invokebuiltin_delegate_leave)) { + traced_insn = BIN(opt_invokebuiltin_delegate); // to dispatch :return from leave + } st_data_t key1 = (st_data_t)INSN_CODE(insn); - st_data_t key2 = (st_data_t)INSN_CODE(insn + VM_INSTRUCTION_SIZE/2); + st_data_t key2 = (st_data_t)INSN_CODE(traced_insn + VM_INSTRUCTION_SIZE/2); insn_data[insn].insn = (int)insn; insn_data[insn].insn_len = insn_len(insn); |