Print this page
6069 libdisasm: instrlen arch op should have a sane default
Reviewed by: Robert Mustacchi <rm@joyent.com>
*** 270,282 ****
--- 270,294 ----
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,