17c478bd9Sstevel@tonic-gate /*
27c478bd9Sstevel@tonic-gate * CDDL HEADER START
37c478bd9Sstevel@tonic-gate *
47c478bd9Sstevel@tonic-gate * The contents of this file are subject to the terms of the
55aefb655Srie * Common Development and Distribution License (the "License").
65aefb655Srie * You may not use this file except in compliance with the License.
77c478bd9Sstevel@tonic-gate *
87c478bd9Sstevel@tonic-gate * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
97c478bd9Sstevel@tonic-gate * or http://www.opensolaris.org/os/licensing.
107c478bd9Sstevel@tonic-gate * See the License for the specific language governing permissions
117c478bd9Sstevel@tonic-gate * and limitations under the License.
127c478bd9Sstevel@tonic-gate *
137c478bd9Sstevel@tonic-gate * When distributing Covered Code, include this CDDL HEADER in each
147c478bd9Sstevel@tonic-gate * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
157c478bd9Sstevel@tonic-gate * If applicable, add the following below this CDDL HEADER, with the
167c478bd9Sstevel@tonic-gate * fields enclosed by brackets "[]" replaced with your own identifying
177c478bd9Sstevel@tonic-gate * information: Portions Copyright [yyyy] [name of copyright owner]
187c478bd9Sstevel@tonic-gate *
197c478bd9Sstevel@tonic-gate * CDDL HEADER END
207c478bd9Sstevel@tonic-gate */
215aefb655Srie
227c478bd9Sstevel@tonic-gate /*
23dc0f59e5SAli Bahrami * Copyright (c) 1992, 2010, Oracle and/or its affiliates. All rights reserved.
24856f620eSRobert Mustacchi * Copyright (c) 2018, Joyent, Inc.
2556726c7eSRobert Mustacchi * Copyright 2022 Oxide Computer Company
267c478bd9Sstevel@tonic-gate */
277c478bd9Sstevel@tonic-gate
287c478bd9Sstevel@tonic-gate /*
297c478bd9Sstevel@tonic-gate * String conversion routines for ELF header attributes.
307c478bd9Sstevel@tonic-gate */
317c478bd9Sstevel@tonic-gate #include <stdio.h>
327c478bd9Sstevel@tonic-gate #include <string.h>
337c478bd9Sstevel@tonic-gate #include "_conv.h"
347c478bd9Sstevel@tonic-gate #include "elf_msg.h"
357c478bd9Sstevel@tonic-gate #include <sys/elf_SPARC.h>
367c478bd9Sstevel@tonic-gate
37c13de8f6Sab
38c13de8f6Sab
394f680cc6SAli Bahrami static const conv_ds_t **
ehdr_class_strings(Conv_fmt_flags_t fmt_flags)404f680cc6SAli Bahrami ehdr_class_strings(Conv_fmt_flags_t fmt_flags)
414f680cc6SAli Bahrami {
424f680cc6SAli Bahrami static const Msg class_cf[] = {
434f680cc6SAli Bahrami MSG_ELFCLASSNONE_CF, MSG_ELFCLASS32_CF, MSG_ELFCLASS64_CF
444f680cc6SAli Bahrami };
454f680cc6SAli Bahrami static const Msg class_nf[] = {
464f680cc6SAli Bahrami MSG_ELFCLASSNONE_NF, MSG_ELFCLASS32_NF, MSG_ELFCLASS64_NF
474f680cc6SAli Bahrami };
484f680cc6SAli Bahrami static const Msg class_dump[] = {
494f680cc6SAli Bahrami MSG_ELFCLASSNONE_DMP, MSG_ELFCLASS32_DMP, MSG_ELFCLASS64_DMP
504f680cc6SAli Bahrami };
514f680cc6SAli Bahrami
524f680cc6SAli Bahrami static const conv_ds_msg_t ds_classes_cf = {
534f680cc6SAli Bahrami CONV_DS_MSG_INIT(ELFCLASSNONE, class_cf) };
544f680cc6SAli Bahrami static const conv_ds_msg_t ds_classes_nf = {
554f680cc6SAli Bahrami CONV_DS_MSG_INIT(ELFCLASSNONE, class_nf) };
564f680cc6SAli Bahrami static const conv_ds_msg_t ds_classes_dump = {
574f680cc6SAli Bahrami CONV_DS_MSG_INIT(ELFCLASSNONE, class_dump) };
584f680cc6SAli Bahrami
594f680cc6SAli Bahrami static const conv_ds_t *ds_cf[] = { CONV_DS_ADDR(ds_classes_cf), NULL };
604f680cc6SAli Bahrami static const conv_ds_t *ds_nf[] = { CONV_DS_ADDR(ds_classes_nf), NULL };
614f680cc6SAli Bahrami static const conv_ds_t *ds_dump[] = {
624f680cc6SAli Bahrami CONV_DS_ADDR(ds_classes_dump), NULL };
63c13de8f6Sab
644f680cc6SAli Bahrami switch (CONV_TYPE_FMT_ALT(fmt_flags)) {
654f680cc6SAli Bahrami case CONV_FMT_ALT_DUMP:
664f680cc6SAli Bahrami case CONV_FMT_ALT_FILE:
674f680cc6SAli Bahrami return (ds_dump);
684f680cc6SAli Bahrami case CONV_FMT_ALT_NF:
694f680cc6SAli Bahrami return (ds_nf);
704f680cc6SAli Bahrami }
71c13de8f6Sab
724f680cc6SAli Bahrami return (ds_cf);
734f680cc6SAli Bahrami }
74c13de8f6Sab
757c478bd9Sstevel@tonic-gate const char *
conv_ehdr_class(uchar_t class,Conv_fmt_flags_t fmt_flags,Conv_inv_buf_t * inv_buf)76d29b2c44Sab conv_ehdr_class(uchar_t class, Conv_fmt_flags_t fmt_flags,
77d29b2c44Sab Conv_inv_buf_t *inv_buf)
787c478bd9Sstevel@tonic-gate {
794f680cc6SAli Bahrami return (conv_map_ds(ELFOSABI_NONE, EM_NONE, class,
804f680cc6SAli Bahrami ehdr_class_strings(fmt_flags), fmt_flags, inv_buf));
814f680cc6SAli Bahrami }
824f680cc6SAli Bahrami
834f680cc6SAli Bahrami conv_iter_ret_t
conv_iter_ehdr_class(Conv_fmt_flags_t fmt_flags,conv_iter_cb_t func,void * uvalue)844f680cc6SAli Bahrami conv_iter_ehdr_class(Conv_fmt_flags_t fmt_flags, conv_iter_cb_t func,
854f680cc6SAli Bahrami void *uvalue)
864f680cc6SAli Bahrami {
874f680cc6SAli Bahrami return (conv_iter_ds(ELFOSABI_NONE, EM_NONE,
884f680cc6SAli Bahrami ehdr_class_strings(fmt_flags), func, uvalue));
894f680cc6SAli Bahrami }
904f680cc6SAli Bahrami
914f680cc6SAli Bahrami static const conv_ds_t **
ehdr_data_strings(Conv_fmt_flags_t fmt_flags)924f680cc6SAli Bahrami ehdr_data_strings(Conv_fmt_flags_t fmt_flags)
934f680cc6SAli Bahrami {
944f680cc6SAli Bahrami static const Msg data_cf[] = {
954f680cc6SAli Bahrami MSG_ELFDATANONE_CF, MSG_ELFDATA2LSB_CF, MSG_ELFDATA2MSB_CF
964f680cc6SAli Bahrami };
974f680cc6SAli Bahrami static const Msg data_nf[] = {
984f680cc6SAli Bahrami MSG_ELFDATANONE_NF, MSG_ELFDATA2LSB_NF, MSG_ELFDATA2MSB_NF
99c13de8f6Sab };
1004f680cc6SAli Bahrami static const Msg data_dump[] = {
1014f680cc6SAli Bahrami MSG_ELFDATANONE_DMP, MSG_ELFDATA2LSB_DMP, MSG_ELFDATA2MSB_DMP
1025aefb655Srie };
1034f680cc6SAli Bahrami static const Msg data_file[] = {
1044f680cc6SAli Bahrami MSG_ELFDATANONE_DMP, MSG_ELFDATA2LSB_FIL, MSG_ELFDATA2MSB_FIL
1054f680cc6SAli Bahrami };
1064f680cc6SAli Bahrami
1074f680cc6SAli Bahrami
1084f680cc6SAli Bahrami static const conv_ds_msg_t ds_data_cf = {
1094f680cc6SAli Bahrami CONV_DS_MSG_INIT(ELFCLASSNONE, data_cf) };
1104f680cc6SAli Bahrami static const conv_ds_msg_t ds_data_nf = {
1114f680cc6SAli Bahrami CONV_DS_MSG_INIT(ELFCLASSNONE, data_nf) };
1124f680cc6SAli Bahrami static const conv_ds_msg_t ds_data_dump = {
1134f680cc6SAli Bahrami CONV_DS_MSG_INIT(ELFCLASSNONE, data_dump) };
1144f680cc6SAli Bahrami static const conv_ds_msg_t ds_data_file = {
1154f680cc6SAli Bahrami CONV_DS_MSG_INIT(ELFCLASSNONE, data_file) };
1164f680cc6SAli Bahrami
1174f680cc6SAli Bahrami static const conv_ds_t *ds_cf[] = { CONV_DS_ADDR(ds_data_cf), NULL };
1184f680cc6SAli Bahrami static const conv_ds_t *ds_nf[] = { CONV_DS_ADDR(ds_data_nf), NULL };
1194f680cc6SAli Bahrami static const conv_ds_t *ds_dump[] = { CONV_DS_ADDR(ds_data_dump),
1204f680cc6SAli Bahrami NULL };
1214f680cc6SAli Bahrami static const conv_ds_t *ds_file[] = { CONV_DS_ADDR(ds_data_file),
1224f680cc6SAli Bahrami NULL };
1237c478bd9Sstevel@tonic-gate
124d29b2c44Sab switch (CONV_TYPE_FMT_ALT(fmt_flags)) {
125d29b2c44Sab case CONV_FMT_ALT_DUMP:
1264f680cc6SAli Bahrami return (ds_dump);
127d29b2c44Sab case CONV_FMT_ALT_FILE:
1284f680cc6SAli Bahrami return (ds_file);
1294f680cc6SAli Bahrami case CONV_FMT_ALT_NF:
1304f680cc6SAli Bahrami return (ds_nf);
131d29b2c44Sab }
132d29b2c44Sab
1334f680cc6SAli Bahrami return (ds_cf);
1347c478bd9Sstevel@tonic-gate }
1357c478bd9Sstevel@tonic-gate
1367c478bd9Sstevel@tonic-gate const char *
conv_ehdr_data(uchar_t data,Conv_fmt_flags_t fmt_flags,Conv_inv_buf_t * inv_buf)137d29b2c44Sab conv_ehdr_data(uchar_t data, Conv_fmt_flags_t fmt_flags,
138d29b2c44Sab Conv_inv_buf_t *inv_buf)
1397c478bd9Sstevel@tonic-gate {
1404f680cc6SAli Bahrami return (conv_map_ds(ELFOSABI_NONE, EM_NONE, data,
1414f680cc6SAli Bahrami ehdr_data_strings(fmt_flags), fmt_flags, inv_buf));
1424f680cc6SAli Bahrami }
1434f680cc6SAli Bahrami
1444f680cc6SAli Bahrami conv_iter_ret_t
conv_iter_ehdr_data(Conv_fmt_flags_t fmt_flags,conv_iter_cb_t func,void * uvalue)1454f680cc6SAli Bahrami conv_iter_ehdr_data(Conv_fmt_flags_t fmt_flags, conv_iter_cb_t func,
1464f680cc6SAli Bahrami void *uvalue)
1474f680cc6SAli Bahrami {
1484f680cc6SAli Bahrami return (conv_iter_ds(ELFOSABI_NONE, EM_NONE,
1494f680cc6SAli Bahrami ehdr_data_strings(fmt_flags), func, uvalue));
1504f680cc6SAli Bahrami }
1514f680cc6SAli Bahrami
1524f680cc6SAli Bahrami static const conv_ds_t **
ehdr_mach_strings(Conv_fmt_flags_t fmt_flags)1534f680cc6SAli Bahrami ehdr_mach_strings(Conv_fmt_flags_t fmt_flags)
1544f680cc6SAli Bahrami {
1554f680cc6SAli Bahrami
1564f680cc6SAli Bahrami static const Msg mach_0_11_cf[] = {
1574f680cc6SAli Bahrami MSG_EM_NONE_CF, MSG_EM_M32_CF,
1584f680cc6SAli Bahrami MSG_EM_SPARC_CF, MSG_EM_386_CF,
1594f680cc6SAli Bahrami MSG_EM_68K_CF, MSG_EM_88K_CF,
1604f680cc6SAli Bahrami MSG_EM_486_CF, MSG_EM_860_CF,
1614f680cc6SAli Bahrami MSG_EM_MIPS_CF, MSG_EM_S370_CF,
1624f680cc6SAli Bahrami MSG_EM_MIPS_RS3_LE_CF, MSG_EM_RS6000_CF
1634f680cc6SAli Bahrami };
1644f680cc6SAli Bahrami static const Msg mach_0_11_nf[] = {
1654f680cc6SAli Bahrami MSG_EM_NONE_NF, MSG_EM_M32_NF,
1664f680cc6SAli Bahrami MSG_EM_SPARC_NF, MSG_EM_386_NF,
1674f680cc6SAli Bahrami MSG_EM_68K_NF, MSG_EM_88K_NF,
1684f680cc6SAli Bahrami MSG_EM_486_NF, MSG_EM_860_NF,
1694f680cc6SAli Bahrami MSG_EM_MIPS_NF, MSG_EM_S370_NF,
1704f680cc6SAli Bahrami MSG_EM_MIPS_RS3_LE_NF, MSG_EM_RS6000_NF
1714f680cc6SAli Bahrami };
1724f680cc6SAli Bahrami static const Msg mach_0_11_dmp[] = {
1734f680cc6SAli Bahrami MSG_EM_NONE_DMP, MSG_EM_M32_DMP,
1744f680cc6SAli Bahrami MSG_EM_SPARC_DMP, MSG_EM_386_DMP,
1754f680cc6SAli Bahrami MSG_EM_68K_DMP, MSG_EM_88K_DMP,
1764f680cc6SAli Bahrami MSG_EM_486_DMP, MSG_EM_860_DMP,
1774f680cc6SAli Bahrami MSG_EM_MIPS_DMP, MSG_EM_S370_CF,
1784f680cc6SAli Bahrami MSG_EM_MIPS_RS3_LE_DMP, MSG_EM_RS6000_DMP
1794f680cc6SAli Bahrami };
1804f680cc6SAli Bahrami static const conv_ds_msg_t ds_mach_0_11_cf = {
1814f680cc6SAli Bahrami CONV_DS_MSG_INIT(EM_NONE, mach_0_11_cf) };
1824f680cc6SAli Bahrami static const conv_ds_msg_t ds_mach_0_11_nf = {
1834f680cc6SAli Bahrami CONV_DS_MSG_INIT(EM_NONE, mach_0_11_nf) };
1844f680cc6SAli Bahrami static const conv_ds_msg_t ds_mach_0_11_dmp = {
1854f680cc6SAli Bahrami CONV_DS_MSG_INIT(EM_NONE, mach_0_11_dmp) };
1864f680cc6SAli Bahrami
1874f680cc6SAli Bahrami
1884f680cc6SAli Bahrami static const Msg mach_15_22_cf[] = {
1894f680cc6SAli Bahrami MSG_EM_PA_RISC_CF, MSG_EM_NCUBE_CF,
1904f680cc6SAli Bahrami MSG_EM_VPP500_CF, MSG_EM_SPARC32PLUS_CF,
1914f680cc6SAli Bahrami MSG_EM_960_CF, MSG_EM_PPC_CF,
1924f680cc6SAli Bahrami MSG_EM_PPC64_CF, MSG_EM_S390_CF
1934f680cc6SAli Bahrami };
1944f680cc6SAli Bahrami static const Msg mach_15_22_nf[] = {
1954f680cc6SAli Bahrami MSG_EM_PA_RISC_NF, MSG_EM_NCUBE_NF,
1964f680cc6SAli Bahrami MSG_EM_VPP500_NF, MSG_EM_SPARC32PLUS_NF,
1974f680cc6SAli Bahrami MSG_EM_960_NF, MSG_EM_PPC_NF,
1984f680cc6SAli Bahrami MSG_EM_PPC64_NF, MSG_EM_S390_NF
1994f680cc6SAli Bahrami };
2004f680cc6SAli Bahrami static const Msg mach_15_22_dmp[] = {
2014f680cc6SAli Bahrami MSG_EM_PA_RISC_DMP, MSG_EM_NCUBE_DMP,
2024f680cc6SAli Bahrami MSG_EM_VPP500_DMP, MSG_EM_SPARC32PLUS_DMP,
2034f680cc6SAli Bahrami MSG_EM_960_CF, MSG_EM_PPC_DMP,
2044f680cc6SAli Bahrami MSG_EM_PPC64_DMP, MSG_EM_S390_CF
2054f680cc6SAli Bahrami };
2064f680cc6SAli Bahrami static const conv_ds_msg_t ds_mach_15_22_cf = {
2074f680cc6SAli Bahrami CONV_DS_MSG_INIT(EM_PA_RISC, mach_15_22_cf) };
2084f680cc6SAli Bahrami static const conv_ds_msg_t ds_mach_15_22_nf = {
2094f680cc6SAli Bahrami CONV_DS_MSG_INIT(EM_PA_RISC, mach_15_22_nf) };
2104f680cc6SAli Bahrami static const conv_ds_msg_t ds_mach_15_22_dmp = {
2114f680cc6SAli Bahrami CONV_DS_MSG_INIT(EM_PA_RISC, mach_15_22_dmp) };
2124f680cc6SAli Bahrami
2134f680cc6SAli Bahrami
2144f680cc6SAli Bahrami static const Msg mach_36_63_cf[] = {
2154f680cc6SAli Bahrami MSG_EM_V800_CF, MSG_EM_FR20_CF,
2164f680cc6SAli Bahrami MSG_EM_RH32_CF, MSG_EM_RCE_CF,
2174f680cc6SAli Bahrami MSG_EM_ARM_CF, MSG_EM_ALPHA_CF,
2184f680cc6SAli Bahrami MSG_EM_SH_CF, MSG_EM_SPARCV9_CF,
2194f680cc6SAli Bahrami MSG_EM_TRICORE_CF, MSG_EM_ARC_CF,
2204f680cc6SAli Bahrami MSG_EM_H8_300_CF, MSG_EM_H8_300H_CF,
2214f680cc6SAli Bahrami MSG_EM_H8S_CF, MSG_EM_H8_500_CF,
2224f680cc6SAli Bahrami MSG_EM_IA_64_CF, MSG_EM_MIPS_X_CF,
2234f680cc6SAli Bahrami MSG_EM_COLDFIRE_CF, MSG_EM_68HC12_CF,
2244f680cc6SAli Bahrami MSG_EM_MMA_CF, MSG_EM_PCP_CF,
2254f680cc6SAli Bahrami MSG_EM_NCPU_CF, MSG_EM_NDR1_CF,
2264f680cc6SAli Bahrami MSG_EM_STARCORE_CF, MSG_EM_ME16_CF,
2274f680cc6SAli Bahrami MSG_EM_ST100_CF, MSG_EM_TINYJ_CF,
2284f680cc6SAli Bahrami MSG_EM_AMD64_CF, MSG_EM_PDSP_CF
2294f680cc6SAli Bahrami };
2304f680cc6SAli Bahrami static const Msg mach_36_63_nf[] = {
2314f680cc6SAli Bahrami MSG_EM_V800_NF, MSG_EM_FR20_NF,
2324f680cc6SAli Bahrami MSG_EM_RH32_NF, MSG_EM_RCE_NF,
2334f680cc6SAli Bahrami MSG_EM_ARM_NF, MSG_EM_ALPHA_NF,
2344f680cc6SAli Bahrami MSG_EM_SH_NF, MSG_EM_SPARCV9_NF,
2354f680cc6SAli Bahrami MSG_EM_TRICORE_NF, MSG_EM_ARC_NF,
2364f680cc6SAli Bahrami MSG_EM_H8_300_NF, MSG_EM_H8_300H_NF,
2374f680cc6SAli Bahrami MSG_EM_H8S_NF, MSG_EM_H8_500_NF,
2384f680cc6SAli Bahrami MSG_EM_IA_64_NF, MSG_EM_MIPS_X_NF,
2394f680cc6SAli Bahrami MSG_EM_COLDFIRE_NF, MSG_EM_68HC12_NF,
2404f680cc6SAli Bahrami MSG_EM_MMA_NF, MSG_EM_PCP_NF,
2414f680cc6SAli Bahrami MSG_EM_NCPU_NF, MSG_EM_NDR1_NF,
2424f680cc6SAli Bahrami MSG_EM_STARCORE_NF, MSG_EM_ME16_NF,
2434f680cc6SAli Bahrami MSG_EM_ST100_NF, MSG_EM_TINYJ_NF,
2444f680cc6SAli Bahrami MSG_EM_AMD64_NF, MSG_EM_PDSP_NF
245c13de8f6Sab };
2464f680cc6SAli Bahrami static const Msg mach_36_63_dmp[] = {
2474f680cc6SAli Bahrami MSG_EM_V800_CF, MSG_EM_FR20_CF,
2484f680cc6SAli Bahrami MSG_EM_RH32_CF, MSG_EM_RCE_CF,
2494f680cc6SAli Bahrami MSG_EM_ARM_DMP, MSG_EM_ALPHA_DMP,
2504f680cc6SAli Bahrami MSG_EM_SH_CF, MSG_EM_SPARCV9_DMP,
2514f680cc6SAli Bahrami MSG_EM_TRICORE_CF, MSG_EM_ARC_CF,
2524f680cc6SAli Bahrami MSG_EM_H8_300_CF, MSG_EM_H8_300H_CF,
2534f680cc6SAli Bahrami MSG_EM_H8S_CF, MSG_EM_H8_500_CF,
2544f680cc6SAli Bahrami MSG_EM_IA_64_DMP, MSG_EM_MIPS_X_CF,
2554f680cc6SAli Bahrami MSG_EM_COLDFIRE_CF, MSG_EM_68HC12_CF,
2564f680cc6SAli Bahrami MSG_EM_MMA_CF, MSG_EM_PCP_CF,
2574f680cc6SAli Bahrami MSG_EM_NCPU_CF, MSG_EM_NDR1_CF,
2584f680cc6SAli Bahrami MSG_EM_STARCORE_CF, MSG_EM_ME16_CF,
2594f680cc6SAli Bahrami MSG_EM_ST100_CF, MSG_EM_TINYJ_CF,
2604f680cc6SAli Bahrami MSG_EM_AMD64_DMP, MSG_EM_PDSP_CF
261c13de8f6Sab };
2624f680cc6SAli Bahrami static const conv_ds_msg_t ds_mach_36_63_cf = {
2634f680cc6SAli Bahrami CONV_DS_MSG_INIT(EM_V800, mach_36_63_cf) };
2644f680cc6SAli Bahrami static const conv_ds_msg_t ds_mach_36_63_nf = {
2654f680cc6SAli Bahrami CONV_DS_MSG_INIT(EM_V800, mach_36_63_nf) };
2664f680cc6SAli Bahrami static const conv_ds_msg_t ds_mach_36_63_dmp = {
2674f680cc6SAli Bahrami CONV_DS_MSG_INIT(EM_V800, mach_36_63_dmp) };
2684f680cc6SAli Bahrami
2694f680cc6SAli Bahrami
270856f620eSRobert Mustacchi static const Msg mach_66_120_cf[] = {
2714f680cc6SAli Bahrami MSG_EM_FX66_CF, MSG_EM_ST9PLUS_CF,
2724f680cc6SAli Bahrami MSG_EM_ST7_CF, MSG_EM_68HC16_CF,
2734f680cc6SAli Bahrami MSG_EM_68HC11_CF, MSG_EM_68HC08_CF,
2744f680cc6SAli Bahrami MSG_EM_68HC05_CF, MSG_EM_SVX_CF,
2754f680cc6SAli Bahrami MSG_EM_ST19_CF, MSG_EM_VAX_CF,
2764f680cc6SAli Bahrami MSG_EM_CRIS_CF, MSG_EM_JAVELIN_CF,
2774f680cc6SAli Bahrami MSG_EM_FIREPATH_CF, MSG_EM_ZSP_CF,
2784f680cc6SAli Bahrami MSG_EM_MMIX_CF, MSG_EM_HUANY_CF,
2794f680cc6SAli Bahrami MSG_EM_PRISM_CF, MSG_EM_AVR_CF,
2804f680cc6SAli Bahrami MSG_EM_FR30_CF, MSG_EM_D10V_CF,
2814f680cc6SAli Bahrami MSG_EM_D30V_CF, MSG_EM_V850_CF,
2824f680cc6SAli Bahrami MSG_EM_M32R_CF, MSG_EM_MN10300_CF,
2834f680cc6SAli Bahrami MSG_EM_MN10200_CF, MSG_EM_PJ_CF,
2844f680cc6SAli Bahrami MSG_EM_OPENRISC_CF, MSG_EM_ARC_A5_CF,
285856f620eSRobert Mustacchi MSG_EM_XTENSA_CF, MSG_EM_VIDEOCORE_CF,
286856f620eSRobert Mustacchi MSG_EM_TMM_GPP_CF, MSG_EM_NS32K_CF,
287856f620eSRobert Mustacchi MSG_EM_TPC_CF, MSG_EM_SNP1K_CF,
288856f620eSRobert Mustacchi MSG_EM_ST200_CF, MSG_EM_IP2K_CF,
289856f620eSRobert Mustacchi MSG_EM_MAX_CF, MSG_EM_CR_CF,
290856f620eSRobert Mustacchi MSG_EM_F2MC16_CF, MSG_EM_MSP430_CF,
291856f620eSRobert Mustacchi MSG_EM_BLACKFIN_CF, MSG_EM_SE_C33_CF,
292856f620eSRobert Mustacchi MSG_EM_SEP_CF, MSG_EM_ARCA_CF,
293856f620eSRobert Mustacchi MSG_EM_UNICORE_CF, MSG_EM_EXCESS_CF,
294856f620eSRobert Mustacchi MSG_EM_DXP_CF, MSG_EM_ALTERA_NIOS2_CF,
295856f620eSRobert Mustacchi MSG_EM_CRX_CF, MSG_EM_XGATE_CF,
296856f620eSRobert Mustacchi MSG_EM_C166_CF, MSG_EM_M16C_CF,
297856f620eSRobert Mustacchi MSG_EM_DSPIC30F_CF, MSG_EM_CE_CF,
298856f620eSRobert Mustacchi MSG_EM_M32C_CF
2995aefb655Srie };
300856f620eSRobert Mustacchi static const Msg mach_66_120_nf[] = {
3014f680cc6SAli Bahrami MSG_EM_FX66_NF, MSG_EM_ST9PLUS_NF,
3024f680cc6SAli Bahrami MSG_EM_ST7_NF, MSG_EM_68HC16_NF,
3034f680cc6SAli Bahrami MSG_EM_68HC11_NF, MSG_EM_68HC08_NF,
3044f680cc6SAli Bahrami MSG_EM_68HC05_NF, MSG_EM_SVX_NF,
3054f680cc6SAli Bahrami MSG_EM_ST19_NF, MSG_EM_VAX_NF,
3064f680cc6SAli Bahrami MSG_EM_CRIS_NF, MSG_EM_JAVELIN_NF,
3074f680cc6SAli Bahrami MSG_EM_FIREPATH_NF, MSG_EM_ZSP_NF,
3084f680cc6SAli Bahrami MSG_EM_MMIX_NF, MSG_EM_HUANY_NF,
3094f680cc6SAli Bahrami MSG_EM_PRISM_NF, MSG_EM_AVR_NF,
3104f680cc6SAli Bahrami MSG_EM_FR30_NF, MSG_EM_D10V_NF,
3114f680cc6SAli Bahrami MSG_EM_D30V_NF, MSG_EM_V850_NF,
3124f680cc6SAli Bahrami MSG_EM_M32R_NF, MSG_EM_MN10300_NF,
3134f680cc6SAli Bahrami MSG_EM_MN10200_NF, MSG_EM_PJ_NF,
3144f680cc6SAli Bahrami MSG_EM_OPENRISC_NF, MSG_EM_ARC_A5_NF,
315856f620eSRobert Mustacchi MSG_EM_XTENSA_NF, MSG_EM_VIDEOCORE_NF,
316856f620eSRobert Mustacchi MSG_EM_TMM_GPP_NF, MSG_EM_NS32K_NF,
317856f620eSRobert Mustacchi MSG_EM_TPC_NF, MSG_EM_SNP1K_NF,
318856f620eSRobert Mustacchi MSG_EM_ST200_NF, MSG_EM_IP2K_NF,
319856f620eSRobert Mustacchi MSG_EM_MAX_NF, MSG_EM_CR_NF,
320856f620eSRobert Mustacchi MSG_EM_F2MC16_NF, MSG_EM_MSP430_NF,
321856f620eSRobert Mustacchi MSG_EM_BLACKFIN_NF, MSG_EM_SE_C33_NF,
322856f620eSRobert Mustacchi MSG_EM_SEP_NF, MSG_EM_ARCA_NF,
323856f620eSRobert Mustacchi MSG_EM_UNICORE_NF, MSG_EM_EXCESS_NF,
324856f620eSRobert Mustacchi MSG_EM_DXP_NF, MSG_EM_ALTERA_NIOS2_NF,
325856f620eSRobert Mustacchi MSG_EM_CRX_NF, MSG_EM_XGATE_NF,
326856f620eSRobert Mustacchi MSG_EM_C166_NF, MSG_EM_M16C_NF,
327856f620eSRobert Mustacchi MSG_EM_DSPIC30F_NF, MSG_EM_CE_NF,
328856f620eSRobert Mustacchi MSG_EM_TSK3000_NF, MSG_EM_RS08_NF,
329856f620eSRobert Mustacchi MSG_EM_SHARC_NF, MSG_EM_ECOG2_NF,
330856f620eSRobert Mustacchi MSG_EM_SCORE7_NF, MSG_EM_DSP24_NF,
331856f620eSRobert Mustacchi MSG_EM_VIDEOCORE3_NF, MSG_EM_LATTICEMICO32_NF,
332856f620eSRobert Mustacchi MSG_EM_SE_C17_NF, MSG_EM_TI_C6000_NF,
333856f620eSRobert Mustacchi MSG_EM_TI_C2000_NF, MSG_EM_TI_C5500_NF,
334856f620eSRobert Mustacchi MSG_EM_TI_ARP32_NF, MSG_EM_TI_PRU_NF
3354f680cc6SAli Bahrami };
336856f620eSRobert Mustacchi static const Msg mach_66_120_dmp[] = {
3374f680cc6SAli Bahrami MSG_EM_FX66_CF, MSG_EM_ST9PLUS_CF,
3384f680cc6SAli Bahrami MSG_EM_ST7_CF, MSG_EM_68HC16_CF,
3394f680cc6SAli Bahrami MSG_EM_68HC11_CF, MSG_EM_68HC08_CF,
3404f680cc6SAli Bahrami MSG_EM_68HC05_CF, MSG_EM_SVX_CF,
3414f680cc6SAli Bahrami MSG_EM_ST19_CF, MSG_EM_VAX_DMP,
3424f680cc6SAli Bahrami MSG_EM_CRIS_CF, MSG_EM_JAVELIN_CF,
3434f680cc6SAli Bahrami MSG_EM_FIREPATH_CF, MSG_EM_ZSP_CF,
3444f680cc6SAli Bahrami MSG_EM_MMIX_CF, MSG_EM_HUANY_CF,
3454f680cc6SAli Bahrami MSG_EM_PRISM_CF, MSG_EM_AVR_CF,
3464f680cc6SAli Bahrami MSG_EM_FR30_CF, MSG_EM_D10V_CF,
3474f680cc6SAli Bahrami MSG_EM_D30V_CF, MSG_EM_V850_CF,
3484f680cc6SAli Bahrami MSG_EM_M32R_CF, MSG_EM_MN10300_CF,
3494f680cc6SAli Bahrami MSG_EM_MN10200_CF, MSG_EM_PJ_CF,
3504f680cc6SAli Bahrami MSG_EM_OPENRISC_CF, MSG_EM_ARC_A5_CF,
351856f620eSRobert Mustacchi MSG_EM_XTENSA_CF, MSG_EM_VIDEOCORE_CF,
352856f620eSRobert Mustacchi MSG_EM_TMM_GPP_CF, MSG_EM_NS32K_CF,
353856f620eSRobert Mustacchi MSG_EM_TPC_CF, MSG_EM_SNP1K_CF,
354856f620eSRobert Mustacchi MSG_EM_ST200_CF, MSG_EM_IP2K_CF,
355856f620eSRobert Mustacchi MSG_EM_MAX_CF, MSG_EM_CR_CF,
356856f620eSRobert Mustacchi MSG_EM_F2MC16_CF, MSG_EM_MSP430_CF,
357856f620eSRobert Mustacchi MSG_EM_BLACKFIN_CF, MSG_EM_SE_C33_CF,
358856f620eSRobert Mustacchi MSG_EM_SEP_CF, MSG_EM_ARCA_CF,
359856f620eSRobert Mustacchi MSG_EM_UNICORE_CF, MSG_EM_EXCESS_CF,
360856f620eSRobert Mustacchi MSG_EM_DXP_CF, MSG_EM_ALTERA_NIOS2_CF,
361856f620eSRobert Mustacchi MSG_EM_CRX_CF, MSG_EM_XGATE_CF,
362856f620eSRobert Mustacchi MSG_EM_C166_CF, MSG_EM_M16C_CF,
363856f620eSRobert Mustacchi MSG_EM_DSPIC30F_CF, MSG_EM_CE_CF,
364856f620eSRobert Mustacchi MSG_EM_M32C_CF
365856f620eSRobert Mustacchi };
366856f620eSRobert Mustacchi
367856f620eSRobert Mustacchi static const conv_ds_msg_t ds_mach_66_120_cf = {
368856f620eSRobert Mustacchi CONV_DS_MSG_INIT(EM_FX66, mach_66_120_cf) };
369856f620eSRobert Mustacchi static const conv_ds_msg_t ds_mach_66_120_nf = {
370856f620eSRobert Mustacchi CONV_DS_MSG_INIT(EM_FX66, mach_66_120_nf) };
371856f620eSRobert Mustacchi static const conv_ds_msg_t ds_mach_66_120_dmp = {
372856f620eSRobert Mustacchi CONV_DS_MSG_INIT(EM_FX66, mach_66_120_dmp) };
373856f620eSRobert Mustacchi
374856f620eSRobert Mustacchi static const Msg mach_131_144_cf[] = {
375856f620eSRobert Mustacchi MSG_EM_TSK3000_CF, MSG_EM_RS08_CF,
376856f620eSRobert Mustacchi MSG_EM_SHARC_CF, MSG_EM_ECOG2_CF,
377856f620eSRobert Mustacchi MSG_EM_SCORE7_CF, MSG_EM_DSP24_CF,
378856f620eSRobert Mustacchi MSG_EM_VIDEOCORE3_CF, MSG_EM_LATTICEMICO32_CF,
379856f620eSRobert Mustacchi MSG_EM_SE_C17_CF, MSG_EM_TI_C6000_CF,
380856f620eSRobert Mustacchi MSG_EM_TI_C2000_CF, MSG_EM_TI_C5500_CF,
381856f620eSRobert Mustacchi MSG_EM_TI_ARP32_CF, MSG_EM_TI_PRU_CF
382856f620eSRobert Mustacchi };
383856f620eSRobert Mustacchi static const Msg mach_131_144_nf[] = {
384856f620eSRobert Mustacchi MSG_EM_TSK3000_NF, MSG_EM_RS08_NF,
385856f620eSRobert Mustacchi MSG_EM_SHARC_NF, MSG_EM_ECOG2_NF,
386856f620eSRobert Mustacchi MSG_EM_SCORE7_NF, MSG_EM_DSP24_NF,
387856f620eSRobert Mustacchi MSG_EM_VIDEOCORE3_NF, MSG_EM_LATTICEMICO32_NF,
388856f620eSRobert Mustacchi MSG_EM_SE_C17_NF, MSG_EM_TI_C6000_NF,
389856f620eSRobert Mustacchi MSG_EM_TI_C2000_NF, MSG_EM_TI_C5500_NF,
390856f620eSRobert Mustacchi MSG_EM_TI_ARP32_NF, MSG_EM_TI_PRU_NF
391856f620eSRobert Mustacchi };
392856f620eSRobert Mustacchi static const Msg mach_131_144_dmp[] = {
393856f620eSRobert Mustacchi MSG_EM_TSK3000_CF, MSG_EM_RS08_CF,
394856f620eSRobert Mustacchi MSG_EM_SHARC_CF, MSG_EM_ECOG2_CF,
395856f620eSRobert Mustacchi MSG_EM_SCORE7_CF, MSG_EM_DSP24_CF,
396856f620eSRobert Mustacchi MSG_EM_VIDEOCORE3_CF, MSG_EM_LATTICEMICO32_CF,
397856f620eSRobert Mustacchi MSG_EM_SE_C17_CF, MSG_EM_TI_C6000_CF,
398856f620eSRobert Mustacchi MSG_EM_TI_C2000_CF, MSG_EM_TI_C5500_CF,
399856f620eSRobert Mustacchi MSG_EM_TI_ARP32_CF, MSG_EM_TI_PRU_CF
400856f620eSRobert Mustacchi };
401856f620eSRobert Mustacchi static const conv_ds_msg_t ds_mach_131_144_cf = {
402856f620eSRobert Mustacchi CONV_DS_MSG_INIT(EM_TSK3000, mach_131_144_cf) };
403856f620eSRobert Mustacchi static const conv_ds_msg_t ds_mach_131_144_nf = {
404856f620eSRobert Mustacchi CONV_DS_MSG_INIT(EM_TSK3000, mach_131_144_nf) };
405856f620eSRobert Mustacchi static const conv_ds_msg_t ds_mach_131_144_dmp = {
406856f620eSRobert Mustacchi CONV_DS_MSG_INIT(EM_TSK3000, mach_131_144_dmp) };
407856f620eSRobert Mustacchi
408856f620eSRobert Mustacchi static const Msg mach_160_181_cf[] = {
409856f620eSRobert Mustacchi MSG_EM_MMDSP_PLUS_CF, MSG_EM_CYPRESS_M8C_CF,
410856f620eSRobert Mustacchi MSG_EM_R32C_CF, MSG_EM_TRIMEDIA_CF,
411856f620eSRobert Mustacchi MSG_EM_QDSP6_CF, MSG_EM_8051_CF,
412856f620eSRobert Mustacchi MSG_EM_STXP7X_CF, MSG_EM_NDS32_CF,
413856f620eSRobert Mustacchi MSG_EM_ECOG1_CF, MSG_EM_MAXQ30_CF,
414856f620eSRobert Mustacchi MSG_EM_XIMO16_CF, MSG_EM_MANIK_CF,
415856f620eSRobert Mustacchi MSG_EM_CRAYNV2_CF, MSG_EM_RX_CF,
416856f620eSRobert Mustacchi MSG_EM_METAG_CF, MSG_EM_MCST_ELBRUS_CF,
417856f620eSRobert Mustacchi MSG_EM_ECOG16_CF, MSG_EM_CR16_CF,
418856f620eSRobert Mustacchi MSG_EM_ETPU_CF, MSG_EM_SLE9X_CF,
419856f620eSRobert Mustacchi MSG_EM_L10M_CF, MSG_EM_K10M_CF,
420856f620eSRobert Mustacchi };
421856f620eSRobert Mustacchi static const Msg mach_160_181_nf[] = {
422856f620eSRobert Mustacchi MSG_EM_MMDSP_PLUS_NF, MSG_EM_CYPRESS_M8C_NF,
423856f620eSRobert Mustacchi MSG_EM_R32C_NF, MSG_EM_TRIMEDIA_NF,
424856f620eSRobert Mustacchi MSG_EM_QDSP6_NF, MSG_EM_8051_NF,
425856f620eSRobert Mustacchi MSG_EM_STXP7X_NF, MSG_EM_NDS32_NF,
426856f620eSRobert Mustacchi MSG_EM_ECOG1_NF, MSG_EM_MAXQ30_NF,
427856f620eSRobert Mustacchi MSG_EM_XIMO16_NF, MSG_EM_MANIK_NF,
428856f620eSRobert Mustacchi MSG_EM_CRAYNV2_NF, MSG_EM_RX_NF,
429856f620eSRobert Mustacchi MSG_EM_METAG_NF, MSG_EM_MCST_ELBRUS_NF,
430856f620eSRobert Mustacchi MSG_EM_ECOG16_NF, MSG_EM_CR16_NF,
431856f620eSRobert Mustacchi MSG_EM_ETPU_NF, MSG_EM_SLE9X_NF,
432856f620eSRobert Mustacchi MSG_EM_L10M_NF, MSG_EM_K10M_NF,
433856f620eSRobert Mustacchi };
434856f620eSRobert Mustacchi static const Msg mach_160_181_dmp[] = {
435856f620eSRobert Mustacchi MSG_EM_MMDSP_PLUS_CF, MSG_EM_CYPRESS_M8C_CF,
436856f620eSRobert Mustacchi MSG_EM_R32C_CF, MSG_EM_TRIMEDIA_CF,
437856f620eSRobert Mustacchi MSG_EM_QDSP6_CF, MSG_EM_8051_CF,
438856f620eSRobert Mustacchi MSG_EM_STXP7X_CF, MSG_EM_NDS32_CF,
439856f620eSRobert Mustacchi MSG_EM_ECOG1_CF, MSG_EM_MAXQ30_CF,
440856f620eSRobert Mustacchi MSG_EM_XIMO16_CF, MSG_EM_MANIK_CF,
441856f620eSRobert Mustacchi MSG_EM_CRAYNV2_CF, MSG_EM_RX_CF,
442856f620eSRobert Mustacchi MSG_EM_METAG_CF, MSG_EM_MCST_ELBRUS_CF,
443856f620eSRobert Mustacchi MSG_EM_ECOG16_CF, MSG_EM_CR16_CF,
444856f620eSRobert Mustacchi MSG_EM_ETPU_CF, MSG_EM_SLE9X_CF,
445856f620eSRobert Mustacchi MSG_EM_L10M_CF, MSG_EM_K10M_CF,
446856f620eSRobert Mustacchi };
447856f620eSRobert Mustacchi static const conv_ds_msg_t ds_mach_160_181_cf = {
448856f620eSRobert Mustacchi CONV_DS_MSG_INIT(EM_MMDSP_PLUS, mach_160_181_cf) };
449856f620eSRobert Mustacchi static const conv_ds_msg_t ds_mach_160_181_nf = {
450856f620eSRobert Mustacchi CONV_DS_MSG_INIT(EM_MMDSP_PLUS, mach_160_181_nf) };
451856f620eSRobert Mustacchi static const conv_ds_msg_t ds_mach_160_181_dmp = {
452856f620eSRobert Mustacchi CONV_DS_MSG_INIT(EM_MMDSP_PLUS, mach_160_181_dmp) };
453856f620eSRobert Mustacchi
454856f620eSRobert Mustacchi static const Msg mach_183_cf[] = {
455856f620eSRobert Mustacchi MSG_EM_AARCH64_CF
456856f620eSRobert Mustacchi };
457856f620eSRobert Mustacchi static const Msg mach_183_nf[] = {
458856f620eSRobert Mustacchi MSG_EM_AARCH64_NF
459856f620eSRobert Mustacchi };
460856f620eSRobert Mustacchi static const Msg mach_183_dmp[] = {
461856f620eSRobert Mustacchi MSG_EM_AARCH64_CF
462856f620eSRobert Mustacchi };
463856f620eSRobert Mustacchi static const conv_ds_msg_t ds_mach_183_cf = {
464856f620eSRobert Mustacchi CONV_DS_MSG_INIT(EM_AARCH64, mach_183_cf) };
465856f620eSRobert Mustacchi static const conv_ds_msg_t ds_mach_183_nf = {
466856f620eSRobert Mustacchi CONV_DS_MSG_INIT(EM_AARCH64, mach_183_nf) };
467856f620eSRobert Mustacchi static const conv_ds_msg_t ds_mach_183_dmp = {
468856f620eSRobert Mustacchi CONV_DS_MSG_INIT(EM_AARCH64, mach_183_dmp) };
469856f620eSRobert Mustacchi
470856f620eSRobert Mustacchi static const Msg mach_185_224_cf[] = {
471856f620eSRobert Mustacchi MSG_EM_AVR32_CF, MSG_EM_STM8_CF,
472856f620eSRobert Mustacchi MSG_EM_TILE64_CF, MSG_EM_TILEPRO_CF,
473856f620eSRobert Mustacchi MSG_EM_MICROBLAZE_CF, MSG_EM_CUDA_CF,
474856f620eSRobert Mustacchi MSG_EM_TILEGX_CF, MSG_EM_CLOUDSHIELD_CF,
475856f620eSRobert Mustacchi MSG_EM_COREA_1ST_CF, MSG_EM_COREA_2ND_CF,
476856f620eSRobert Mustacchi MSG_EM_ARC_COMPACT2_CF, MSG_EM_OPEN8_CF,
477856f620eSRobert Mustacchi MSG_EM_RL78_CF, MSG_EM_VIDEOCORE5_CF,
478856f620eSRobert Mustacchi MSG_EM_78KOR_CF, MSG_EM_56800EX_CF,
479856f620eSRobert Mustacchi MSG_EM_BA1_CF, MSG_EM_BA2_CF,
480856f620eSRobert Mustacchi MSG_EM_XCORE_CF, MSG_EM_MCHP_PIC_CF,
481856f620eSRobert Mustacchi MSG_EM_INTEL205_CF, MSG_EM_INTEL206_CF,
482856f620eSRobert Mustacchi MSG_EM_INTEL207_CF, MSG_EM_INTEL208_CF,
483856f620eSRobert Mustacchi MSG_EM_INTEL209_CF, MSG_EM_KM32_CF,
484856f620eSRobert Mustacchi MSG_EM_KMX32_CF, MSG_EM_KMX16_CF,
485856f620eSRobert Mustacchi MSG_EM_KMX8_CF, MSG_EM_KVARC_CF,
486856f620eSRobert Mustacchi MSG_EM_CDP_CF, MSG_EM_COGE_CF,
487856f620eSRobert Mustacchi MSG_EM_COOL_CF, MSG_EM_NORC_CF,
488856f620eSRobert Mustacchi MSG_EM_CSR_KALIMBA_CF, MSG_EM_Z80_CF,
489856f620eSRobert Mustacchi MSG_EM_VISIUM_CF, MSG_EM_FT32_CF,
490856f620eSRobert Mustacchi MSG_EM_MOXIE_CF, MSG_EM_AMDGPU_CF
491856f620eSRobert Mustacchi };
492856f620eSRobert Mustacchi static const Msg mach_185_224_nf[] = {
493856f620eSRobert Mustacchi MSG_EM_AVR32_NF, MSG_EM_STM8_NF,
494856f620eSRobert Mustacchi MSG_EM_TILE64_NF, MSG_EM_TILEPRO_NF,
495856f620eSRobert Mustacchi MSG_EM_MICROBLAZE_NF, MSG_EM_CUDA_NF,
496856f620eSRobert Mustacchi MSG_EM_TILEGX_NF, MSG_EM_CLOUDSHIELD_NF,
497856f620eSRobert Mustacchi MSG_EM_COREA_1ST_NF, MSG_EM_COREA_2ND_NF,
498856f620eSRobert Mustacchi MSG_EM_ARC_COMPACT2_NF, MSG_EM_OPEN8_NF,
499856f620eSRobert Mustacchi MSG_EM_RL78_NF, MSG_EM_VIDEOCORE5_NF,
500856f620eSRobert Mustacchi MSG_EM_78KOR_NF, MSG_EM_56800EX_NF,
501856f620eSRobert Mustacchi MSG_EM_BA1_NF, MSG_EM_BA2_NF,
502856f620eSRobert Mustacchi MSG_EM_XCORE_NF, MSG_EM_MCHP_PIC_NF,
503856f620eSRobert Mustacchi MSG_EM_INTEL205_NF, MSG_EM_INTEL206_NF,
504856f620eSRobert Mustacchi MSG_EM_INTEL207_NF, MSG_EM_INTEL208_NF,
505856f620eSRobert Mustacchi MSG_EM_INTEL209_NF, MSG_EM_KM32_NF,
506856f620eSRobert Mustacchi MSG_EM_KMX32_NF, MSG_EM_KMX16_NF,
507856f620eSRobert Mustacchi MSG_EM_KMX8_NF, MSG_EM_KVARC_NF,
508856f620eSRobert Mustacchi MSG_EM_CDP_NF, MSG_EM_COGE_NF,
509856f620eSRobert Mustacchi MSG_EM_COOL_NF, MSG_EM_NORC_NF,
510856f620eSRobert Mustacchi MSG_EM_CSR_KALIMBA_NF, MSG_EM_Z80_NF,
511856f620eSRobert Mustacchi MSG_EM_VISIUM_NF, MSG_EM_FT32_NF,
512856f620eSRobert Mustacchi MSG_EM_MOXIE_NF, MSG_EM_AMDGPU_NF
513856f620eSRobert Mustacchi };
514856f620eSRobert Mustacchi static const Msg mach_185_224_dmp[] = {
515856f620eSRobert Mustacchi MSG_EM_AVR32_CF, MSG_EM_STM8_CF,
516856f620eSRobert Mustacchi MSG_EM_TILE64_CF, MSG_EM_TILEPRO_CF,
517856f620eSRobert Mustacchi MSG_EM_MICROBLAZE_CF, MSG_EM_CUDA_CF,
518856f620eSRobert Mustacchi MSG_EM_TILEGX_CF, MSG_EM_CLOUDSHIELD_CF,
519856f620eSRobert Mustacchi MSG_EM_COREA_1ST_CF, MSG_EM_COREA_2ND_CF,
520856f620eSRobert Mustacchi MSG_EM_ARC_COMPACT2_CF, MSG_EM_OPEN8_CF,
521856f620eSRobert Mustacchi MSG_EM_RL78_CF, MSG_EM_VIDEOCORE5_CF,
522856f620eSRobert Mustacchi MSG_EM_78KOR_CF, MSG_EM_56800EX_CF,
523856f620eSRobert Mustacchi MSG_EM_BA1_CF, MSG_EM_BA2_CF,
524856f620eSRobert Mustacchi MSG_EM_XCORE_CF, MSG_EM_MCHP_PIC_CF,
525856f620eSRobert Mustacchi MSG_EM_INTEL205_CF, MSG_EM_INTEL206_CF,
526856f620eSRobert Mustacchi MSG_EM_INTEL207_CF, MSG_EM_INTEL208_CF,
527856f620eSRobert Mustacchi MSG_EM_INTEL209_CF, MSG_EM_KM32_CF,
528856f620eSRobert Mustacchi MSG_EM_KMX32_CF, MSG_EM_KMX16_CF,
529856f620eSRobert Mustacchi MSG_EM_KMX8_CF, MSG_EM_KVARC_CF,
530856f620eSRobert Mustacchi MSG_EM_CDP_CF, MSG_EM_COGE_CF,
531856f620eSRobert Mustacchi MSG_EM_COOL_CF, MSG_EM_NORC_CF,
532856f620eSRobert Mustacchi MSG_EM_CSR_KALIMBA_CF, MSG_EM_Z80_CF,
533856f620eSRobert Mustacchi MSG_EM_VISIUM_CF, MSG_EM_FT32_CF,
534856f620eSRobert Mustacchi MSG_EM_MOXIE_CF, MSG_EM_AMDGPU_CF
535856f620eSRobert Mustacchi };
536856f620eSRobert Mustacchi
537856f620eSRobert Mustacchi static const conv_ds_msg_t ds_mach_185_224_cf = {
538856f620eSRobert Mustacchi CONV_DS_MSG_INIT(EM_AVR32, mach_185_224_cf) };
539856f620eSRobert Mustacchi static const conv_ds_msg_t ds_mach_185_224_nf = {
540856f620eSRobert Mustacchi CONV_DS_MSG_INIT(EM_AVR32, mach_185_224_nf) };
541856f620eSRobert Mustacchi static const conv_ds_msg_t ds_mach_185_224_dmp = {
542856f620eSRobert Mustacchi CONV_DS_MSG_INIT(EM_AVR32, mach_185_224_dmp) };
543856f620eSRobert Mustacchi
544856f620eSRobert Mustacchi
545856f620eSRobert Mustacchi static const Msg mach_243_cf[] = {
546856f620eSRobert Mustacchi MSG_EM_RISCV_CF
547856f620eSRobert Mustacchi };
548856f620eSRobert Mustacchi static const Msg mach_243_nf[] = {
549856f620eSRobert Mustacchi MSG_EM_RISCV_NF
550856f620eSRobert Mustacchi };
551856f620eSRobert Mustacchi static const Msg mach_243_dmp[] = {
552856f620eSRobert Mustacchi MSG_EM_RISCV_CF
5534f680cc6SAli Bahrami };
5544f680cc6SAli Bahrami
555856f620eSRobert Mustacchi static const conv_ds_msg_t ds_mach_243_cf = {
556856f620eSRobert Mustacchi CONV_DS_MSG_INIT(EM_RISCV, mach_243_cf) };
557856f620eSRobert Mustacchi static const conv_ds_msg_t ds_mach_243_nf = {
558856f620eSRobert Mustacchi CONV_DS_MSG_INIT(EM_RISCV, mach_243_nf) };
559856f620eSRobert Mustacchi static const conv_ds_msg_t ds_mach_243_dmp = {
560856f620eSRobert Mustacchi CONV_DS_MSG_INIT(EM_RISCV, mach_243_dmp) };
5614f680cc6SAli Bahrami
562856f620eSRobert Mustacchi #if (EM_NUM != (EM_RISCV + 1))
563856f620eSRobert Mustacchi #error "EM_NUM has grown"
564856f620eSRobert Mustacchi #endif
5654f680cc6SAli Bahrami /* Build NULL terminated return arrays for each string style */
56684f79254SToomas Soome static const conv_ds_t *ds_cf[] = {
567856f620eSRobert Mustacchi CONV_DS_ADDR(ds_mach_0_11_cf),
568856f620eSRobert Mustacchi CONV_DS_ADDR(ds_mach_15_22_cf),
569856f620eSRobert Mustacchi CONV_DS_ADDR(ds_mach_36_63_cf),
570856f620eSRobert Mustacchi CONV_DS_ADDR(ds_mach_66_120_cf),
571856f620eSRobert Mustacchi CONV_DS_ADDR(ds_mach_131_144_cf),
572856f620eSRobert Mustacchi CONV_DS_ADDR(ds_mach_160_181_cf),
573856f620eSRobert Mustacchi CONV_DS_ADDR(ds_mach_183_cf),
574856f620eSRobert Mustacchi CONV_DS_ADDR(ds_mach_185_224_cf),
575856f620eSRobert Mustacchi CONV_DS_ADDR(ds_mach_243_cf),
5764f680cc6SAli Bahrami NULL
5774f680cc6SAli Bahrami };
57884f79254SToomas Soome static const conv_ds_t *ds_nf[] = {
579856f620eSRobert Mustacchi CONV_DS_ADDR(ds_mach_0_11_nf),
580856f620eSRobert Mustacchi CONV_DS_ADDR(ds_mach_15_22_nf),
581856f620eSRobert Mustacchi CONV_DS_ADDR(ds_mach_36_63_nf),
582856f620eSRobert Mustacchi CONV_DS_ADDR(ds_mach_66_120_nf),
583856f620eSRobert Mustacchi CONV_DS_ADDR(ds_mach_131_144_nf),
584856f620eSRobert Mustacchi CONV_DS_ADDR(ds_mach_160_181_nf),
585856f620eSRobert Mustacchi CONV_DS_ADDR(ds_mach_183_nf),
586856f620eSRobert Mustacchi CONV_DS_ADDR(ds_mach_185_224_nf),
587856f620eSRobert Mustacchi CONV_DS_ADDR(ds_mach_243_nf),
5884f680cc6SAli Bahrami NULL
5894f680cc6SAli Bahrami };
59084f79254SToomas Soome static const conv_ds_t *ds_dmp[] = {
591856f620eSRobert Mustacchi CONV_DS_ADDR(ds_mach_0_11_dmp),
592856f620eSRobert Mustacchi CONV_DS_ADDR(ds_mach_15_22_dmp),
5934f680cc6SAli Bahrami CONV_DS_ADDR(ds_mach_36_63_dmp),
594856f620eSRobert Mustacchi CONV_DS_ADDR(ds_mach_66_120_dmp),
595856f620eSRobert Mustacchi CONV_DS_ADDR(ds_mach_131_144_dmp),
596856f620eSRobert Mustacchi CONV_DS_ADDR(ds_mach_160_181_dmp),
597856f620eSRobert Mustacchi CONV_DS_ADDR(ds_mach_183_dmp),
598856f620eSRobert Mustacchi CONV_DS_ADDR(ds_mach_185_224_dmp),
599856f620eSRobert Mustacchi CONV_DS_ADDR(ds_mach_243_dmp),
600856f620eSRobert Mustacchi NULL
6014f680cc6SAli Bahrami };
6024f680cc6SAli Bahrami
6037c478bd9Sstevel@tonic-gate
6044f680cc6SAli Bahrami /* Select the strings to use */
605d29b2c44Sab switch (CONV_TYPE_FMT_ALT(fmt_flags)) {
606d29b2c44Sab case CONV_FMT_ALT_DUMP:
607d29b2c44Sab case CONV_FMT_ALT_FILE:
6084f680cc6SAli Bahrami return (ds_dmp);
6094f680cc6SAli Bahrami case CONV_FMT_ALT_NF:
6104f680cc6SAli Bahrami return (ds_nf);
611d29b2c44Sab }
612d29b2c44Sab
6134f680cc6SAli Bahrami return (ds_cf);
6147c478bd9Sstevel@tonic-gate }
6157c478bd9Sstevel@tonic-gate
6167c478bd9Sstevel@tonic-gate const char *
conv_ehdr_mach(Half machine,Conv_fmt_flags_t fmt_flags,Conv_inv_buf_t * inv_buf)617d29b2c44Sab conv_ehdr_mach(Half machine, Conv_fmt_flags_t fmt_flags,
618d29b2c44Sab Conv_inv_buf_t *inv_buf)
6197c478bd9Sstevel@tonic-gate {
6204f680cc6SAli Bahrami return (conv_map_ds(ELFOSABI_NONE, EM_NONE, machine,
6214f680cc6SAli Bahrami ehdr_mach_strings(fmt_flags), fmt_flags, inv_buf));
6224f680cc6SAli Bahrami }
6234f680cc6SAli Bahrami
6244f680cc6SAli Bahrami conv_iter_ret_t
conv_iter_ehdr_mach(Conv_fmt_flags_t fmt_flags,conv_iter_cb_t func,void * uvalue)6254f680cc6SAli Bahrami conv_iter_ehdr_mach(Conv_fmt_flags_t fmt_flags, conv_iter_cb_t func,
6264f680cc6SAli Bahrami void *uvalue)
6274f680cc6SAli Bahrami {
6284f680cc6SAli Bahrami static const Val_desc extra_dmp_nf[] = {
6294f680cc6SAli Bahrami { EM_M32, MSG_EM_M32_DMP},
6304f680cc6SAli Bahrami { EM_386, MSG_EM_386_DMP },
6314f680cc6SAli Bahrami { EM_68K, MSG_EM_68K_DMP },
6324f680cc6SAli Bahrami { EM_88K, MSG_EM_88K_DMP },
6334f680cc6SAli Bahrami { EM_486, MSG_EM_486_DMP },
6344f680cc6SAli Bahrami { EM_860, MSG_EM_860_DMP },
6354f680cc6SAli Bahrami { EM_MIPS, MSG_EM_MIPS_DMP },
6364f680cc6SAli Bahrami { EM_MIPS_RS3_LE, MSG_EM_MIPS_RS3_LE_DMP },
6374f680cc6SAli Bahrami { EM_PPC, MSG_EM_PPC_DMP },
6384f680cc6SAli Bahrami { EM_PPC64, MSG_EM_PPC64_DMP },
6394f680cc6SAli Bahrami
6404f680cc6SAli Bahrami { 0 }
6414f680cc6SAli Bahrami };
6424f680cc6SAli Bahrami
6434f680cc6SAli Bahrami if (conv_iter_ds(ELFOSABI_NONE, EM_NONE,
6444f680cc6SAli Bahrami ehdr_mach_strings(fmt_flags), func, uvalue) == CONV_ITER_DONE)
6454f680cc6SAli Bahrami return (CONV_ITER_DONE);
6464f680cc6SAli Bahrami
6474f680cc6SAli Bahrami /*
6484f680cc6SAli Bahrami * For the NF style, we also supply a few of the traditional
6494f680cc6SAli Bahrami * dump versions for iteration, but not for display.
6504f680cc6SAli Bahrami */
6514f680cc6SAli Bahrami if (CONV_TYPE_FMT_ALT(fmt_flags) == CONV_FMT_ALT_NF)
6524f680cc6SAli Bahrami return (conv_iter_vd(extra_dmp_nf, func, uvalue));
653d29b2c44Sab
6544f680cc6SAli Bahrami return (CONV_ITER_CONT);
6557c478bd9Sstevel@tonic-gate }
6567c478bd9Sstevel@tonic-gate
657c13de8f6Sab
6584f680cc6SAli Bahrami
6594f680cc6SAli Bahrami static const conv_ds_t **
ehdr_eident_strings(Conv_fmt_flags_t fmt_flags)6604f680cc6SAli Bahrami ehdr_eident_strings(Conv_fmt_flags_t fmt_flags)
6617c478bd9Sstevel@tonic-gate {
6624f680cc6SAli Bahrami static const Msg eident_cf[] = {
6634f680cc6SAli Bahrami MSG_EI_MAG0_CF, MSG_EI_MAG1_CF,
6644f680cc6SAli Bahrami MSG_EI_MAG2_CF, MSG_EI_MAG3_CF,
6654f680cc6SAli Bahrami MSG_EI_CLASS_CF, MSG_EI_DATA_CF,
6664f680cc6SAli Bahrami MSG_EI_VERSION_CF, MSG_EI_OSABI_CF,
6674f680cc6SAli Bahrami MSG_EI_ABIVERSION_CF
6684f680cc6SAli Bahrami };
6694f680cc6SAli Bahrami static const Msg eident_nf[] = {
6704f680cc6SAli Bahrami MSG_EI_MAG0_NF, MSG_EI_MAG1_NF,
6714f680cc6SAli Bahrami MSG_EI_MAG2_NF, MSG_EI_MAG3_NF,
6724f680cc6SAli Bahrami MSG_EI_CLASS_NF, MSG_EI_DATA_NF,
6734f680cc6SAli Bahrami MSG_EI_VERSION_NF, MSG_EI_OSABI_NF,
6744f680cc6SAli Bahrami MSG_EI_ABIVERSION_NF
6754f680cc6SAli Bahrami };
6764f680cc6SAli Bahrami #if EI_PAD != (EI_ABIVERSION + 1)
6774f680cc6SAli Bahrami error "EI_PAD has grown. Update etypes[]"
6784f680cc6SAli Bahrami #endif
6794f680cc6SAli Bahrami static const conv_ds_msg_t ds_eident_cf = {
6804f680cc6SAli Bahrami CONV_DS_MSG_INIT(EI_MAG0, eident_cf) };
6814f680cc6SAli Bahrami static const conv_ds_msg_t ds_eident_nf = {
6824f680cc6SAli Bahrami CONV_DS_MSG_INIT(EI_MAG0, eident_nf) };
6834f680cc6SAli Bahrami
6844f680cc6SAli Bahrami /* Build NULL terminated return arrays for each string style */
68584f79254SToomas Soome static const conv_ds_t *ds_cf[] = {
6864f680cc6SAli Bahrami CONV_DS_ADDR(ds_eident_cf), NULL };
6874f680cc6SAli Bahrami static const conv_ds_t *ds_nf[] = {
6884f680cc6SAli Bahrami CONV_DS_ADDR(ds_eident_nf), NULL };
6894f680cc6SAli Bahrami
6904f680cc6SAli Bahrami /* Select the strings to use */
6914f680cc6SAli Bahrami return ((CONV_TYPE_FMT_ALT(fmt_flags) == CONV_FMT_ALT_CF) ?
6924f680cc6SAli Bahrami ds_cf : ds_nf);
6934f680cc6SAli Bahrami }
694c13de8f6Sab
6954f680cc6SAli Bahrami conv_iter_ret_t
conv_iter_ehdr_eident(Conv_fmt_flags_t fmt_flags,conv_iter_cb_t func,void * uvalue)6964f680cc6SAli Bahrami conv_iter_ehdr_eident(Conv_fmt_flags_t fmt_flags, conv_iter_cb_t func,
6974f680cc6SAli Bahrami void *uvalue)
6984f680cc6SAli Bahrami {
6994f680cc6SAli Bahrami return (conv_iter_ds(ELFOSABI_NONE, EM_NONE,
7004f680cc6SAli Bahrami ehdr_eident_strings(fmt_flags), func, uvalue));
7014f680cc6SAli Bahrami }
7024f680cc6SAli Bahrami
7034f680cc6SAli Bahrami static const conv_ds_t **
ehdr_type_strings(Conv_fmt_flags_t fmt_flags)7044f680cc6SAli Bahrami ehdr_type_strings(Conv_fmt_flags_t fmt_flags)
7054f680cc6SAli Bahrami {
7064f680cc6SAli Bahrami #define SOL ELFOSABI_SOLARIS, EM_NONE
7074f680cc6SAli Bahrami
7084f680cc6SAli Bahrami static const Msg type_cf[] = {
7094f680cc6SAli Bahrami MSG_ET_NONE_CF, MSG_ET_REL_CF, MSG_ET_EXEC_CF,
7104f680cc6SAli Bahrami MSG_ET_DYN_CF, MSG_ET_CORE_CF
7114f680cc6SAli Bahrami };
7124f680cc6SAli Bahrami static const Msg type_nf[] = {
7134f680cc6SAli Bahrami MSG_ET_NONE_NF, MSG_ET_REL_NF, MSG_ET_EXEC_NF,
7144f680cc6SAli Bahrami MSG_ET_DYN_NF, MSG_ET_CORE_NF
7154f680cc6SAli Bahrami };
7164f680cc6SAli Bahrami static const Msg type_dmp[] = {
7174f680cc6SAli Bahrami MSG_ET_NONE_DMP, MSG_ET_REL_DMP, MSG_ET_EXEC_DMP,
7184f680cc6SAli Bahrami MSG_ET_DYN_DMP, MSG_ET_CORE_DMP
7194f680cc6SAli Bahrami };
7204f680cc6SAli Bahrami #if ET_NUM != (ET_CORE + 1)
7214f680cc6SAli Bahrami error "ET_NUM has grown. Update types[]"
7224f680cc6SAli Bahrami #endif
7234f680cc6SAli Bahrami static const conv_ds_msg_t ds_type_cf = {
7244f680cc6SAli Bahrami CONV_DS_MSG_INIT(ET_NONE, type_cf) };
7254f680cc6SAli Bahrami static const conv_ds_msg_t ds_type_nf = {
7264f680cc6SAli Bahrami CONV_DS_MSG_INIT(ET_NONE, type_nf) };
7274f680cc6SAli Bahrami static const conv_ds_msg_t ds_type_dmp = {
7284f680cc6SAli Bahrami CONV_DS_MSG_INIT(ET_NONE, type_dmp) };
7294f680cc6SAli Bahrami
7304f680cc6SAli Bahrami static const Val_desc2 type_osabi_cf[] = {
7314f680cc6SAli Bahrami { ET_SUNWPSEUDO, SOL, MSG_ET_SUNWPSEUDO_CF },
7324f680cc6SAli Bahrami { 0 }
7334f680cc6SAli Bahrami };
7344f680cc6SAli Bahrami static const Val_desc2 type_osabi_nf[] = {
7354f680cc6SAli Bahrami { ET_SUNWPSEUDO, SOL, MSG_ET_SUNWPSEUDO_NF },
7364f680cc6SAli Bahrami { 0 }
7374f680cc6SAli Bahrami };
7384f680cc6SAli Bahrami static const Val_desc2 type_osabi_dmp[] = {
7394f680cc6SAli Bahrami { ET_SUNWPSEUDO, SOL, MSG_ET_SUNWPSEUDO_DMP },
7404f680cc6SAli Bahrami { 0 }
7414f680cc6SAli Bahrami };
7424f680cc6SAli Bahrami #if ET_LOSUNW != ET_SUNWPSEUDO
7434f680cc6SAli Bahrami error "ET_LOSUNW has grown. Update type_osabi[]"
7444f680cc6SAli Bahrami #endif
7454f680cc6SAli Bahrami static const conv_ds_vd2_t ds_type_osabi_cf = {
7464f680cc6SAli Bahrami CONV_DS_VD2, ET_LOOS, ET_HIOS, type_osabi_cf };
7474f680cc6SAli Bahrami static const conv_ds_vd2_t ds_type_osabi_nf = {
7484f680cc6SAli Bahrami CONV_DS_VD2, ET_LOOS, ET_HIOS, type_osabi_nf };
7494f680cc6SAli Bahrami static const conv_ds_vd2_t ds_type_osabi_dmp = {
7504f680cc6SAli Bahrami CONV_DS_VD2, ET_LOOS, ET_HIOS, type_osabi_dmp };
7514f680cc6SAli Bahrami
7524f680cc6SAli Bahrami
7534f680cc6SAli Bahrami /* Build NULL terminated return arrays for each string style */
75484f79254SToomas Soome static const conv_ds_t *ds_cf[] = {
7554f680cc6SAli Bahrami CONV_DS_ADDR(ds_type_cf), CONV_DS_ADDR(ds_type_osabi_cf),
7564f680cc6SAli Bahrami NULL };
7574f680cc6SAli Bahrami static const conv_ds_t *ds_nf[] = {
7584f680cc6SAli Bahrami CONV_DS_ADDR(ds_type_nf), CONV_DS_ADDR(ds_type_osabi_nf),
7594f680cc6SAli Bahrami NULL };
7604f680cc6SAli Bahrami static const conv_ds_t *ds_dmp[] = {
7614f680cc6SAli Bahrami CONV_DS_ADDR(ds_type_dmp), CONV_DS_ADDR(ds_type_osabi_dmp),
7624f680cc6SAli Bahrami NULL };
7634f680cc6SAli Bahrami
7644f680cc6SAli Bahrami /* Select the strings to use */
765d29b2c44Sab switch (CONV_TYPE_FMT_ALT(fmt_flags)) {
766d29b2c44Sab case CONV_FMT_ALT_DUMP:
7674f680cc6SAli Bahrami return (ds_dmp);
7684f680cc6SAli Bahrami case CONV_FMT_ALT_NF:
7694f680cc6SAli Bahrami return (ds_nf);
770d29b2c44Sab }
771d29b2c44Sab
7724f680cc6SAli Bahrami return (ds_cf);
7737c478bd9Sstevel@tonic-gate
7744f680cc6SAli Bahrami #undef SOL
7757c478bd9Sstevel@tonic-gate }
7767c478bd9Sstevel@tonic-gate
7777c478bd9Sstevel@tonic-gate const char *
conv_ehdr_type(uchar_t osabi,Half etype,Conv_fmt_flags_t fmt_flags,Conv_inv_buf_t * inv_buf)7784f680cc6SAli Bahrami conv_ehdr_type(uchar_t osabi, Half etype, Conv_fmt_flags_t fmt_flags,
779d29b2c44Sab Conv_inv_buf_t *inv_buf)
7807c478bd9Sstevel@tonic-gate {
7814f680cc6SAli Bahrami return (conv_map_ds(osabi, EM_NONE, etype,
7824f680cc6SAli Bahrami ehdr_type_strings(fmt_flags), fmt_flags, inv_buf));
7834f680cc6SAli Bahrami }
7844f680cc6SAli Bahrami
7854f680cc6SAli Bahrami conv_iter_ret_t
conv_iter_ehdr_type(conv_iter_osabi_t osabi,Conv_fmt_flags_t fmt_flags,conv_iter_cb_t func,void * uvalue)7864f680cc6SAli Bahrami conv_iter_ehdr_type(conv_iter_osabi_t osabi, Conv_fmt_flags_t fmt_flags,
7874f680cc6SAli Bahrami conv_iter_cb_t func, void *uvalue)
7884f680cc6SAli Bahrami {
7894f680cc6SAli Bahrami return (conv_iter_ds(osabi, EM_NONE,
7904f680cc6SAli Bahrami ehdr_type_strings(fmt_flags), func, uvalue));
7914f680cc6SAli Bahrami }
7924f680cc6SAli Bahrami
7934f680cc6SAli Bahrami static const conv_ds_t **
ehdr_vers_strings(Conv_fmt_flags_t fmt_flags)7944f680cc6SAli Bahrami ehdr_vers_strings(Conv_fmt_flags_t fmt_flags)
7954f680cc6SAli Bahrami {
7964f680cc6SAli Bahrami static const Msg versions_cf[] = {
7974f680cc6SAli Bahrami MSG_EV_NONE_CF, MSG_EV_CURRENT_CF
7985aefb655Srie };
7994f680cc6SAli Bahrami static const Msg versions_nf[] = {
8004f680cc6SAli Bahrami MSG_EV_NONE_NF, MSG_EV_CURRENT_NF
801c13de8f6Sab };
8024f680cc6SAli Bahrami static const Msg versions_dmp[] = {
8034f680cc6SAli Bahrami MSG_EV_NONE_DMP, MSG_EV_CURRENT_DMP
8044f680cc6SAli Bahrami };
8054f680cc6SAli Bahrami #if EV_NUM != 2
8064f680cc6SAli Bahrami error "EV_NUM has grown. Update versions[]"
8074f680cc6SAli Bahrami #endif
8084f680cc6SAli Bahrami static const conv_ds_msg_t ds_versions_cf = {
8094f680cc6SAli Bahrami CONV_DS_MSG_INIT(EV_NONE, versions_cf) };
8104f680cc6SAli Bahrami static const conv_ds_msg_t ds_versions_nf = {
8114f680cc6SAli Bahrami CONV_DS_MSG_INIT(EV_NONE, versions_nf) };
8124f680cc6SAli Bahrami static const conv_ds_msg_t ds_versions_dmp = {
8134f680cc6SAli Bahrami CONV_DS_MSG_INIT(EV_NONE, versions_dmp) };
8144f680cc6SAli Bahrami
8154f680cc6SAli Bahrami /* Build NULL terminated return arrays for each string style */
81684f79254SToomas Soome static const conv_ds_t *ds_cf[] = {
8174f680cc6SAli Bahrami CONV_DS_ADDR(ds_versions_cf), NULL };
8184f680cc6SAli Bahrami static const conv_ds_t *ds_nf[] = {
8194f680cc6SAli Bahrami CONV_DS_ADDR(ds_versions_nf), NULL };
8204f680cc6SAli Bahrami static const conv_ds_t *ds_dmp[] = {
8214f680cc6SAli Bahrami CONV_DS_ADDR(ds_versions_dmp), NULL };
8224f680cc6SAli Bahrami
8234f680cc6SAli Bahrami /* Select the strings to use */
824d29b2c44Sab switch (CONV_TYPE_FMT_ALT(fmt_flags)) {
825d29b2c44Sab case CONV_FMT_ALT_DUMP:
8264f680cc6SAli Bahrami return (ds_dmp);
8274f680cc6SAli Bahrami case CONV_FMT_ALT_NF:
8284f680cc6SAli Bahrami return (ds_nf);
829d29b2c44Sab }
830d29b2c44Sab
8314f680cc6SAli Bahrami return (ds_cf);
8327c478bd9Sstevel@tonic-gate }
8337c478bd9Sstevel@tonic-gate
8344f680cc6SAli Bahrami const char *
conv_ehdr_vers(Word version,Conv_fmt_flags_t fmt_flags,Conv_inv_buf_t * inv_buf)8354f680cc6SAli Bahrami conv_ehdr_vers(Word version, Conv_fmt_flags_t fmt_flags,
8364f680cc6SAli Bahrami Conv_inv_buf_t *inv_buf)
8374f680cc6SAli Bahrami {
8384f680cc6SAli Bahrami return (conv_map_ds(ELFOSABI_NONE, EM_NONE, version,
8394f680cc6SAli Bahrami ehdr_vers_strings(fmt_flags), fmt_flags, inv_buf));
8404f680cc6SAli Bahrami }
8414f680cc6SAli Bahrami
8424f680cc6SAli Bahrami conv_iter_ret_t
conv_iter_ehdr_vers(Conv_fmt_flags_t fmt_flags,conv_iter_cb_t func,void * uvalue)8434f680cc6SAli Bahrami conv_iter_ehdr_vers(Conv_fmt_flags_t fmt_flags, conv_iter_cb_t func,
8444f680cc6SAli Bahrami void *uvalue)
8454f680cc6SAli Bahrami {
8464f680cc6SAli Bahrami return (conv_iter_ds(ELFOSABI_NONE, EM_NONE,
8474f680cc6SAli Bahrami ehdr_vers_strings(fmt_flags), func, uvalue));
8484f680cc6SAli Bahrami }
8494f680cc6SAli Bahrami
8504f680cc6SAli Bahrami static void
conv_ehdr_sparc_flags_strings(Conv_fmt_flags_t fmt_flags,const conv_ds_msg_t ** mm_msg,const Val_desc ** flag_desc)8514f680cc6SAli Bahrami conv_ehdr_sparc_flags_strings(Conv_fmt_flags_t fmt_flags,
8524f680cc6SAli Bahrami const conv_ds_msg_t **mm_msg, const Val_desc **flag_desc)
8534f680cc6SAli Bahrami {
854ba4e3c84Sab #define EFLAGSZ CONV_EXPN_FIELD_DEF_PREFIX_SIZE + \
8554f680cc6SAli Bahrami MSG_EF_SPARCV9_TSO_CF_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
8564f680cc6SAli Bahrami MSG_EF_SPARC_SUN_US1_CF_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
8574f680cc6SAli Bahrami MSG_EF_SPARC_HAL_R1_CF_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
8584f680cc6SAli Bahrami MSG_EF_SPARC_SUN_US3_CF_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
8594f680cc6SAli Bahrami CONV_INV_BUFSIZE + CONV_EXPN_FIELD_DEF_SUFFIX_SIZE
860de777a60Sab
8614f680cc6SAli Bahrami /*
8624f680cc6SAli Bahrami * Ensure that Conv_ehdr_flags_buf_t is large enough:
8634f680cc6SAli Bahrami *
8644f680cc6SAli Bahrami * EFLAGSZ is the real minimum size of the buffer required by
8654f680cc6SAli Bahrami * conv_ehdr_flags(). However, Conv_ehdr_flags_buf_t uses
8664f680cc6SAli Bahrami * CONV_EHDR_FLAG_BUFSIZE to set the buffer size. We do things
8674f680cc6SAli Bahrami * this way because the definition of EFLAGSZ uses information
8684f680cc6SAli Bahrami * that is not available in the environment of other programs
8694f680cc6SAli Bahrami * that include the conv.h header file.
8704f680cc6SAli Bahrami */
8716a074c93Sab #if (CONV_EHDR_FLAGS_BUFSIZE != EFLAGSZ) && !defined(__lint)
8726a074c93Sab #define REPORT_BUFSIZE EFLAGSZ
8736a074c93Sab #include "report_bufsize.h"
8746a074c93Sab #error "CONV_EHDR_FLAGS_BUFSIZE does not match EFLAGSZ"
875de777a60Sab #endif
8767c478bd9Sstevel@tonic-gate
8774f680cc6SAli Bahrami static const Msg mm_flags_cf[] = {
8784f680cc6SAli Bahrami MSG_EF_SPARCV9_TSO_CF, MSG_EF_SPARCV9_PSO_CF,
8794f680cc6SAli Bahrami MSG_EF_SPARCV9_RMO_CF
8804f680cc6SAli Bahrami };
8814f680cc6SAli Bahrami static const Msg mm_flags_nf[] = {
8824f680cc6SAli Bahrami MSG_EF_SPARCV9_TSO_NF, MSG_EF_SPARCV9_PSO_NF,
8834f680cc6SAli Bahrami MSG_EF_SPARCV9_RMO_NF
8844f680cc6SAli Bahrami };
8854f680cc6SAli Bahrami static const conv_ds_msg_t ds_mm_flags_cf = {
8864f680cc6SAli Bahrami CONV_DS_MSG_INIT(EF_SPARCV9_TSO, mm_flags_cf) };
8874f680cc6SAli Bahrami static const conv_ds_msg_t ds_mm_flags_nf = {
8884f680cc6SAli Bahrami CONV_DS_MSG_INIT(EF_SPARCV9_TSO, mm_flags_nf) };
8894f680cc6SAli Bahrami
8904f680cc6SAli Bahrami
8914f680cc6SAli Bahrami static const Val_desc vda_cf[] = {
8924f680cc6SAli Bahrami { EF_SPARC_32PLUS, MSG_EF_SPARC_32PLUS_CF },
8934f680cc6SAli Bahrami { EF_SPARC_SUN_US1, MSG_EF_SPARC_SUN_US1_CF },
8944f680cc6SAli Bahrami { EF_SPARC_HAL_R1, MSG_EF_SPARC_HAL_R1_CF },
8954f680cc6SAli Bahrami { EF_SPARC_SUN_US3, MSG_EF_SPARC_SUN_US3_CF },
8964f680cc6SAli Bahrami { 0 }
8974f680cc6SAli Bahrami };
8984f680cc6SAli Bahrami static const Val_desc vda_nf[] = {
8994f680cc6SAli Bahrami { EF_SPARC_32PLUS, MSG_EF_SPARC_32PLUS_NF },
9004f680cc6SAli Bahrami { EF_SPARC_SUN_US1, MSG_EF_SPARC_SUN_US1_NF },
9014f680cc6SAli Bahrami { EF_SPARC_HAL_R1, MSG_EF_SPARC_HAL_R1_NF },
9024f680cc6SAli Bahrami { EF_SPARC_SUN_US3, MSG_EF_SPARC_SUN_US3_NF },
9034f680cc6SAli Bahrami { 0 }
9044f680cc6SAli Bahrami };
9054f680cc6SAli Bahrami
9064f680cc6SAli Bahrami switch (CONV_TYPE_FMT_ALT(fmt_flags)) {
9074f680cc6SAli Bahrami default:
9084f680cc6SAli Bahrami *mm_msg = &ds_mm_flags_cf;
9094f680cc6SAli Bahrami *flag_desc = vda_cf;
9104f680cc6SAli Bahrami break;
9114f680cc6SAli Bahrami case CONV_FMT_ALT_NF:
9124f680cc6SAli Bahrami *mm_msg = &ds_mm_flags_nf;
9134f680cc6SAli Bahrami *flag_desc = vda_nf;
9144f680cc6SAli Bahrami break;
9154f680cc6SAli Bahrami }
9164f680cc6SAli Bahrami }
9174f680cc6SAli Bahrami
9187c478bd9Sstevel@tonic-gate /*
9195aefb655Srie * Make a string representation of the e_flags field.
9207c478bd9Sstevel@tonic-gate */
9217c478bd9Sstevel@tonic-gate const char *
conv_ehdr_flags(Half mach,Word flags,Conv_fmt_flags_t fmt_flags,Conv_ehdr_flags_buf_t * flags_buf)922d29b2c44Sab conv_ehdr_flags(Half mach, Word flags, Conv_fmt_flags_t fmt_flags,
923d29b2c44Sab Conv_ehdr_flags_buf_t *flags_buf)
9247c478bd9Sstevel@tonic-gate {
925ba4e3c84Sab static const char *leading_str_arr[2];
926de777a60Sab static CONV_EXPN_FIELD_ARG conv_arg = {
9274f680cc6SAli Bahrami NULL, sizeof (flags_buf->buf), leading_str_arr };
9287c478bd9Sstevel@tonic-gate
9294f680cc6SAli Bahrami const char **lstr;
9304f680cc6SAli Bahrami const conv_ds_msg_t *mm_msg;
9314f680cc6SAli Bahrami const Val_desc *vdp;
9324f680cc6SAli Bahrami Word mm;
933de777a60Sab
9347c478bd9Sstevel@tonic-gate /*
9355aefb655Srie * Non-SPARC architectures presently provide no known flags.
9367c478bd9Sstevel@tonic-gate */
9374f680cc6SAli Bahrami if ((mach != EM_SPARCV9) && (((mach != EM_SPARC) &&
9384f680cc6SAli Bahrami (mach != EM_SPARC32PLUS)) || (flags == 0)))
9394f680cc6SAli Bahrami return (conv_invalid_val(&flags_buf->inv_buf, flags,
9404f680cc6SAli Bahrami CONV_FMT_DECIMAL));
9414f680cc6SAli Bahrami
9424f680cc6SAli Bahrami conv_arg.buf = flags_buf->buf;
9434f680cc6SAli Bahrami conv_ehdr_sparc_flags_strings(fmt_flags, &mm_msg, &vdp);
9444f680cc6SAli Bahrami conv_arg.oflags = conv_arg.rflags = flags;
9454f680cc6SAli Bahrami
9464f680cc6SAli Bahrami mm = flags & EF_SPARCV9_MM;
9474f680cc6SAli Bahrami lstr = leading_str_arr;
9484f680cc6SAli Bahrami if ((mach == EM_SPARCV9) && (mm <= mm_msg->ds_topval)) {
9494f680cc6SAli Bahrami *lstr++ = MSG_ORIG(mm_msg->ds_msg[mm]);
9504f680cc6SAli Bahrami conv_arg.rflags &= ~EF_SPARCV9_MM;
9514f680cc6SAli Bahrami }
9524f680cc6SAli Bahrami *lstr = NULL;
9534f680cc6SAli Bahrami
9544f680cc6SAli Bahrami (void) conv_expn_field(&conv_arg, vdp, fmt_flags);
9554f680cc6SAli Bahrami
9564f680cc6SAli Bahrami return (conv_arg.buf);
9574f680cc6SAli Bahrami }
9584f680cc6SAli Bahrami
9594f680cc6SAli Bahrami conv_iter_ret_t
conv_iter_ehdr_flags(Half mach,Conv_fmt_flags_t fmt_flags,conv_iter_cb_t func,void * uvalue)9604f680cc6SAli Bahrami conv_iter_ehdr_flags(Half mach, Conv_fmt_flags_t fmt_flags, conv_iter_cb_t func,
9614f680cc6SAli Bahrami void *uvalue)
9624f680cc6SAli Bahrami {
9634f680cc6SAli Bahrami
9644f680cc6SAli Bahrami if ((mach == EM_SPARCV9) || (mach == EM_SPARC) ||
9654f680cc6SAli Bahrami (mach == EM_SPARC32PLUS) || (mach == CONV_MACH_ALL)) {
9664f680cc6SAli Bahrami const conv_ds_msg_t *ds_msg_mm;
9674f680cc6SAli Bahrami const Val_desc *vdp;
9684f680cc6SAli Bahrami
9694f680cc6SAli Bahrami conv_ehdr_sparc_flags_strings(fmt_flags, &ds_msg_mm, &vdp);
9704f680cc6SAli Bahrami
9714f680cc6SAli Bahrami if (mach == EM_SPARCV9) {
9724f680cc6SAli Bahrami const conv_ds_t *ds[2];
9734f680cc6SAli Bahrami
9744f680cc6SAli Bahrami ds[0] = CONV_DS_ADDR(ds_msg_mm);
9754f680cc6SAli Bahrami ds[1] = NULL;
9764f680cc6SAli Bahrami
9774f680cc6SAli Bahrami if (conv_iter_ds(ELFOSABI_NONE, mach, ds,
9784f680cc6SAli Bahrami func, uvalue) == CONV_ITER_DONE)
9794f680cc6SAli Bahrami return (CONV_ITER_DONE);
9807c478bd9Sstevel@tonic-gate }
9817c478bd9Sstevel@tonic-gate
9824f680cc6SAli Bahrami return (conv_iter_vd(vdp, func, uvalue));
9834f680cc6SAli Bahrami }
9844f680cc6SAli Bahrami
9854f680cc6SAli Bahrami return (CONV_ITER_CONT);
9864f680cc6SAli Bahrami }
9874f680cc6SAli Bahrami
9884f680cc6SAli Bahrami static const conv_ds_t **
ehdr_osabi_strings(Conv_fmt_flags_t fmt_flags)9894f680cc6SAli Bahrami ehdr_osabi_strings(Conv_fmt_flags_t fmt_flags)
9904f680cc6SAli Bahrami {
9917c478bd9Sstevel@tonic-gate
9924f680cc6SAli Bahrami static const Msg osabi_0_3_cf[] = {
9934f680cc6SAli Bahrami MSG_OSABI_NONE_CF, MSG_OSABI_HPUX_CF,
9944f680cc6SAli Bahrami MSG_OSABI_NETBSD_CF, MSG_OSABI_LINUX_CF
9954f680cc6SAli Bahrami };
9964f680cc6SAli Bahrami static const Msg osabi_0_3_nf[] = {
9974f680cc6SAli Bahrami MSG_OSABI_NONE_NF, MSG_OSABI_HPUX_NF,
9984f680cc6SAli Bahrami MSG_OSABI_NETBSD_NF, MSG_OSABI_LINUX_NF
9994f680cc6SAli Bahrami };
10004f680cc6SAli Bahrami static const Msg osabi_0_3_dmp[] = {
10014f680cc6SAli Bahrami MSG_OSABI_NONE_DMP, MSG_OSABI_HPUX_DMP,
10024f680cc6SAli Bahrami MSG_OSABI_NETBSD_DMP, MSG_OSABI_LINUX_DMP
10034f680cc6SAli Bahrami };
10044f680cc6SAli Bahrami static const conv_ds_msg_t ds_osabi_0_3_cf = {
10054f680cc6SAli Bahrami CONV_DS_MSG_INIT(ELFOSABI_NONE, osabi_0_3_cf) };
10064f680cc6SAli Bahrami static const conv_ds_msg_t ds_osabi_0_3_nf = {
10074f680cc6SAli Bahrami CONV_DS_MSG_INIT(ELFOSABI_NONE, osabi_0_3_nf) };
10084f680cc6SAli Bahrami static const conv_ds_msg_t ds_osabi_0_3_dmp = {
10094f680cc6SAli Bahrami CONV_DS_MSG_INIT(ELFOSABI_NONE, osabi_0_3_dmp) };
10104f680cc6SAli Bahrami
10114f680cc6SAli Bahrami
1012856f620eSRobert Mustacchi static const Msg osabi_6_18_cf[] = {
10134f680cc6SAli Bahrami MSG_OSABI_SOLARIS_CF, MSG_OSABI_AIX_CF,
10144f680cc6SAli Bahrami MSG_OSABI_IRIX_CF, MSG_OSABI_FREEBSD_CF,
10154f680cc6SAli Bahrami MSG_OSABI_TRU64_CF, MSG_OSABI_MODESTO_CF,
10164f680cc6SAli Bahrami MSG_OSABI_OPENBSD_CF, MSG_OSABI_OPENVMS_CF,
1017856f620eSRobert Mustacchi MSG_OSABI_NSK_CF, MSG_OSABI_AROS_CF,
1018856f620eSRobert Mustacchi MSG_OSABI_FENIXOS_CF, MSG_OSABI_CLOUDABI_CF,
1019856f620eSRobert Mustacchi MSG_OSABI_OPENVOS_CF
10204f680cc6SAli Bahrami };
1021856f620eSRobert Mustacchi static const Msg osabi_6_18_nf[] = {
10224f680cc6SAli Bahrami MSG_OSABI_SOLARIS_NF, MSG_OSABI_AIX_NF,
10234f680cc6SAli Bahrami MSG_OSABI_IRIX_NF, MSG_OSABI_FREEBSD_NF,
10244f680cc6SAli Bahrami MSG_OSABI_TRU64_NF, MSG_OSABI_MODESTO_NF,
10254f680cc6SAli Bahrami MSG_OSABI_OPENBSD_NF, MSG_OSABI_OPENVMS_NF,
1026856f620eSRobert Mustacchi MSG_OSABI_NSK_NF, MSG_OSABI_AROS_NF,
1027856f620eSRobert Mustacchi MSG_OSABI_FENIXOS_NF, MSG_OSABI_CLOUDABI_NF,
1028856f620eSRobert Mustacchi MSG_OSABI_OPENVOS_NF
10294f680cc6SAli Bahrami };
1030856f620eSRobert Mustacchi static const Msg osabi_6_18_dmp[] = {
10314f680cc6SAli Bahrami MSG_OSABI_SOLARIS_DMP, MSG_OSABI_AIX_DMP,
10324f680cc6SAli Bahrami MSG_OSABI_IRIX_DMP, MSG_OSABI_FREEBSD_DMP,
10334f680cc6SAli Bahrami MSG_OSABI_TRU64_DMP, MSG_OSABI_MODESTO_DMP,
10344f680cc6SAli Bahrami MSG_OSABI_OPENBSD_DMP, MSG_OSABI_OPENVMS_DMP,
1035856f620eSRobert Mustacchi MSG_OSABI_NSK_DMP, MSG_OSABI_AROS_DMP,
1036856f620eSRobert Mustacchi MSG_OSABI_FENIXOS_DMP, MSG_OSABI_CLOUDABI_DMP,
1037856f620eSRobert Mustacchi MSG_OSABI_OPENVOS_DMP
10384f680cc6SAli Bahrami };
1039856f620eSRobert Mustacchi static const conv_ds_msg_t ds_osabi_6_18_cf = {
1040856f620eSRobert Mustacchi CONV_DS_MSG_INIT(ELFOSABI_SOLARIS, osabi_6_18_cf) };
1041856f620eSRobert Mustacchi static const conv_ds_msg_t ds_osabi_6_18_nf = {
1042856f620eSRobert Mustacchi CONV_DS_MSG_INIT(ELFOSABI_SOLARIS, osabi_6_18_nf) };
1043856f620eSRobert Mustacchi static const conv_ds_msg_t ds_osabi_6_18_dmp = {
1044856f620eSRobert Mustacchi CONV_DS_MSG_INIT(ELFOSABI_SOLARIS, osabi_6_18_dmp) };
10454f680cc6SAli Bahrami
10464f680cc6SAli Bahrami
10474f680cc6SAli Bahrami static const Val_desc osabi_misc_cf[] = {
10484f680cc6SAli Bahrami { ELFOSABI_ARM, MSG_OSABI_ARM_CF },
10494f680cc6SAli Bahrami { ELFOSABI_STANDALONE, MSG_OSABI_STANDALONE_CF },
10504f680cc6SAli Bahrami { 0 }
10514f680cc6SAli Bahrami };
10524f680cc6SAli Bahrami static const Val_desc osabi_misc_nf[] = {
10534f680cc6SAli Bahrami { ELFOSABI_ARM, MSG_OSABI_ARM_NF },
10544f680cc6SAli Bahrami { ELFOSABI_STANDALONE, MSG_OSABI_STANDALONE_NF },
10554f680cc6SAli Bahrami { 0 }
10564f680cc6SAli Bahrami };
10574f680cc6SAli Bahrami static const Val_desc osabi_misc_dmp[] = {
10584f680cc6SAli Bahrami { ELFOSABI_ARM, MSG_OSABI_ARM_DMP },
10594f680cc6SAli Bahrami { ELFOSABI_STANDALONE, MSG_OSABI_STANDALONE_DMP },
10604f680cc6SAli Bahrami { 0 }
10614f680cc6SAli Bahrami };
10624f680cc6SAli Bahrami static const conv_ds_vd_t ds_osabi_misc_cf = {
10634f680cc6SAli Bahrami CONV_DS_VD, ELFOSABI_ARM, ELFOSABI_STANDALONE, osabi_misc_cf };
10644f680cc6SAli Bahrami static const conv_ds_vd_t ds_osabi_misc_nf = {
10654f680cc6SAli Bahrami CONV_DS_VD, ELFOSABI_ARM, ELFOSABI_STANDALONE, osabi_misc_nf };
10664f680cc6SAli Bahrami static const conv_ds_vd_t ds_osabi_misc_dmp = {
10674f680cc6SAli Bahrami CONV_DS_VD, ELFOSABI_ARM, ELFOSABI_STANDALONE, osabi_misc_dmp };
10684f680cc6SAli Bahrami
10694f680cc6SAli Bahrami /* Build NULL terminated return arrays for each string style */
107084f79254SToomas Soome static const conv_ds_t *ds_cf[] = {
1071856f620eSRobert Mustacchi CONV_DS_ADDR(ds_osabi_0_3_cf), CONV_DS_ADDR(ds_osabi_6_18_cf),
10724f680cc6SAli Bahrami CONV_DS_ADDR(ds_osabi_misc_cf), NULL };
107384f79254SToomas Soome static const conv_ds_t *ds_nf[] = {
1074856f620eSRobert Mustacchi CONV_DS_ADDR(ds_osabi_0_3_nf), CONV_DS_ADDR(ds_osabi_6_18_nf),
10754f680cc6SAli Bahrami CONV_DS_ADDR(ds_osabi_misc_nf), NULL };
107684f79254SToomas Soome static const conv_ds_t *ds_dmp[] = {
1077856f620eSRobert Mustacchi CONV_DS_ADDR(ds_osabi_0_3_dmp), CONV_DS_ADDR(ds_osabi_6_18_dmp),
10784f680cc6SAli Bahrami CONV_DS_ADDR(ds_osabi_misc_dmp), NULL };
10794f680cc6SAli Bahrami
10804f680cc6SAli Bahrami /* Select the strings to use */
10814f680cc6SAli Bahrami switch (CONV_TYPE_FMT_ALT(fmt_flags)) {
10824f680cc6SAli Bahrami case CONV_FMT_ALT_DUMP:
10834f680cc6SAli Bahrami return (ds_dmp);
10844f680cc6SAli Bahrami case CONV_FMT_ALT_NF:
10854f680cc6SAli Bahrami return (ds_nf);
10865aefb655Srie }
1087de777a60Sab
10884f680cc6SAli Bahrami return (ds_cf);
10897c478bd9Sstevel@tonic-gate }
10907c478bd9Sstevel@tonic-gate
10913244bcaaSab /*
10923244bcaaSab * Make a string representation of the e_ident[EI_OSABI] field.
10933244bcaaSab */
10943244bcaaSab const char *
conv_ehdr_osabi(uchar_t osabi,Conv_fmt_flags_t fmt_flags,Conv_inv_buf_t * inv_buf)1095d29b2c44Sab conv_ehdr_osabi(uchar_t osabi, Conv_fmt_flags_t fmt_flags,
1096d29b2c44Sab Conv_inv_buf_t *inv_buf)
10973244bcaaSab {
10984f680cc6SAli Bahrami return (conv_map_ds(ELFOSABI_NONE, EM_NONE, osabi,
10994f680cc6SAli Bahrami ehdr_osabi_strings(fmt_flags), fmt_flags, inv_buf));
11004f680cc6SAli Bahrami }
11013244bcaaSab
11024f680cc6SAli Bahrami conv_iter_ret_t
conv_iter_ehdr_osabi(Conv_fmt_flags_t fmt_flags,conv_iter_cb_t func,void * uvalue)11034f680cc6SAli Bahrami conv_iter_ehdr_osabi(Conv_fmt_flags_t fmt_flags, conv_iter_cb_t func,
11044f680cc6SAli Bahrami void *uvalue)
11054f680cc6SAli Bahrami {
11064f680cc6SAli Bahrami if (conv_iter_ds(ELFOSABI_NONE, EM_NONE, ehdr_osabi_strings(fmt_flags),
11074f680cc6SAli Bahrami func, uvalue) == CONV_ITER_DONE)
11084f680cc6SAli Bahrami return (CONV_ITER_DONE);
11093244bcaaSab
11104f680cc6SAli Bahrami /*
11114f680cc6SAli Bahrami * ELFOSABI_NONE might have been better named ELFOSABI_SYSV. For the
11124f680cc6SAli Bahrami * CF and NF sytles, we supply that name for 0 in addition to NONE.
11134f680cc6SAli Bahrami */
11144f680cc6SAli Bahrami switch (CONV_TYPE_FMT_ALT(fmt_flags)) {
11154f680cc6SAli Bahrami case CONV_FMT_ALT_CF:
11164f680cc6SAli Bahrami return ((* func)(MSG_ORIG(MSG_OSABI_SYSV_CF),
11174f680cc6SAli Bahrami ELFOSABI_NONE, uvalue));
11184f680cc6SAli Bahrami case CONV_FMT_ALT_NF:
11194f680cc6SAli Bahrami return ((* func)(MSG_ORIG(MSG_OSABI_SYSV_NF),
11204f680cc6SAli Bahrami ELFOSABI_NONE, uvalue));
11213244bcaaSab }
11223244bcaaSab
1123*ab5344c6SToomas Soome return (CONV_ITER_CONT);
11244f680cc6SAli Bahrami }
11254f680cc6SAli Bahrami
11264f680cc6SAli Bahrami static const conv_ds_t **
ehdr_abivers_strings(conv_iter_osabi_t osabi,Conv_fmt_flags_t fmt_flags)11274f680cc6SAli Bahrami ehdr_abivers_strings(conv_iter_osabi_t osabi, Conv_fmt_flags_t fmt_flags)
11284f680cc6SAli Bahrami {
11294f680cc6SAli Bahrami static const Msg abiversions_cf[] = {
11304f680cc6SAli Bahrami MSG_EAV_SUNW_NONE_CF, MSG_EAV_SUNW_CURRENT_CF
11314f680cc6SAli Bahrami };
11324f680cc6SAli Bahrami static const Msg abiversions_nf[] = {
11334f680cc6SAli Bahrami MSG_EAV_SUNW_NONE_NF, MSG_EAV_SUNW_CURRENT_NF
11344f680cc6SAli Bahrami };
11354f680cc6SAli Bahrami #if EAV_SUNW_NUM != 2
11364f680cc6SAli Bahrami error "EAV_SUNW_NUM has grown. Update abiversions[]"
11374f680cc6SAli Bahrami #endif
11384f680cc6SAli Bahrami static const conv_ds_msg_t ds_abiversions_cf = {
11394f680cc6SAli Bahrami CONV_DS_MSG_INIT(EV_NONE, abiversions_cf) };
11404f680cc6SAli Bahrami static const conv_ds_msg_t ds_abiversions_nf = {
11414f680cc6SAli Bahrami CONV_DS_MSG_INIT(EV_NONE, abiversions_nf) };
11424f680cc6SAli Bahrami
11434f680cc6SAli Bahrami /* Build NULL terminated return arrays for each string style */
114484f79254SToomas Soome static const conv_ds_t *ds_cf[] = {
11454f680cc6SAli Bahrami CONV_DS_ADDR(ds_abiversions_cf), NULL };
11464f680cc6SAli Bahrami static const conv_ds_t *ds_nf[] = {
11474f680cc6SAli Bahrami CONV_DS_ADDR(ds_abiversions_nf), NULL };
11484f680cc6SAli Bahrami
11494f680cc6SAli Bahrami /* For non-Solaris OSABI, we don't have symbolic names */
11504f680cc6SAli Bahrami static const conv_ds_t *ds_none[] = { NULL };
11514f680cc6SAli Bahrami
11524f680cc6SAli Bahrami
11534f680cc6SAli Bahrami /*
11544f680cc6SAli Bahrami * Select the strings to use. This is a rare case where
11554f680cc6SAli Bahrami * we don't treat ELFOSABI_NONE and ELFOSABI_SOLARIS
11564f680cc6SAli Bahrami * as the same thing. We should never create a Solaris
11574f680cc6SAli Bahrami * object tagged as ELFOSABI_NONE for which the abiversion
11584f680cc6SAli Bahrami * is non-zero.
11594f680cc6SAli Bahrami */
11604f680cc6SAli Bahrami if ((osabi == ELFOSABI_SOLARIS) || (osabi == CONV_OSABI_ALL))
11614f680cc6SAli Bahrami return ((CONV_TYPE_FMT_ALT(fmt_flags) == CONV_FMT_ALT_NF) ?
11624f680cc6SAli Bahrami ds_nf : ds_cf);
11634f680cc6SAli Bahrami
11644f680cc6SAli Bahrami return (ds_none);
11654f680cc6SAli Bahrami }
11664f680cc6SAli Bahrami
11674f680cc6SAli Bahrami const char *
conv_ehdr_abivers(uchar_t osabi,Word version,Conv_fmt_flags_t fmt_flags,Conv_inv_buf_t * inv_buf)11684f680cc6SAli Bahrami conv_ehdr_abivers(uchar_t osabi, Word version, Conv_fmt_flags_t fmt_flags,
11694f680cc6SAli Bahrami Conv_inv_buf_t *inv_buf)
11704f680cc6SAli Bahrami {
11714f680cc6SAli Bahrami return (conv_map_ds(osabi, EM_NONE, version,
11724f680cc6SAli Bahrami ehdr_abivers_strings(osabi, fmt_flags), fmt_flags, inv_buf));
11734f680cc6SAli Bahrami }
11744f680cc6SAli Bahrami
11754f680cc6SAli Bahrami conv_iter_ret_t
conv_iter_ehdr_abivers(conv_iter_osabi_t osabi,Conv_fmt_flags_t fmt_flags,conv_iter_cb_t func,void * uvalue)11764f680cc6SAli Bahrami conv_iter_ehdr_abivers(conv_iter_osabi_t osabi, Conv_fmt_flags_t fmt_flags,
11774f680cc6SAli Bahrami conv_iter_cb_t func, void *uvalue)
11784f680cc6SAli Bahrami {
11794f680cc6SAli Bahrami return (conv_iter_ds(osabi, EM_NONE,
11804f680cc6SAli Bahrami ehdr_abivers_strings(osabi, fmt_flags), func, uvalue));
11813244bcaaSab }
11823244bcaaSab
11837c478bd9Sstevel@tonic-gate /*
11847c478bd9Sstevel@tonic-gate * A generic means of returning additional information for a rejected file in
11854f680cc6SAli Bahrami * terms of a string. ELFOSABI_SOLARIS is assummed.
11867c478bd9Sstevel@tonic-gate */
11877c478bd9Sstevel@tonic-gate const char *
conv_reject_desc(Rej_desc * rej,Conv_reject_desc_buf_t * reject_desc_buf,Half mach)1188ba2be530Sab conv_reject_desc(Rej_desc * rej, Conv_reject_desc_buf_t *reject_desc_buf,
1189ba2be530Sab Half mach)
11907c478bd9Sstevel@tonic-gate {
1191de777a60Sab ushort_t type = rej->rej_type;
1192de777a60Sab uint_t info = rej->rej_info;
11937c478bd9Sstevel@tonic-gate
1194bebb829dSRod Evans switch (type) {
1195bebb829dSRod Evans case SGS_REJ_MACH:
1196de777a60Sab return (conv_ehdr_mach((Half)info, 0,
1197de777a60Sab &reject_desc_buf->inv_buf));
1198bebb829dSRod Evans case SGS_REJ_CLASS:
1199de777a60Sab return (conv_ehdr_class((uchar_t)info, 0,
1200de777a60Sab &reject_desc_buf->inv_buf));
1201bebb829dSRod Evans case SGS_REJ_DATA:
1202de777a60Sab return (conv_ehdr_data((uchar_t)info, 0,
1203de777a60Sab &reject_desc_buf->inv_buf));
1204bebb829dSRod Evans case SGS_REJ_TYPE:
12054f680cc6SAli Bahrami return (conv_ehdr_type(ELFOSABI_SOLARIS, (Half)info, 0,
1206de777a60Sab &reject_desc_buf->inv_buf));
1207bebb829dSRod Evans case SGS_REJ_BADFLAG:
1208bebb829dSRod Evans case SGS_REJ_MISFLAG:
1209bebb829dSRod Evans case SGS_REJ_HAL:
1210bebb829dSRod Evans case SGS_REJ_US3:
1211ba2be530Sab return (conv_ehdr_flags(mach, (Word)info, 0,
1212de777a60Sab &reject_desc_buf->flags_buf));
1213bebb829dSRod Evans case SGS_REJ_UNKFILE:
1214dc0f59e5SAli Bahrami case SGS_REJ_ARCHIVE:
1215b6a0e2cdSRichard Lowe case SGS_REJ_KMOD:
1216dc0f59e5SAli Bahrami return (NULL);
1217bebb829dSRod Evans case SGS_REJ_STR:
1218bebb829dSRod Evans case SGS_REJ_HWCAP_1:
1219bebb829dSRod Evans case SGS_REJ_SFCAP_1:
122008278a5eSRod Evans case SGS_REJ_HWCAP_2:
122156726c7eSRobert Mustacchi case SGS_REJ_HWCAP_3:
122208278a5eSRod Evans case SGS_REJ_MACHCAP:
122308278a5eSRod Evans case SGS_REJ_PLATCAP:
12247c478bd9Sstevel@tonic-gate if (rej->rej_str)
12257c478bd9Sstevel@tonic-gate return ((const char *)rej->rej_str);
12267c478bd9Sstevel@tonic-gate else
12277c478bd9Sstevel@tonic-gate return (MSG_ORIG(MSG_STR_EMPTY));
1228bebb829dSRod Evans default:
1229de777a60Sab return (conv_invalid_val(&reject_desc_buf->inv_buf, info,
1230c13de8f6Sab CONV_FMT_DECIMAL));
1231bebb829dSRod Evans }
12327c478bd9Sstevel@tonic-gate }
1233