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 };
|