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


 167 
 168 /* ARGSUSED */
 169 static int
 170 dis_i386_min_instrlen(dis_handle_t *dhp)
 171 {
 172         return (1);
 173 }
 174 
 175 static int
 176 dis_i386_supports_flags(int flags)
 177 {
 178         int archflags = flags & DIS_ARCH_MASK;
 179 
 180         if (archflags == DIS_X86_SIZE16 || archflags == DIS_X86_SIZE32 ||
 181             archflags == DIS_X86_SIZE64)
 182                 return (1);
 183 
 184         return (0);
 185 }
 186 
 187 static int
 188 dis_i386_instrlen(dis_handle_t *dhp, uint64_t pc)
 189 {
 190         if (dis_disassemble(dhp, pc, NULL, 0) != 0)
 191                 return (-1);
 192 
 193         return (dhp->dh_addr - pc);
 194 }
 195 
 196 dis_arch_t dis_arch_i386 = {
 197         .da_supports_flags      = dis_i386_supports_flags,
 198         .da_handle_attach       = dis_i386_handle_attach,
 199         .da_handle_detach       = dis_i386_handle_detach,
 200         .da_disassemble         = dis_i386_disassemble,
 201         .da_min_instrlen        = dis_i386_min_instrlen,
 202         .da_max_instrlen        = dis_i386_max_instrlen,
 203         .da_instrlen            = dis_i386_instrlen,
 204 };


 167 
 168 /* ARGSUSED */
 169 static int
 170 dis_i386_min_instrlen(dis_handle_t *dhp)
 171 {
 172         return (1);
 173 }
 174 
 175 static int
 176 dis_i386_supports_flags(int flags)
 177 {
 178         int archflags = flags & DIS_ARCH_MASK;
 179 
 180         if (archflags == DIS_X86_SIZE16 || archflags == DIS_X86_SIZE32 ||
 181             archflags == DIS_X86_SIZE64)
 182                 return (1);
 183 
 184         return (0);
 185 }
 186 









 187 dis_arch_t dis_arch_i386 = {
 188         .da_supports_flags      = dis_i386_supports_flags,
 189         .da_handle_attach       = dis_i386_handle_attach,
 190         .da_handle_detach       = dis_i386_handle_detach,
 191         .da_disassemble         = dis_i386_disassemble,
 192         .da_min_instrlen        = dis_i386_min_instrlen,
 193         .da_max_instrlen        = dis_i386_max_instrlen,

 194 };