From cfc41e72a4f85ff48430f435531264fca458f55d Mon Sep 17 00:00:00 2001 From: Josef 'Jeff' Sipek Date: Fri, 16 Oct 2015 01:22:30 -0400 Subject: [PATCH] 6069 libdisasm: instrlen arch op should have a sane default Reviewed by: Robert Mustacchi Approved by: Dan McDonald --- usr/src/lib/libdisasm/common/dis_i386.c | 10 ---------- usr/src/lib/libdisasm/common/libdisasm.c | 12 ++++++++++++ 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/usr/src/lib/libdisasm/common/dis_i386.c b/usr/src/lib/libdisasm/common/dis_i386.c index beb66cdc0d..90a45f5618 100644 --- a/usr/src/lib/libdisasm/common/dis_i386.c +++ b/usr/src/lib/libdisasm/common/dis_i386.c @@ -184,15 +184,6 @@ dis_i386_supports_flags(int flags) return (0); } -static int -dis_i386_instrlen(dis_handle_t *dhp, uint64_t pc) -{ - if (dis_disassemble(dhp, pc, NULL, 0) != 0) - return (-1); - - return (dhp->dh_addr - pc); -} - dis_arch_t dis_arch_i386 = { .da_supports_flags = dis_i386_supports_flags, .da_handle_attach = dis_i386_handle_attach, @@ -200,5 +191,4 @@ dis_arch_t dis_arch_i386 = { .da_disassemble = dis_i386_disassemble, .da_min_instrlen = dis_i386_min_instrlen, .da_max_instrlen = dis_i386_max_instrlen, - .da_instrlen = dis_i386_instrlen, }; diff --git a/usr/src/lib/libdisasm/common/libdisasm.c b/usr/src/lib/libdisasm/common/libdisasm.c index ce48a2da8b..057d4facb1 100644 --- a/usr/src/lib/libdisasm/common/libdisasm.c +++ b/usr/src/lib/libdisasm/common/libdisasm.c @@ -272,9 +272,21 @@ 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)); } -- 2.11.4.GIT