diff options
author | Takashi Kokubun <takashikkbn@gmail.com> | 2023-03-13 20:40:24 -0700 |
---|---|---|
committer | Takashi Kokubun <takashikkbn@gmail.com> | 2023-03-13 20:42:19 -0700 |
commit | d8344559b224a701caa80a2f72e0798ded80bcd7 (patch) | |
tree | 953e0e87b4624dc77b1e7ed105e2280143965b21 /rjit_c.c | |
parent | 1c8e69d602eb368cbfdff17954f7c04c3c070641 (diff) | |
download | ruby-d8344559b224a701caa80a2f72e0798ded80bcd7.tar.gz |
RJIT: Simplify how Capstone is used in tests
Diffstat (limited to 'rjit_c.c')
-rw-r--r-- | rjit_c.c | 5 |
1 files changed, 3 insertions, 2 deletions
@@ -420,7 +420,7 @@ static size_t rjit_insn_exits[VM_INSTRUCTION_SIZE] = { 0 }; // Return an array of [address, mnemonic, op_str] static VALUE -dump_disasm(rb_execution_context_t *ec, VALUE self, VALUE from, VALUE to) +dump_disasm(rb_execution_context_t *ec, VALUE self, VALUE from, VALUE to, VALUE test) { VALUE result = rb_ary_new(); #ifdef HAVE_LIBCAPSTONE @@ -434,7 +434,8 @@ dump_disasm(rb_execution_context_t *ec, VALUE self, VALUE from, VALUE to) // Call cs_disasm and convert results to a Ruby array cs_insn *insns; - size_t count = cs_disasm(handle, (const uint8_t *)from_addr, to_addr - from_addr, from_addr, 0, &insns); + size_t base_addr = RTEST(test) ? 0 : from_addr; // On tests, start from 0 for output stability. + size_t count = cs_disasm(handle, (const uint8_t *)from_addr, to_addr - from_addr, base_addr, 0, &insns); for (size_t i = 0; i < count; i++) { VALUE vals = rb_ary_new_from_args(3, LONG2NUM(insns[i].address), rb_str_new2(insns[i].mnemonic), rb_str_new2(insns[i].op_str)); rb_ary_push(result, vals); |