diff options
| author | Maxime Chevalier-Boisvert <maxime.chevalierboisvert@shopify.com> | 2021-01-22 15:24:04 -0500 |
|---|---|---|
| committer | Alan Wu <XrXr@users.noreply.github.com> | 2021-10-20 18:19:27 -0400 |
| commit | 8a61e848c09779312dab159e8a625872de034272 (patch) | |
| tree | 075a23609345a02a65eb0099ae22aa062c2d2ab3 | |
| parent | 25234f8a1c75f57f2e5bdb757d96156cb4275ecf (diff) | |
Minor changes to disasm output. Fix GCC warning.
| -rw-r--r-- | ujit.rb | 9 | ||||
| -rw-r--r-- | ujit_iface.c | 2 |
2 files changed, 8 insertions, 3 deletions
@@ -1,5 +1,9 @@ module UJIT def self.disasm(iseq) + if iseq.is_a? Method + iseq = RubyVM::InstructionSequence.of(iseq) + end + blocks = UJIT.blocks_for(iseq) return if blocks.empty? @@ -10,13 +14,14 @@ module UJIT str << iseq.disasm str << "\n" + # Sort the blocks by increasing addresses blocks.sort_by(&:address).reverse.each do |block| - str << "== ISEQ RANGE: #{block.iseq_start_index} -> #{block.iseq_end_index} ".ljust(80, "=") + str << "== ISEQ RANGE: [#{block.iseq_start_index},#{block.iseq_end_index}[ ".ljust(80, "=") str << "\n" cs.disasm(block.code, 0).each do |i| str << sprintf( - "\t0x%<address>x:\t%<instruction>s\t%<details>s\n", + "\t%<address>04X:\t%<instruction>s\t%<details>s\n", address: i.address, instruction: i.mnemonic, details: i.op_str diff --git a/ujit_iface.c b/ujit_iface.c index 591d9c044c..981c882ceb 100644 --- a/ujit_iface.c +++ b/ujit_iface.c @@ -397,7 +397,7 @@ ujit_disasm(VALUE self, VALUE code, VALUE from) cs_insn *insns; TypedData_Get_Struct(self, csh, &ujit_disasm_type, handle); - count = cs_disasm(*handle, (uint8_t *)StringValuePtr(code), RSTRING_LEN(code), NUM2INT(from), 0, &insns); + count = cs_disasm(*handle, (uint8_t*)StringValuePtr(code), RSTRING_LEN(code), NUM2INT(from), 0, &insns); VALUE insn_list = rb_ary_new_capa(count); for (size_t i = 0; i < count; i++) { |
