Currently functions like get_dwarf_regnum only work with the host
architecture. Carry the elf machine and flags in struct arch so that
in disassembly these can be used to allow cross platform disassembly.
Reviewed-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
Signed-off-by: Ian Rogers <irogers@google.com>
Cc: Anup Patel <anup@brainfault.org>
Cc: Yang Jihong <yangjihong@bytedance.com>
Cc: Palmer Dabbelt <palmer@dabbelt.com>
Cc: David S. Miller <davem@davemloft.net>
Cc: Albert Ou <aou@eecs.berkeley.edu>
Cc: Shenlin Liang <liangshenlin@eswincomputing.com>
Cc: Nick Terrell <terrelln@fb.com>
Cc: Guilherme Amadio <amadio@gentoo.org>
Cc: Steinar H. Gunderson <sesse@google.com>
Cc: Changbin Du <changbin.du@huawei.com>
Cc: Alexander Lobakin <aleksander.lobakin@intel.com>
Cc: Przemek Kitszel <przemyslaw.kitszel@intel.com>
Cc: Huacai Chen <chenhuacai@kernel.org>
Cc: Guo Ren <guoren@kernel.org>
Cc: Masahiro Yamada <masahiroy@kernel.org>
Cc: Will Deacon <will@kernel.org>
Cc: James Clark <james.clark@linaro.org>
Cc: Mike Leach <mike.leach@linaro.org>
Cc: Chen Pei <cp0613@linux.alibaba.com>
Cc: Leo Yan <leo.yan@linux.dev>
Cc: Oliver Upton <oliver.upton@linux.dev>
Cc: Aditya Gupta <adityag@linux.ibm.com>
Cc: Kajol Jain <kjain@linux.ibm.com>
Cc: Athira Rajeev <atrajeev@linux.vnet.ibm.com>
Cc: linux-arm-kernel@lists.infradead.org
Cc: linux-riscv@lists.infradead.org
Cc: Bibo Mao <maobibo@loongson.cn>
Cc: John Garry <john.g.garry@oracle.com>
Cc: Atish Patra <atishp@rivosinc.com>
Cc: Dima Kogan <dima@secretsauce.net>
Cc: Paul Walmsley <paul.walmsley@sifive.com>
Cc: Dr. David Alan Gilbert <linux@treblig.org>
Cc: linux-csky@vger.kernel.org
Link: https://lore.kernel.org/r/20241108234606.429459-5-irogers@google.com
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
 
 {
        arch->initialized = true;
        arch->objdump.comment_char = ';';
+       arch->e_machine = EM_ARC;
+       arch->e_flags = 0;
        return 0;
 }
 
        arch->associate_instruction_ops   = arm__associate_instruction_ops;
        arch->objdump.comment_char        = ';';
        arch->objdump.skip_functions_char = '+';
+       arch->e_machine = EM_ARM;
+       arch->e_flags = 0;
        return 0;
 
 out_free_call:
 
        arch->associate_instruction_ops   = arm64__associate_instruction_ops;
        arch->objdump.comment_char        = '/';
        arch->objdump.skip_functions_char = '+';
+       arch->e_machine = EM_AARCH64;
+       arch->e_flags = 0;
        return 0;
 
 out_free_call:
 
        arch->initialized = true;
        arch->objdump.comment_char = '/';
        arch->associate_instruction_ops = csky__associate_ins_ops;
-
+       arch->e_machine = EM_CSKY;
+#if defined(__CSKYABIV2__)
+       arch->e_flags = EF_CSKY_ABIV2;
+#else
+       arch->e_flags = EF_CSKY_ABIV1;
+#endif
        return 0;
 }
 
                arch->associate_instruction_ops = loongarch__associate_ins_ops;
                arch->initialized = true;
                arch->objdump.comment_char = '#';
+               arch->e_machine = EM_LOONGARCH;
+               arch->e_flags = 0;
        }
 
        return 0;
 
                arch->associate_instruction_ops = mips__associate_ins_ops;
                arch->initialized = true;
                arch->objdump.comment_char = '#';
+               arch->e_machine = EM_MIPS;
+               arch->e_flags = 0;
        }
 
        return 0;
 
                arch->associate_instruction_ops = powerpc__associate_instruction_ops;
                arch->objdump.comment_char      = '#';
                annotate_opts.show_asm_raw = true;
+               arch->e_machine = EM_PPC;
+               arch->e_flags = 0;
        }
 
        return 0;
 
                arch->associate_instruction_ops = riscv64__associate_ins_ops;
                arch->initialized = true;
                arch->objdump.comment_char = '#';
+               arch->e_machine = EM_RISCV;
+               arch->e_flags = 0;
        }
 
        return 0;
 
                        if (s390__cpuid_parse(arch, cpuid))
                                err = SYMBOL_ANNOTATE_ERRNO__ARCH_INIT_CPUID_PARSING;
                }
+               arch->e_machine = EM_S390;
+               arch->e_flags = 0;
        }
 
        return err;
 
                arch->initialized = true;
                arch->associate_instruction_ops = sparc__associate_instruction_ops;
                arch->objdump.comment_char = '#';
+               arch->e_machine = EM_SPARC;
+               arch->e_flags = 0;
        }
 
        return 0;
 
                if (x86__cpuid_parse(arch, cpuid))
                        err = SYMBOL_ANNOTATE_ERRNO__ARCH_INIT_CPUID_PARSING;
        }
-
+       arch->e_machine = EM_X86_64;
+       arch->e_flags = 0;
        arch->initialized = true;
        return err;
 }
 
                                struct data_loc_info *dloc, Dwarf_Die *cu_die,
                                struct disasm_line *dl);
 #endif
+       /** @e_machine: ELF machine associated with arch. */
+       unsigned int e_machine;
+       /** @e_flags: Optional ELF flags associated with arch. */
+       unsigned int e_flags;
 };
 
 struct ins {