Lines Matching refs:arch

65 static struct ins_ops *ins__find(struct arch *arch, const char *name);
66 static void ins__sort(struct arch *arch);
73 struct arch { struct
78 struct ins_ops *(*associate_instruction_ops)(struct arch *arch, const char *name); argument
85 int (*init)(struct arch *arch, char *cpuid); argument
86 bool (*ins_is_fused)(struct arch *arch, const char *ins1, argument
102 static int arch__grow_instructions(struct arch *arch) in arch__grow_instructions() argument
107 if (arch->nr_instructions_allocated == 0 && arch->instructions) in arch__grow_instructions()
110 new_nr_allocated = arch->nr_instructions_allocated + 128; in arch__grow_instructions()
111 new_instructions = realloc(arch->instructions, new_nr_allocated * sizeof(struct ins)); in arch__grow_instructions()
116 arch->instructions = new_instructions; in arch__grow_instructions()
117 arch->nr_instructions_allocated = new_nr_allocated; in arch__grow_instructions()
121 new_nr_allocated = arch->nr_instructions + 128; in arch__grow_instructions()
126 memcpy(new_instructions, arch->instructions, arch->nr_instructions); in arch__grow_instructions()
130 static int arch__associate_ins_ops(struct arch* arch, const char *name, struct ins_ops *ops) in arch__associate_ins_ops() argument
134 if (arch->nr_instructions == arch->nr_instructions_allocated && in arch__associate_ins_ops()
135 arch__grow_instructions(arch)) in arch__associate_ins_ops()
138 ins = &arch->instructions[arch->nr_instructions]; in arch__associate_ins_ops()
144 arch->nr_instructions++; in arch__associate_ins_ops()
146 ins__sort(arch); in arch__associate_ins_ops()
162 static struct arch architectures[] = {
252 bool ins__is_fused(struct arch *arch, const char *ins1, const char *ins2) in ins__is_fused() argument
254 if (!arch || !arch->ins_is_fused) in ins__is_fused()
257 return arch->ins_is_fused(arch, ins1, ins2); in ins__is_fused()
260 static int call__parse(struct arch *arch, struct ins_operands *ops, struct map_symbol *ms) in call__parse() argument
276 if (arch->objdump.skip_functions_char && in call__parse()
277 strchr(name, arch->objdump.skip_functions_char)) in call__parse()
355 static int jump__parse(struct arch *arch, struct ins_operands *ops, struct map_symbol *ms) in jump__parse() argument
365 ops->raw_comment = strchr(ops->raw, arch->objdump.comment_char); in jump__parse()
505 static int lock__parse(struct arch *arch, struct ins_operands *ops, struct map_symbol *ms) in lock__parse() argument
514 ops->locked.ins.ops = ins__find(arch, ops->locked.ins.name); in lock__parse()
520 ops->locked.ins.ops->parse(arch, ops->locked.ops, ms) < 0) in lock__parse()
563 static int mov__parse(struct arch *arch, struct ins_operands *ops, struct map_symbol *ms __maybe_un… in mov__parse() argument
591 comment = strchr(s, arch->objdump.comment_char); in mov__parse()
637 static int dec__parse(struct arch *arch __maybe_unused, struct ins_operands *ops, struct map_symbol… in dec__parse()
654 comment = strchr(s, arch->objdump.comment_char); in dec__parse()
715 static void ins__sort(struct arch *arch) in ins__sort() argument
717 const int nmemb = arch->nr_instructions; in ins__sort()
719 qsort(arch->instructions, nmemb, sizeof(struct ins), ins__cmp); in ins__sort()
722 static struct ins_ops *__ins__find(struct arch *arch, const char *name) in __ins__find() argument
725 const int nmemb = arch->nr_instructions; in __ins__find()
727 if (!arch->sorted_instructions) { in __ins__find()
728 ins__sort(arch); in __ins__find()
729 arch->sorted_instructions = true; in __ins__find()
732 ins = bsearch(name, arch->instructions, nmemb, sizeof(struct ins), ins__key_cmp); in __ins__find()
736 if (arch->insn_suffix) { in __ins__find()
745 if (strchr(arch->insn_suffix, suffix) == NULL) in __ins__find()
751 ins = bsearch(tmp, arch->instructions, nmemb, sizeof(struct ins), ins__key_cmp); in __ins__find()
756 static struct ins_ops *ins__find(struct arch *arch, const char *name) in ins__find() argument
758 struct ins_ops *ops = __ins__find(arch, name); in ins__find()
760 if (!ops && arch->associate_instruction_ops) in ins__find()
761 ops = arch->associate_instruction_ops(arch, name); in ins__find()
768 const struct arch *arch = archp; in arch__key_cmp() local
770 return strcmp(name, arch->name); in arch__key_cmp()
775 const struct arch *aa = a; in arch__cmp()
776 const struct arch *ab = b; in arch__cmp()
785 qsort(architectures, nmemb, sizeof(struct arch), arch__cmp); in arch__sort()
788 static struct arch *arch__find(const char *name) in arch__find()
798 return bsearch(name, architectures, nmemb, sizeof(struct arch), arch__key_cmp); in arch__find()
1195 static void disasm_line__init_ins(struct disasm_line *dl, struct arch *arch, struct map_symbol *ms) in disasm_line__init_ins() argument
1197 dl->ins.ops = ins__find(arch, dl->ins.name); in disasm_line__init_ins()
1202 if (dl->ins.ops->parse && dl->ins.ops->parse(arch, &dl->ops, ms) < 0) in disasm_line__init_ins()
1235 struct arch *arch; member
1301 disasm_line__init_ins(dl, args->arch, &args->ms); in disasm_line__new()
1896 info.arch = bfd_get_arch(bfdf); in symbol__disassemble_bpf()
1927 disassemble = disassembler(info.arch, in symbol__disassemble_bpf()
2336 struct arch **parch) in symbol__annotate()
2346 struct arch *arch; in symbol__annotate() local
2352 args.arch = arch = arch__find(arch_name); in symbol__annotate()
2353 if (arch == NULL) { in symbol__annotate()
2359 *parch = arch; in symbol__annotate()
2361 if (arch->init) { in symbol__annotate()
2362 err = arch->init(arch, env ? env->cpuid : NULL); in symbol__annotate()
2364 pr_err("%s: failed to initialize %s arch priv area\n", __func__, arch->name); in symbol__annotate()
3274 struct arch **parch) in symbol__annotate2()