Lines Matching defs:arch

36 #include "arch/common.h"
62 static struct ins_ops *ins__find(struct arch *arch, const char *name);
63 static void ins__sort(struct arch *arch);
70 struct arch {
75 struct ins_ops *(*associate_instruction_ops)(struct arch *arch, const char *name);
82 int (*init)(struct arch *arch, char *cpuid);
83 bool (*ins_is_fused)(struct arch *arch, const char *ins1,
99 static int arch__grow_instructions(struct arch *arch)
104 if (arch->nr_instructions_allocated == 0 && arch->instructions)
107 new_nr_allocated = arch->nr_instructions_allocated + 128;
108 new_instructions = realloc(arch->instructions, new_nr_allocated * sizeof(struct ins));
113 arch->instructions = new_instructions;
114 arch->nr_instructions_allocated = new_nr_allocated;
118 new_nr_allocated = arch->nr_instructions + 128;
123 memcpy(new_instructions, arch->instructions, arch->nr_instructions);
127 static int arch__associate_ins_ops(struct arch* arch, const char *name, struct ins_ops *ops)
131 if (arch->nr_instructions == arch->nr_instructions_allocated &&
132 arch__grow_instructions(arch))
135 ins = &arch->instructions[arch->nr_instructions];
141 arch->nr_instructions++;
143 ins__sort(arch);
147 #include "arch/arc/annotate/instructions.c"
148 #include "arch/arm/annotate/instructions.c"
149 #include "arch/arm64/annotate/instructions.c"
150 #include "arch/csky/annotate/instructions.c"
151 #include "arch/loongarch/annotate/instructions.c"
152 #include "arch/mips/annotate/instructions.c"
153 #include "arch/x86/annotate/instructions.c"
154 #include "arch/powerpc/annotate/instructions.c"
155 #include "arch/riscv64/annotate/instructions.c"
156 #include "arch/s390/annotate/instructions.c"
157 #include "arch/sparc/annotate/instructions.c"
159 static struct arch architectures[] = {
249 bool ins__is_fused(struct arch *arch, const char *ins1, const char *ins2)
251 if (!arch || !arch->ins_is_fused)
254 return arch->ins_is_fused(arch, ins1, ins2);
257 static int call__parse(struct arch *arch, struct ins_operands *ops, struct map_symbol *ms)
273 if (arch->objdump.skip_functions_char &&
274 strchr(name, arch->objdump.skip_functions_char))
352 static int jump__parse(struct arch *arch, struct ins_operands *ops, struct map_symbol *ms)
362 ops->raw_comment = strchr(ops->raw, arch->objdump.comment_char);
455 /* mirror arch objdump's space-after-comma style */
502 static int lock__parse(struct arch *arch, struct ins_operands *ops, struct map_symbol *ms)
511 ops->locked.ins.ops = ins__find(arch, ops->locked.ins.name);
517 ops->locked.ins.ops->parse(arch, ops->locked.ops, ms) < 0)
560 static int mov__parse(struct arch *arch, struct ins_operands *ops, struct map_symbol *ms __maybe_unused)
588 comment = strchr(s, arch->objdump.comment_char);
634 static int dec__parse(struct arch *arch __maybe_unused, struct ins_operands *ops, struct map_symbol *ms __maybe_unused)
651 comment = strchr(s, arch->objdump.comment_char);
712 static void ins__sort(struct arch *arch)
714 const int nmemb = arch->nr_instructions;
716 qsort(arch->instructions, nmemb, sizeof(struct ins), ins__cmp);
719 static struct ins_ops *__ins__find(struct arch *arch, const char *name)
722 const int nmemb = arch->nr_instructions;
724 if (!arch->sorted_instructions) {
725 ins__sort(arch);
726 arch->sorted_instructions = true;
729 ins = bsearch(name, arch->instructions, nmemb, sizeof(struct ins), ins__key_cmp);
733 if (arch->insn_suffix) {
742 if (strchr(arch->insn_suffix, suffix) == NULL)
748 ins = bsearch(tmp, arch->instructions, nmemb, sizeof(struct ins), ins__key_cmp);
753 static struct ins_ops *ins__find(struct arch *arch, const char *name)
755 struct ins_ops *ops = __ins__find(arch, name);
757 if (!ops && arch->associate_instruction_ops)
758 ops = arch->associate_instruction_ops(arch, name);
765 const struct arch *arch = archp;
767 return strcmp(name, arch->name);
772 const struct arch *aa = a;
773 const struct arch *ab = b;
782 qsort(architectures, nmemb, sizeof(struct arch), arch__cmp);
785 static struct arch *arch__find(const char *name)
795 return bsearch(name, architectures, nmemb, sizeof(struct arch), arch__key_cmp);
1163 static void disasm_line__init_ins(struct disasm_line *dl, struct arch *arch, struct map_symbol *ms)
1165 dl->ins.ops = ins__find(arch, dl->ins.name);
1170 if (dl->ins.ops->parse && dl->ins.ops->parse(arch, &dl->ops, ms) < 0)
1203 struct arch *arch;
1268 disasm_line__init_ins(dl, args->arch, &args->ms);
1715 scnprintf(buf, buflen, "Problems with arch specific instruction name regular expressions.");
1718 scnprintf(buf, buflen, "Problems while parsing the CPUID in the arch specific initialization.");
1863 info.arch = bfd_get_arch(bfdf);
1894 disassemble = disassembler(info.arch,
2303 struct annotation_options *options, struct arch **parch)
2313 struct arch *arch;
2319 args.arch = arch = arch__find(arch_name);
2320 if (arch == NULL) {
2321 pr_err("%s: unsupported arch %s\n", __func__, arch_name);
2326 *parch = arch;
2328 if (arch->init) {
2329 err = arch->init(arch, env ? env->cpuid : NULL);
2331 pr_err("%s: failed to initialize %s arch priv area\n", __func__, arch->name);
3243 struct annotation_options *options, struct arch **parch)