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,