| // SPDX-License-Identifier: GPL-2.0 |
| #include "../../../../arch/x86/include/asm/insn.h" |
| #include "archinsn.h" |
| #include "machine.h" |
| #include "thread.h" |
| #include "symbol.h" |
| |
| void arch_fetch_insn(struct perf_sample *sample, |
| struct thread *thread, |
| struct machine *machine) |
| { |
| struct insn insn; |
| int len; |
| bool is64bit = false; |
| |
| if (!sample->ip) |
| return; |
| len = thread__memcpy(thread, machine, sample->insn, sample->ip, sizeof(sample->insn), &is64bit); |
| if (len <= 0) |
| return; |
| insn_init(&insn, sample->insn, len, is64bit); |
| insn_get_length(&insn); |
| if (insn_complete(&insn) && insn.length <= len) |
| sample->insn_len = insn.length; |
| } |