• Home
  • Raw
  • Download

Lines Matching refs:ops

131 static int arch__associate_ins_ops(struct arch* arch, const char *name, struct ins_ops *ops)  in arch__associate_ins_ops()  argument
144 ins->ops = ops; in arch__associate_ins_ops()
207 static void ins__delete(struct ins_operands *ops) in ins__delete() argument
209 if (ops == NULL) in ins__delete()
211 zfree(&ops->source.raw); in ins__delete()
212 zfree(&ops->source.name); in ins__delete()
213 zfree(&ops->target.raw); in ins__delete()
214 zfree(&ops->target.name); in ins__delete()
218 struct ins_operands *ops, int max_ins_name) in ins__raw_scnprintf() argument
220 return scnprintf(bf, size, "%-*s %s", max_ins_name, ins->name, ops->raw); in ins__raw_scnprintf()
224 struct ins_operands *ops, int max_ins_name) in ins__scnprintf() argument
226 if (ins->ops->scnprintf) in ins__scnprintf()
227 return ins->ops->scnprintf(ins, bf, size, ops, max_ins_name); in ins__scnprintf()
229 return ins__raw_scnprintf(ins, bf, size, ops, max_ins_name); in ins__scnprintf()
240 static int call__parse(struct arch *arch, struct ins_operands *ops, struct map_symbol *ms) in call__parse() argument
248 ops->target.addr = strtoull(ops->raw, &endptr, 16); in call__parse()
265 ops->target.name = strdup(name); in call__parse()
268 if (ops->target.name == NULL) in call__parse()
271 target.addr = map__objdump_2mem(map, ops->target.addr); in call__parse()
274 map__rip_2objdump(target.ms.map, map->map_ip(target.ms.map, target.addr)) == ops->target.addr) in call__parse()
275 ops->target.sym = target.ms.sym; in call__parse()
287 ops->target.addr = strtoull(endptr, NULL, 16); in call__parse()
293 struct ins_operands *ops, int max_ins_name) in call__scnprintf() argument
295 if (ops->target.sym) in call__scnprintf()
296 return scnprintf(bf, size, "%-*s %s", max_ins_name, ins->name, ops->target.sym->name); in call__scnprintf()
298 if (ops->target.addr == 0) in call__scnprintf()
299 return ins__raw_scnprintf(ins, bf, size, ops, max_ins_name); in call__scnprintf()
301 if (ops->target.name) in call__scnprintf()
302 return scnprintf(bf, size, "%-*s %s", max_ins_name, ins->name, ops->target.name); in call__scnprintf()
304 return scnprintf(bf, size, "%-*s *%" PRIx64, max_ins_name, ins->name, ops->target.addr); in call__scnprintf()
314 return ins->ops == &call_ops || ins->ops == &s390_call_ops; in ins__is_call()
324 static inline const char *validate_comma(const char *c, struct ins_operands *ops) in validate_comma() argument
326 if (ops->raw_comment && c > ops->raw_comment) in validate_comma()
329 if (ops->raw_func_start && c > ops->raw_func_start) in validate_comma()
335 static int jump__parse(struct arch *arch, struct ins_operands *ops, struct map_symbol *ms) in jump__parse() argument
342 const char *c = strchr(ops->raw, ','); in jump__parse()
345 ops->raw_comment = strchr(ops->raw, arch->objdump.comment_char); in jump__parse()
346 ops->raw_func_start = strchr(ops->raw, '<'); in jump__parse()
348 c = validate_comma(c, ops); in jump__parse()
366 ops->target.addr = strtoull(c, NULL, 16); in jump__parse()
367 if (!ops->target.addr) { in jump__parse()
369 c = validate_comma(c, ops); in jump__parse()
371 ops->target.addr = strtoull(c, NULL, 16); in jump__parse()
374 ops->target.addr = strtoull(ops->raw, NULL, 16); in jump__parse()
377 target.addr = map__objdump_2mem(map, ops->target.addr); in jump__parse()
381 ops->target.outside = target.addr < start || target.addr > end; in jump__parse()
402 map__rip_2objdump(target.ms.map, map->map_ip(target.ms.map, target.addr)) == ops->target.addr) in jump__parse()
403 ops->target.sym = target.ms.sym; in jump__parse()
405 if (!ops->target.outside) { in jump__parse()
406 ops->target.offset = target.addr - start; in jump__parse()
407 ops->target.offset_avail = true; in jump__parse()
409 ops->target.offset_avail = false; in jump__parse()
416 struct ins_operands *ops, int max_ins_name) in jump__scnprintf() argument
420 if (!ops->target.addr || ops->target.offset < 0) in jump__scnprintf()
421 return ins__raw_scnprintf(ins, bf, size, ops, max_ins_name); in jump__scnprintf()
423 if (ops->target.outside && ops->target.sym != NULL) in jump__scnprintf()
424 return scnprintf(bf, size, "%-*s %s", max_ins_name, ins->name, ops->target.sym->name); in jump__scnprintf()
426 c = strchr(ops->raw, ','); in jump__scnprintf()
427 c = validate_comma(c, ops); in jump__scnprintf()
432 c2 = validate_comma(c2, ops); in jump__scnprintf()
444 ins->name, c ? c - ops->raw : 0, ops->raw, in jump__scnprintf()
445 ops->target.offset); in jump__scnprintf()
455 return ins->ops == &jump_ops; in ins__is_jump()
485 static int lock__parse(struct arch *arch, struct ins_operands *ops, struct map_symbol *ms) in lock__parse() argument
487 ops->locked.ops = zalloc(sizeof(*ops->locked.ops)); in lock__parse()
488 if (ops->locked.ops == NULL) in lock__parse()
491 if (disasm_line__parse(ops->raw, &ops->locked.ins.name, &ops->locked.ops->raw) < 0) in lock__parse()
494 ops->locked.ins.ops = ins__find(arch, ops->locked.ins.name); in lock__parse()
496 if (ops->locked.ins.ops == NULL) in lock__parse()
499 if (ops->locked.ins.ops->parse && in lock__parse()
500 ops->locked.ins.ops->parse(arch, ops->locked.ops, ms) < 0) in lock__parse()
506 zfree(&ops->locked.ops); in lock__parse()
511 struct ins_operands *ops, int max_ins_name) in lock__scnprintf() argument
515 if (ops->locked.ins.ops == NULL) in lock__scnprintf()
516 return ins__raw_scnprintf(ins, bf, size, ops, max_ins_name); in lock__scnprintf()
519 return printed + ins__scnprintf(&ops->locked.ins, bf + printed, in lock__scnprintf()
520 size - printed, ops->locked.ops, max_ins_name); in lock__scnprintf()
523 static void lock__delete(struct ins_operands *ops) in lock__delete() argument
525 struct ins *ins = &ops->locked.ins; in lock__delete()
527 if (ins->ops && ins->ops->free) in lock__delete()
528 ins->ops->free(ops->locked.ops); in lock__delete()
530 ins__delete(ops->locked.ops); in lock__delete()
532 zfree(&ops->locked.ops); in lock__delete()
533 zfree(&ops->target.raw); in lock__delete()
534 zfree(&ops->target.name); in lock__delete()
543 static int mov__parse(struct arch *arch, struct ins_operands *ops, struct map_symbol *ms __maybe_un… in mov__parse() argument
545 char *s = strchr(ops->raw, ','), *target, *comment, prev; in mov__parse()
551 ops->source.raw = strdup(ops->raw); in mov__parse()
554 if (ops->source.raw == NULL) in mov__parse()
571 ops->target.raw = strdup(target); in mov__parse()
574 if (ops->target.raw == NULL) in mov__parse()
581 comment__symbol(ops->source.raw, comment + 1, &ops->source.addr, &ops->source.name); in mov__parse()
582 comment__symbol(ops->target.raw, comment + 1, &ops->target.addr, &ops->target.name); in mov__parse()
587 zfree(&ops->source.raw); in mov__parse()
592 struct ins_operands *ops, int max_ins_name) in mov__scnprintf() argument
595 ops->source.name ?: ops->source.raw, in mov__scnprintf()
596 ops->target.name ?: ops->target.raw); in mov__scnprintf()
604 static int dec__parse(struct arch *arch __maybe_unused, struct ins_operands *ops, struct map_symbol… in dec__parse() argument
608 target = s = ops->raw; in dec__parse()
615 ops->target.raw = strdup(target); in dec__parse()
618 if (ops->target.raw == NULL) in dec__parse()
626 comment__symbol(ops->target.raw, comment + 1, &ops->target.addr, &ops->target.name); in dec__parse()
632 struct ins_operands *ops, int max_ins_name) in dec__scnprintf() argument
635 ops->target.name ?: ops->target.raw); in dec__scnprintf()
644 struct ins_operands *ops __maybe_unused, int max_ins_name) in nop__scnprintf()
659 return ins->ops == &ret_ops; in ins__is_ret()
664 return ins->ops == &lock_ops; in ins__is_lock()
700 return ins ? ins->ops : NULL; in __ins__find()
705 struct ins_ops *ops = __ins__find(arch, name); in ins__find() local
707 if (!ops && arch->associate_instruction_ops) in ins__find()
708 ops = arch->associate_instruction_ops(arch, name); in ins__find()
710 return ops; in ins__find()
1115 dl->ins.ops = ins__find(arch, dl->ins.name); in disasm_line__init_ins()
1117 if (!dl->ins.ops) in disasm_line__init_ins()
1120 if (dl->ins.ops->parse && dl->ins.ops->parse(arch, &dl->ops, ms) < 0) in disasm_line__init_ins()
1121 dl->ins.ops = NULL; in disasm_line__init_ins()
1213 if (disasm_line__parse(dl->al.line, &dl->ins.name, &dl->ops.raw) < 0) in disasm_line__new()
1230 if (dl->ins.ops && dl->ins.ops->free) in disasm_line__free()
1231 dl->ins.ops->free(&dl->ops); in disasm_line__free()
1233 ins__delete(&dl->ops); in disasm_line__free()
1241 if (raw || !dl->ins.ops) in disasm_line__scnprintf()
1242 return scnprintf(bf, size, "%-*s %s", max_ins_name, dl->ins.name, dl->ops.raw); in disasm_line__scnprintf()
1244 return ins__scnprintf(&dl->ins, bf, size, &dl->ops, max_ins_name); in disasm_line__scnprintf()
1521 dl->ops.target.offset = dl->ops.target.addr - in symbol__parse_objdump_line()
1523 dl->ops.target.offset_avail = true; in symbol__parse_objdump_line()
1527 if (dl->ins.ops && ins__is_call(&dl->ins) && !dl->ops.target.sym) { in symbol__parse_objdump_line()
1529 .addr = dl->ops.target.addr, in symbol__parse_objdump_line()
1535 dl->ops.target.sym = target.ms.sym; in symbol__parse_objdump_line()
1557 if (dl->ins.ops) { in delete_last_nop()
1558 if (dl->ins.ops != &nop_ops) in delete_last_nop()
2594 if (dl->ops.raw[0] != '\0') { in disasm_line__fprintf()
2596 dl->ops.raw); in disasm_line__fprintf()
2615 if (!dl || !dl->ins.ops || !ins__is_jump(&dl->ins) || in disasm_line__is_valid_local_jump()
2616 !disasm_line__has_local_offset(dl) || dl->ops.target.offset < 0 || in disasm_line__is_valid_local_jump()
2617 dl->ops.target.offset >= (s64)symbol__size(sym)) in disasm_line__is_valid_local_jump()
2640 al = notes->offsets[dl->ops.target.offset]; in annotation__mark_jump_targets()
2856 if (dl->ins.ops && dl->ins.ops->scnprintf) { in disasm_line__write()
2860 if (dl->ops.target.outside) in disasm_line__write()
2862 fwd = dl->ops.target.offset > dl->al.offset; in disasm_line__write()