Lines Matching +full:machine +full:- +full:mode
1 // SPDX-License-Identifier: GPL-2.0
8 #include "machine.h"
23 static int capstone_init(struct machine *machine, csh *cs_handle, bool is64, in capstone_init() argument
27 cs_mode mode; in capstone_init() local
29 if (machine__is(machine, "x86_64") && is64) { in capstone_init()
31 mode = CS_MODE_64; in capstone_init()
32 } else if (machine__normalized_is(machine, "x86")) { in capstone_init()
34 mode = CS_MODE_32; in capstone_init()
35 } else if (machine__normalized_is(machine, "arm64")) { in capstone_init()
37 mode = CS_MODE_ARM; in capstone_init()
38 } else if (machine__normalized_is(machine, "arm")) { in capstone_init()
40 mode = CS_MODE_ARM + CS_MODE_V8; in capstone_init()
41 } else if (machine__normalized_is(machine, "s390")) { in capstone_init()
43 mode = CS_MODE_BIG_ENDIAN; in capstone_init()
45 return -1; in capstone_init()
48 if (cs_open(arch, mode, cs_handle) != CS_ERR_OK) { in capstone_init()
50 return -1; in capstone_init()
53 if (machine__normalized_is(machine, "x86")) { in capstone_init()
79 if (insn->detail && insn->detail->x86.op_count == 1) { in print_insn_x86()
80 cs_x86_op *op = &insn->detail->x86.operands[0]; in print_insn_x86()
83 if (op->type == X86_OP_IMM && in print_insn_x86()
84 thread__find_symbol(thread, cpumode, op->imm, &al)) { in print_insn_x86()
88 printed += fprintf(fp, " [%#" PRIx64 "]", op->imm); in print_insn_x86()
101 ssize_t capstone__fprintf_insn_asm(struct machine *machine __maybe_unused, in capstone__fprintf_insn_asm()
117 ret = capstone_init(machine, &cs_handle, is64bit, true); in capstone__fprintf_insn_asm()
123 if (machine__normalized_is(machine, "x86")) in capstone__fprintf_insn_asm()
128 *lenp = insn->size; in capstone__fprintf_insn_asm()
131 printed = -1; in capstone__fprintf_insn_asm()
137 return -1; in capstone__fprintf_insn_asm()
146 struct map *map = args->ms.map; in print_capstone_detail()
150 if (!arch__is(args->arch, "x86")) in print_capstone_detail()
153 if (insn->detail == NULL) in print_capstone_detail()
156 for (i = 0; i < insn->detail->x86.op_count; i++) { in print_capstone_detail()
157 cs_x86_op *op = &insn->detail->x86.operands[i]; in print_capstone_detail()
160 if (op->type != X86_OP_MEM) in print_capstone_detail()
163 /* only print RIP-based global symbols for now */ in print_capstone_detail()
164 if (op->mem.base != X86_REG_RIP) in print_capstone_detail()
168 orig_addr = addr + insn->size + op->mem.disp; in print_capstone_detail()
181 /* convert it to map-relative address for search */ in print_capstone_detail()
188 if (addr == sym->start) { in print_capstone_detail()
190 orig_addr, sym->name); in print_capstone_detail()
193 orig_addr, sym->name, addr - sym->start); in print_capstone_detail()
211 if (start <= data->ip && data->ip < start + len) { in find_file_offset()
212 data->offset = pgoff + data->ip - start; in find_file_offset()
225 struct map *map = args->ms.map; in symbol__disassemble_capstone()
227 u64 start = map__rip_2objdump(map, sym->start); in symbol__disassemble_capstone()
232 /* Malloc-ed buffer containing instructions read from disk. */ in symbol__disassemble_capstone()
243 if (args->options->objdump_path) in symbol__disassemble_capstone()
244 return -1; in symbol__disassemble_capstone()
253 start, sym->name); in symbol__disassemble_capstone()
255 args->offset = -1; in symbol__disassemble_capstone()
256 args->line = disasm_buf; in symbol__disassemble_capstone()
257 args->line_nr = 0; in symbol__disassemble_capstone()
258 args->fileloc = NULL; in symbol__disassemble_capstone()
259 args->ms.sym = sym; in symbol__disassemble_capstone()
265 annotation_line__add(&dl->al, ¬es->src->source); in symbol__disassemble_capstone()
267 if (!args->options->disassembler_style || in symbol__disassemble_capstone()
268 !strcmp(args->options->disassembler_style, "att")) in symbol__disassemble_capstone()
271 if (capstone_init(maps__machine(args->ms.maps), &handle, is_64bit, disassembler_style) < 0) in symbol__disassemble_capstone()
281 " %-7s %s", in symbol__disassemble_capstone()
284 sizeof(disasm_buf) - printed, args, in symbol__disassemble_capstone()
287 args->offset = offset; in symbol__disassemble_capstone()
288 args->line = disasm_buf; in symbol__disassemble_capstone()
294 annotation_line__add(&dl->al, ¬es->src->source); in symbol__disassemble_capstone()
301 struct list_head *list = ¬es->src->source; in symbol__disassemble_capstone()
307 list_del_init(&dl->al.node); in symbol__disassemble_capstone()
310 count = -1; in symbol__disassemble_capstone()
330 list_for_each_entry_safe(dl, tmp, ¬es->src->source, al.node) { in symbol__disassemble_capstone()
331 list_del(&dl->al.node); in symbol__disassemble_capstone()
335 count = -1; in symbol__disassemble_capstone()
338 return -1; in symbol__disassemble_capstone()
348 struct map *map = args->ms.map; in symbol__disassemble_capstone_powerpc()
351 u64 start = map__rip_2objdump(map, sym->start); in symbol__disassemble_capstone_powerpc()
352 u64 end = map__rip_2objdump(map, sym->end); in symbol__disassemble_capstone_powerpc()
353 u64 len = end - start; in symbol__disassemble_capstone_powerpc()
368 if (args->options->objdump_path) in symbol__disassemble_capstone_powerpc()
369 return -1; in symbol__disassemble_capstone_powerpc()
375 return -1; in symbol__disassemble_capstone_powerpc()
381 if (!args->options->disassembler_style || in symbol__disassemble_capstone_powerpc()
382 !strcmp(args->options->disassembler_style, "att")) in symbol__disassemble_capstone_powerpc()
385 if (capstone_init(maps__machine(args->ms.maps), &handle, is_64bit, disassembler_style) < 0) in symbol__disassemble_capstone_powerpc()
396 fd = -1; in symbol__disassemble_capstone_powerpc()
405 start, sym->name); in symbol__disassemble_capstone_powerpc()
407 args->offset = -1; in symbol__disassemble_capstone_powerpc()
408 args->line = disasm_buf; in symbol__disassemble_capstone_powerpc()
409 args->line_nr = 0; in symbol__disassemble_capstone_powerpc()
410 args->fileloc = NULL; in symbol__disassemble_capstone_powerpc()
411 args->ms.sym = sym; in symbol__disassemble_capstone_powerpc()
417 annotation_line__add(&dl->al, ¬es->src->source); in symbol__disassemble_capstone_powerpc()
431 args->offset = offset; in symbol__disassemble_capstone_powerpc()
432 sprintf(args->line, "%x", line[i]); in symbol__disassemble_capstone_powerpc()
438 annotation_line__add(&dl->al, ¬es->src->source); in symbol__disassemble_capstone_powerpc()
445 struct list_head *list = ¬es->src->source; in symbol__disassemble_capstone_powerpc()
451 list_del_init(&dl->al.node); in symbol__disassemble_capstone_powerpc()
454 count = -1; in symbol__disassemble_capstone_powerpc()
466 count = -1; in symbol__disassemble_capstone_powerpc()
469 return -1; in symbol__disassemble_capstone_powerpc()