Print this page
6069 libdisasm: instrlen arch op should have a sane default
Reviewed by: Robert Mustacchi <rm@joyent.com>

@@ -270,13 +270,25 @@
 dis_max_instrlen(dis_handle_t *dhp)
 {
         return (dhp->dh_arch->da_max_instrlen(dhp));
 }
 
+static int
+dis_generic_instrlen(dis_handle_t *dhp, uint64_t pc)
+{
+        if (dis_disassemble(dhp, pc, NULL, 0) != 0)
+                return (-1);
+
+        return (dhp->dh_addr - pc);
+}
+
 int
 dis_instrlen(dis_handle_t *dhp, uint64_t pc)
 {
+        if (dhp->dh_arch->da_instrlen == NULL)
+                return (dis_generic_instrlen(dhp, pc));
+
         return (dhp->dh_arch->da_instrlen(dhp, pc));
 }
 
 int
 dis_vsnprintf(char *restrict s, size_t n, const char *restrict format,