summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaxime Chevalier-Boisvert <maxime.chevalierboisvert@shopify.com>2021-01-22 15:24:04 -0500
committerAlan Wu <XrXr@users.noreply.github.com>2021-10-20 18:19:27 -0400
commit8a61e848c09779312dab159e8a625872de034272 (patch)
tree075a23609345a02a65eb0099ae22aa062c2d2ab3
parent25234f8a1c75f57f2e5bdb757d96156cb4275ecf (diff)
Minor changes to disasm output. Fix GCC warning.
-rw-r--r--ujit.rb9
-rw-r--r--ujit_iface.c2
2 files changed, 8 insertions, 3 deletions
diff --git a/ujit.rb b/ujit.rb
index 43be881c05..3697e50b1c 100644
--- a/ujit.rb
+++ b/ujit.rb
@@ -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++) {