summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTakashi Kokubun <[email protected]>2022-12-20 23:48:12 -0800
committerTakashi Kokubun <[email protected]>2023-03-05 22:11:20 -0800
commite750e1e3ee81105cbc59a45cf016e51a1c42932c (patch)
tree2672724a69ed6bf97a76a86982d77fc75dbd58dd
parentdfa19a16586b0760d1644170a5096ec6bf4831fd (diff)
Fix build without libcapstone
-rw-r--r--mjit_c.c12
1 files changed, 4 insertions, 8 deletions
diff --git a/mjit_c.c b/mjit_c.c
index 8552926287..08a6921be4 100644
--- a/mjit_c.c
+++ b/mjit_c.c
@@ -43,11 +43,14 @@
// Fedora: dnf -y install capstone-devel
#ifdef HAVE_LIBCAPSTONE
#include <capstone/capstone.h>
+#endif
// Return an array of [address, mnemonic, op_str]
static VALUE
dump_disasm(rb_execution_context_t *ec, VALUE self, VALUE from, VALUE to)
{
+ VALUE result = rb_ary_new();
+#ifdef HAVE_LIBCAPSTONE
// Prepare for calling cs_disasm
static csh handle;
if (cs_open(CS_ARCH_X86, CS_MODE_64, &handle) != CS_ERR_OK) {
@@ -59,7 +62,6 @@ 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);
- VALUE result = rb_ary_new_capa(count);
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);
@@ -68,15 +70,9 @@ dump_disasm(rb_execution_context_t *ec, VALUE self, VALUE from, VALUE to)
// Free memory used by capstone
cs_free(insns, count);
cs_close(&handle);
+#endif
return result;
}
-#else
-static VALUE
-mjit_disasm(VALUE self, VALUE from, VALUE to)
-{
- return rb_ary_new();
-}
-#endif
#include "mjit_c.rbinc"