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.
24*c4397e61SRobert Mustacchi * Copyright (c) 2018, Joyent, Inc.
257c478bd9Sstevel@tonic-gate */
267c478bd9Sstevel@tonic-gate
277c478bd9Sstevel@tonic-gate /*
287c478bd9Sstevel@tonic-gate * String conversion routines for ELF header attributes.
297c478bd9Sstevel@tonic-gate */
307c478bd9Sstevel@tonic-gate #include <stdio.h>
317c478bd9Sstevel@tonic-gate #include <string.h>
327c478bd9Sstevel@tonic-gate #include "_conv.h"
337c478bd9Sstevel@tonic-gate #include "elf_msg.h"
347c478bd9Sstevel@tonic-gate #include <sys/elf_SPARC.h>
357c478bd9Sstevel@tonic-gate
36c13de8f6Sab196087
37c13de8f6Sab196087
384f680cc6SAli Bahrami static const conv_ds_t **
ehdr_class_strings(Conv_fmt_flags_t fmt_flags)394f680cc6SAli Bahrami ehdr_class_strings(Conv_fmt_flags_t fmt_flags)
404f680cc6SAli Bahrami {
414f680cc6SAli Bahrami static const Msg class_cf[] = {
424f680cc6SAli Bahrami MSG_ELFCLASSNONE_CF, MSG_ELFCLASS32_CF, MSG_ELFCLASS64_CF
434f680cc6SAli Bahrami };
444f680cc6SAli Bahrami static const Msg class_nf[] = {
454f680cc6SAli Bahrami MSG_ELFCLASSNONE_NF, MSG_ELFCLASS32_NF, MSG_ELFCLASS64_NF
464f680cc6SAli Bahrami };
474f680cc6SAli Bahrami static const Msg class_dump[] = {
484f680cc6SAli Bahrami MSG_ELFCLASSNONE_DMP, MSG_ELFCLASS32_DMP, MSG_ELFCLASS64_DMP
494f680cc6SAli Bahrami };
50c13de8f6Sab196087
514f680cc6SAli Bahrami static const conv_ds_msg_t ds_classes_cf = {
524f680cc6SAli Bahrami CONV_DS_MSG_INIT(ELFCLASSNONE, class_cf) };
534f680cc6SAli Bahrami static const conv_ds_msg_t ds_classes_nf = {
544f680cc6SAli Bahrami CONV_DS_MSG_INIT(ELFCLASSNONE, class_nf) };
554f680cc6SAli Bahrami static const conv_ds_msg_t ds_classes_dump = {
564f680cc6SAli Bahrami CONV_DS_MSG_INIT(ELFCLASSNONE, class_dump) };
57c13de8f6Sab196087
584f680cc6SAli Bahrami static const conv_ds_t *ds_cf[] = { CONV_DS_ADDR(ds_classes_cf), NULL };
594f680cc6SAli Bahrami static const conv_ds_t *ds_nf[] = { CONV_DS_ADDR(ds_classes_nf), NULL };
604f680cc6SAli Bahrami static const conv_ds_t *ds_dump[] = {
614f680cc6SAli Bahrami CONV_DS_ADDR(ds_classes_dump), NULL };
624f680cc6SAli Bahrami
634f680cc6SAli Bahrami switch (CONV_TYPE_FMT_ALT(fmt_flags)) {
644f680cc6SAli Bahrami case CONV_FMT_ALT_DUMP:
654f680cc6SAli Bahrami case CONV_FMT_ALT_FILE:
664f680cc6SAli Bahrami return (ds_dump);
674f680cc6SAli Bahrami case CONV_FMT_ALT_NF:
684f680cc6SAli Bahrami return (ds_nf);
694f680cc6SAli Bahrami }
704f680cc6SAli Bahrami
714f680cc6SAli Bahrami return (ds_cf);
724f680cc6SAli Bahrami }
73c13de8f6Sab196087
745aefb655Srie const char *
conv_ehdr_class(uchar_t class,Conv_fmt_flags_t fmt_flags,Conv_inv_buf_t * inv_buf)75d29b2c44Sab196087 conv_ehdr_class(uchar_t class, Conv_fmt_flags_t fmt_flags,
76d29b2c44Sab196087 Conv_inv_buf_t *inv_buf)
775aefb655Srie {
784f680cc6SAli Bahrami return (conv_map_ds(ELFOSABI_NONE, EM_NONE, class,
794f680cc6SAli Bahrami ehdr_class_strings(fmt_flags), fmt_flags, inv_buf));
80d29b2c44Sab196087 }
81d29b2c44Sab196087
824f680cc6SAli Bahrami conv_iter_ret_t
conv_iter_ehdr_class(Conv_fmt_flags_t fmt_flags,conv_iter_cb_t func,void * uvalue)834f680cc6SAli Bahrami conv_iter_ehdr_class(Conv_fmt_flags_t fmt_flags, conv_iter_cb_t func,
844f680cc6SAli Bahrami void *uvalue)
854f680cc6SAli Bahrami {
864f680cc6SAli Bahrami return (conv_iter_ds(ELFOSABI_NONE, EM_NONE,
874f680cc6SAli Bahrami ehdr_class_strings(fmt_flags), func, uvalue));
884f680cc6SAli Bahrami }
894f680cc6SAli Bahrami
904f680cc6SAli Bahrami static const conv_ds_t **
ehdr_data_strings(Conv_fmt_flags_t fmt_flags)914f680cc6SAli Bahrami ehdr_data_strings(Conv_fmt_flags_t fmt_flags)
924f680cc6SAli Bahrami {
934f680cc6SAli Bahrami static const Msg data_cf[] = {
944f680cc6SAli Bahrami MSG_ELFDATANONE_CF, MSG_ELFDATA2LSB_CF, MSG_ELFDATA2MSB_CF
954f680cc6SAli Bahrami };
964f680cc6SAli Bahrami static const Msg data_nf[] = {
974f680cc6SAli Bahrami MSG_ELFDATANONE_NF, MSG_ELFDATA2LSB_NF, MSG_ELFDATA2MSB_NF
984f680cc6SAli Bahrami };
994f680cc6SAli Bahrami static const Msg data_dump[] = {
1004f680cc6SAli Bahrami MSG_ELFDATANONE_DMP, MSG_ELFDATA2LSB_DMP, MSG_ELFDATA2MSB_DMP
1014f680cc6SAli Bahrami };
1024f680cc6SAli Bahrami static const Msg data_file[] = {
1034f680cc6SAli Bahrami MSG_ELFDATANONE_DMP, MSG_ELFDATA2LSB_FIL, MSG_ELFDATA2MSB_FIL
1044f680cc6SAli Bahrami };
1054f680cc6SAli Bahrami
1064f680cc6SAli Bahrami
1074f680cc6SAli Bahrami static const conv_ds_msg_t ds_data_cf = {
1084f680cc6SAli Bahrami CONV_DS_MSG_INIT(ELFCLASSNONE, data_cf) };
1094f680cc6SAli Bahrami static const conv_ds_msg_t ds_data_nf = {
1104f680cc6SAli Bahrami CONV_DS_MSG_INIT(ELFCLASSNONE, data_nf) };
1114f680cc6SAli Bahrami static const conv_ds_msg_t ds_data_dump = {
1124f680cc6SAli Bahrami CONV_DS_MSG_INIT(ELFCLASSNONE, data_dump) };
1134f680cc6SAli Bahrami static const conv_ds_msg_t ds_data_file = {
1144f680cc6SAli Bahrami CONV_DS_MSG_INIT(ELFCLASSNONE, data_file) };
1154f680cc6SAli Bahrami
1164f680cc6SAli Bahrami static const conv_ds_t *ds_cf[] = { CONV_DS_ADDR(ds_data_cf), NULL };
1174f680cc6SAli Bahrami static const conv_ds_t *ds_nf[] = { CONV_DS_ADDR(ds_data_nf), NULL };
1184f680cc6SAli Bahrami static const conv_ds_t *ds_dump[] = { CONV_DS_ADDR(ds_data_dump),
1194f680cc6SAli Bahrami NULL };
1204f680cc6SAli Bahrami static const conv_ds_t *ds_file[] = { CONV_DS_ADDR(ds_data_file),
1214f680cc6SAli Bahrami NULL };
1224f680cc6SAli Bahrami
1234f680cc6SAli Bahrami switch (CONV_TYPE_FMT_ALT(fmt_flags)) {
1244f680cc6SAli Bahrami case CONV_FMT_ALT_DUMP:
1254f680cc6SAli Bahrami return (ds_dump);
1264f680cc6SAli Bahrami case CONV_FMT_ALT_FILE:
1274f680cc6SAli Bahrami return (ds_file);
1284f680cc6SAli Bahrami case CONV_FMT_ALT_NF:
1294f680cc6SAli Bahrami return (ds_nf);
1304f680cc6SAli Bahrami }
1314f680cc6SAli Bahrami
1324f680cc6SAli Bahrami return (ds_cf);
1337c478bd9Sstevel@tonic-gate }
1347c478bd9Sstevel@tonic-gate
1355aefb655Srie const char *
conv_ehdr_data(uchar_t data,Conv_fmt_flags_t fmt_flags,Conv_inv_buf_t * inv_buf)136d29b2c44Sab196087 conv_ehdr_data(uchar_t data, Conv_fmt_flags_t fmt_flags,
137d29b2c44Sab196087 Conv_inv_buf_t *inv_buf)
1385aefb655Srie {
1394f680cc6SAli Bahrami return (conv_map_ds(ELFOSABI_NONE, EM_NONE, data,
1404f680cc6SAli Bahrami ehdr_data_strings(fmt_flags), fmt_flags, inv_buf));
141d29b2c44Sab196087 }
142d29b2c44Sab196087
1434f680cc6SAli Bahrami conv_iter_ret_t
conv_iter_ehdr_data(Conv_fmt_flags_t fmt_flags,conv_iter_cb_t func,void * uvalue)1444f680cc6SAli Bahrami conv_iter_ehdr_data(Conv_fmt_flags_t fmt_flags, conv_iter_cb_t func,
1454f680cc6SAli Bahrami void *uvalue)
1464f680cc6SAli Bahrami {
1474f680cc6SAli Bahrami return (conv_iter_ds(ELFOSABI_NONE, EM_NONE,
1484f680cc6SAli Bahrami ehdr_data_strings(fmt_flags), func, uvalue));
1497c478bd9Sstevel@tonic-gate }
1507c478bd9Sstevel@tonic-gate
1514f680cc6SAli Bahrami static const conv_ds_t **
ehdr_mach_strings(Conv_fmt_flags_t fmt_flags)1524f680cc6SAli Bahrami ehdr_mach_strings(Conv_fmt_flags_t fmt_flags)
1534f680cc6SAli Bahrami {
1544f680cc6SAli Bahrami
1554f680cc6SAli Bahrami static const Msg mach_0_11_cf[] = {
1564f680cc6SAli Bahrami MSG_EM_NONE_CF, MSG_EM_M32_CF,
1574f680cc6SAli Bahrami MSG_EM_SPARC_CF, MSG_EM_386_CF,
1584f680cc6SAli Bahrami MSG_EM_68K_CF, MSG_EM_88K_CF,
1594f680cc6SAli Bahrami MSG_EM_486_CF, MSG_EM_860_CF,
1604f680cc6SAli Bahrami MSG_EM_MIPS_CF, MSG_EM_S370_CF,
1614f680cc6SAli Bahrami MSG_EM_MIPS_RS3_LE_CF, MSG_EM_RS6000_CF
1627c478bd9Sstevel@tonic-gate };
1634f680cc6SAli Bahrami static const Msg mach_0_11_nf[] = {
1644f680cc6SAli Bahrami MSG_EM_NONE_NF, MSG_EM_M32_NF,
1654f680cc6SAli Bahrami MSG_EM_SPARC_NF, MSG_EM_386_NF,
1664f680cc6SAli Bahrami MSG_EM_68K_NF, MSG_EM_88K_NF,
1674f680cc6SAli Bahrami MSG_EM_486_NF, MSG_EM_860_NF,
1684f680cc6SAli Bahrami MSG_EM_MIPS_NF, MSG_EM_S370_NF,
1694f680cc6SAli Bahrami MSG_EM_MIPS_RS3_LE_NF, MSG_EM_RS6000_NF
1704f680cc6SAli Bahrami };
1714f680cc6SAli Bahrami static const Msg mach_0_11_dmp[] = {
1724f680cc6SAli Bahrami MSG_EM_NONE_DMP, MSG_EM_M32_DMP,
1734f680cc6SAli Bahrami MSG_EM_SPARC_DMP, MSG_EM_386_DMP,
1744f680cc6SAli Bahrami MSG_EM_68K_DMP, MSG_EM_88K_DMP,
1754f680cc6SAli Bahrami MSG_EM_486_DMP, MSG_EM_860_DMP,
1764f680cc6SAli Bahrami MSG_EM_MIPS_DMP, MSG_EM_S370_CF,
1774f680cc6SAli Bahrami MSG_EM_MIPS_RS3_LE_DMP, MSG_EM_RS6000_DMP
1784f680cc6SAli Bahrami };
1794f680cc6SAli Bahrami static const conv_ds_msg_t ds_mach_0_11_cf = {
1804f680cc6SAli Bahrami CONV_DS_MSG_INIT(EM_NONE, mach_0_11_cf) };
1814f680cc6SAli Bahrami static const conv_ds_msg_t ds_mach_0_11_nf = {
1824f680cc6SAli Bahrami CONV_DS_MSG_INIT(EM_NONE, mach_0_11_nf) };
1834f680cc6SAli Bahrami static const conv_ds_msg_t ds_mach_0_11_dmp = {
1844f680cc6SAli Bahrami CONV_DS_MSG_INIT(EM_NONE, mach_0_11_dmp) };
1854f680cc6SAli Bahrami
1864f680cc6SAli Bahrami
1874f680cc6SAli Bahrami static const Msg mach_15_22_cf[] = {
1884f680cc6SAli Bahrami MSG_EM_PA_RISC_CF, MSG_EM_NCUBE_CF,
1894f680cc6SAli Bahrami MSG_EM_VPP500_CF, MSG_EM_SPARC32PLUS_CF,
1904f680cc6SAli Bahrami MSG_EM_960_CF, MSG_EM_PPC_CF,
1914f680cc6SAli Bahrami MSG_EM_PPC64_CF, MSG_EM_S390_CF
1924f680cc6SAli Bahrami };
1934f680cc6SAli Bahrami static const Msg mach_15_22_nf[] = {
1944f680cc6SAli Bahrami MSG_EM_PA_RISC_NF, MSG_EM_NCUBE_NF,
1954f680cc6SAli Bahrami MSG_EM_VPP500_NF, MSG_EM_SPARC32PLUS_NF,
1964f680cc6SAli Bahrami MSG_EM_960_NF, MSG_EM_PPC_NF,
1974f680cc6SAli Bahrami MSG_EM_PPC64_NF, MSG_EM_S390_NF
1984f680cc6SAli Bahrami };
1994f680cc6SAli Bahrami static const Msg mach_15_22_dmp[] = {
2004f680cc6SAli Bahrami MSG_EM_PA_RISC_DMP, MSG_EM_NCUBE_DMP,
2014f680cc6SAli Bahrami MSG_EM_VPP500_DMP, MSG_EM_SPARC32PLUS_DMP,
2024f680cc6SAli Bahrami MSG_EM_960_CF, MSG_EM_PPC_DMP,
2034f680cc6SAli Bahrami MSG_EM_PPC64_DMP, MSG_EM_S390_CF
2044f680cc6SAli Bahrami };
2054f680cc6SAli Bahrami static const conv_ds_msg_t ds_mach_15_22_cf = {
2064f680cc6SAli Bahrami CONV_DS_MSG_INIT(EM_PA_RISC, mach_15_22_cf) };
2074f680cc6SAli Bahrami static const conv_ds_msg_t ds_mach_15_22_nf = {
2084f680cc6SAli Bahrami CONV_DS_MSG_INIT(EM_PA_RISC, mach_15_22_nf) };
2094f680cc6SAli Bahrami static const conv_ds_msg_t ds_mach_15_22_dmp = {
2104f680cc6SAli Bahrami CONV_DS_MSG_INIT(EM_PA_RISC, mach_15_22_dmp) };
2114f680cc6SAli Bahrami
2124f680cc6SAli Bahrami
2134f680cc6SAli Bahrami static const Msg mach_36_63_cf[] = {
2144f680cc6SAli Bahrami MSG_EM_V800_CF, MSG_EM_FR20_CF,
2154f680cc6SAli Bahrami MSG_EM_RH32_CF, MSG_EM_RCE_CF,
2164f680cc6SAli Bahrami MSG_EM_ARM_CF, MSG_EM_ALPHA_CF,
2174f680cc6SAli Bahrami MSG_EM_SH_CF, MSG_EM_SPARCV9_CF,
2184f680cc6SAli Bahrami MSG_EM_TRICORE_CF, MSG_EM_ARC_CF,
2194f680cc6SAli Bahrami MSG_EM_H8_300_CF, MSG_EM_H8_300H_CF,
2204f680cc6SAli Bahrami MSG_EM_H8S_CF, MSG_EM_H8_500_CF,
2214f680cc6SAli Bahrami MSG_EM_IA_64_CF, MSG_EM_MIPS_X_CF,
2224f680cc6SAli Bahrami MSG_EM_COLDFIRE_CF, MSG_EM_68HC12_CF,
2234f680cc6SAli Bahrami MSG_EM_MMA_CF, MSG_EM_PCP_CF,
2244f680cc6SAli Bahrami MSG_EM_NCPU_CF, MSG_EM_NDR1_CF,
2254f680cc6SAli Bahrami MSG_EM_STARCORE_CF, MSG_EM_ME16_CF,
2264f680cc6SAli Bahrami MSG_EM_ST100_CF, MSG_EM_TINYJ_CF,
2274f680cc6SAli Bahrami MSG_EM_AMD64_CF, MSG_EM_PDSP_CF
2284f680cc6SAli Bahrami };
2294f680cc6SAli Bahrami static const Msg mach_36_63_nf[] = {
2304f680cc6SAli Bahrami MSG_EM_V800_NF, MSG_EM_FR20_NF,
2314f680cc6SAli Bahrami MSG_EM_RH32_NF, MSG_EM_RCE_NF,
2324f680cc6SAli Bahrami MSG_EM_ARM_NF, MSG_EM_ALPHA_NF,
2334f680cc6SAli Bahrami MSG_EM_SH_NF, MSG_EM_SPARCV9_NF,
2344f680cc6SAli Bahrami MSG_EM_TRICORE_NF, MSG_EM_ARC_NF,
2354f680cc6SAli Bahrami MSG_EM_H8_300_NF, MSG_EM_H8_300H_NF,
2364f680cc6SAli Bahrami MSG_EM_H8S_NF, MSG_EM_H8_500_NF,
2374f680cc6SAli Bahrami MSG_EM_IA_64_NF, MSG_EM_MIPS_X_NF,
2384f680cc6SAli Bahrami MSG_EM_COLDFIRE_NF, MSG_EM_68HC12_NF,
2394f680cc6SAli Bahrami MSG_EM_MMA_NF, MSG_EM_PCP_NF,
2404f680cc6SAli Bahrami MSG_EM_NCPU_NF, MSG_EM_NDR1_NF,
2414f680cc6SAli Bahrami MSG_EM_STARCORE_NF, MSG_EM_ME16_NF,
2424f680cc6SAli Bahrami MSG_EM_ST100_NF, MSG_EM_TINYJ_NF,
2434f680cc6SAli Bahrami MSG_EM_AMD64_NF, MSG_EM_PDSP_NF
2444f680cc6SAli Bahrami };
2454f680cc6SAli Bahrami static const Msg mach_36_63_dmp[] = {
2464f680cc6SAli Bahrami MSG_EM_V800_CF, MSG_EM_FR20_CF,
2474f680cc6SAli Bahrami MSG_EM_RH32_CF, MSG_EM_RCE_CF,
2484f680cc6SAli Bahrami MSG_EM_ARM_DMP, MSG_EM_ALPHA_DMP,
2494f680cc6SAli Bahrami MSG_EM_SH_CF, MSG_EM_SPARCV9_DMP,
2504f680cc6SAli Bahrami MSG_EM_TRICORE_CF, MSG_EM_ARC_CF,
2514f680cc6SAli Bahrami MSG_EM_H8_300_CF, MSG_EM_H8_300H_CF,
2524f680cc6SAli Bahrami MSG_EM_H8S_CF, MSG_EM_H8_500_CF,
2534f680cc6SAli Bahrami MSG_EM_IA_64_DMP, MSG_EM_MIPS_X_CF,
2544f680cc6SAli Bahrami MSG_EM_COLDFIRE_CF, MSG_EM_68HC12_CF,
2554f680cc6SAli Bahrami MSG_EM_MMA_CF, MSG_EM_PCP_CF,
2564f680cc6SAli Bahrami MSG_EM_NCPU_CF, MSG_EM_NDR1_CF,
2574f680cc6SAli Bahrami MSG_EM_STARCORE_CF, MSG_EM_ME16_CF,
2584f680cc6SAli Bahrami MSG_EM_ST100_CF, MSG_EM_TINYJ_CF,
2594f680cc6SAli Bahrami MSG_EM_AMD64_DMP, MSG_EM_PDSP_CF
2604f680cc6SAli Bahrami };
2614f680cc6SAli Bahrami static const conv_ds_msg_t ds_mach_36_63_cf = {
2624f680cc6SAli Bahrami CONV_DS_MSG_INIT(EM_V800, mach_36_63_cf) };
2634f680cc6SAli Bahrami static const conv_ds_msg_t ds_mach_36_63_nf = {
2644f680cc6SAli Bahrami CONV_DS_MSG_INIT(EM_V800, mach_36_63_nf) };
2654f680cc6SAli Bahrami static const conv_ds_msg_t ds_mach_36_63_dmp = {
2664f680cc6SAli Bahrami CONV_DS_MSG_INIT(EM_V800, mach_36_63_dmp) };
2674f680cc6SAli Bahrami
2684f680cc6SAli Bahrami
269*c4397e61SRobert Mustacchi static const Msg mach_66_120_cf[] = {
2704f680cc6SAli Bahrami MSG_EM_FX66_CF, MSG_EM_ST9PLUS_CF,
2714f680cc6SAli Bahrami MSG_EM_ST7_CF, MSG_EM_68HC16_CF,
2724f680cc6SAli Bahrami MSG_EM_68HC11_CF, MSG_EM_68HC08_CF,
2734f680cc6SAli Bahrami MSG_EM_68HC05_CF, MSG_EM_SVX_CF,
2744f680cc6SAli Bahrami MSG_EM_ST19_CF, MSG_EM_VAX_CF,
2754f680cc6SAli Bahrami MSG_EM_CRIS_CF, MSG_EM_JAVELIN_CF,
2764f680cc6SAli Bahrami MSG_EM_FIREPATH_CF, MSG_EM_ZSP_CF,
2774f680cc6SAli Bahrami MSG_EM_MMIX_CF, MSG_EM_HUANY_CF,
2784f680cc6SAli Bahrami MSG_EM_PRISM_CF, MSG_EM_AVR_CF,
2794f680cc6SAli Bahrami MSG_EM_FR30_CF, MSG_EM_D10V_CF,
2804f680cc6SAli Bahrami MSG_EM_D30V_CF, MSG_EM_V850_CF,
2814f680cc6SAli Bahrami MSG_EM_M32R_CF, MSG_EM_MN10300_CF,
2824f680cc6SAli Bahrami MSG_EM_MN10200_CF, MSG_EM_PJ_CF,
2834f680cc6SAli Bahrami MSG_EM_OPENRISC_CF, MSG_EM_ARC_A5_CF,
284*c4397e61SRobert Mustacchi MSG_EM_XTENSA_CF, MSG_EM_VIDEOCORE_CF,
285*c4397e61SRobert Mustacchi MSG_EM_TMM_GPP_CF, MSG_EM_NS32K_CF,
286*c4397e61SRobert Mustacchi MSG_EM_TPC_CF, MSG_EM_SNP1K_CF,
287*c4397e61SRobert Mustacchi MSG_EM_ST200_CF, MSG_EM_IP2K_CF,
288*c4397e61SRobert Mustacchi MSG_EM_MAX_CF, MSG_EM_CR_CF,
289*c4397e61SRobert Mustacchi MSG_EM_F2MC16_CF, MSG_EM_MSP430_CF,
290*c4397e61SRobert Mustacchi MSG_EM_BLACKFIN_CF, MSG_EM_SE_C33_CF,
291*c4397e61SRobert Mustacchi MSG_EM_SEP_CF, MSG_EM_ARCA_CF,
292*c4397e61SRobert Mustacchi MSG_EM_UNICORE_CF, MSG_EM_EXCESS_CF,
293*c4397e61SRobert Mustacchi MSG_EM_DXP_CF, MSG_EM_ALTERA_NIOS2_CF,
294*c4397e61SRobert Mustacchi MSG_EM_CRX_CF, MSG_EM_XGATE_CF,
295*c4397e61SRobert Mustacchi MSG_EM_C166_CF, MSG_EM_M16C_CF,
296*c4397e61SRobert Mustacchi MSG_EM_DSPIC30F_CF, MSG_EM_CE_CF,
297*c4397e61SRobert Mustacchi MSG_EM_M32C_CF
2984f680cc6SAli Bahrami };
299*c4397e61SRobert Mustacchi static const Msg mach_66_120_nf[] = {
3004f680cc6SAli Bahrami MSG_EM_FX66_NF, MSG_EM_ST9PLUS_NF,
3014f680cc6SAli Bahrami MSG_EM_ST7_NF, MSG_EM_68HC16_NF,
3024f680cc6SAli Bahrami MSG_EM_68HC11_NF, MSG_EM_68HC08_NF,
3034f680cc6SAli Bahrami MSG_EM_68HC05_NF, MSG_EM_SVX_NF,
3044f680cc6SAli Bahrami MSG_EM_ST19_NF, MSG_EM_VAX_NF,
3054f680cc6SAli Bahrami MSG_EM_CRIS_NF, MSG_EM_JAVELIN_NF,
3064f680cc6SAli Bahrami MSG_EM_FIREPATH_NF, MSG_EM_ZSP_NF,
3074f680cc6SAli Bahrami MSG_EM_MMIX_NF, MSG_EM_HUANY_NF,
3084f680cc6SAli Bahrami MSG_EM_PRISM_NF, MSG_EM_AVR_NF,
3094f680cc6SAli Bahrami MSG_EM_FR30_NF, MSG_EM_D10V_NF,
3104f680cc6SAli Bahrami MSG_EM_D30V_NF, MSG_EM_V850_NF,
3114f680cc6SAli Bahrami MSG_EM_M32R_NF, MSG_EM_MN10300_NF,
3124f680cc6SAli Bahrami MSG_EM_MN10200_NF, MSG_EM_PJ_NF,
3134f680cc6SAli Bahrami MSG_EM_OPENRISC_NF, MSG_EM_ARC_A5_NF,
314*c4397e61SRobert Mustacchi MSG_EM_XTENSA_NF, MSG_EM_VIDEOCORE_NF,
315*c4397e61SRobert Mustacchi MSG_EM_TMM_GPP_NF, MSG_EM_NS32K_NF,
316*c4397e61SRobert Mustacchi MSG_EM_TPC_NF, MSG_EM_SNP1K_NF,
317*c4397e61SRobert Mustacchi MSG_EM_ST200_NF, MSG_EM_IP2K_NF,
318*c4397e61SRobert Mustacchi MSG_EM_MAX_NF, MSG_EM_CR_NF,
319*c4397e61SRobert Mustacchi MSG_EM_F2MC16_NF, MSG_EM_MSP430_NF,
320*c4397e61SRobert Mustacchi MSG_EM_BLACKFIN_NF, MSG_EM_SE_C33_NF,
321*c4397e61SRobert Mustacchi MSG_EM_SEP_NF, MSG_EM_ARCA_NF,
322*c4397e61SRobert Mustacchi MSG_EM_UNICORE_NF, MSG_EM_EXCESS_NF,
323*c4397e61SRobert Mustacchi MSG_EM_DXP_NF, MSG_EM_ALTERA_NIOS2_NF,
324*c4397e61SRobert Mustacchi MSG_EM_CRX_NF, MSG_EM_XGATE_NF,
325*c4397e61SRobert Mustacchi MSG_EM_C166_NF, MSG_EM_M16C_NF,
326*c4397e61SRobert Mustacchi MSG_EM_DSPIC30F_NF, MSG_EM_CE_NF,
327*c4397e61SRobert Mustacchi MSG_EM_TSK3000_NF, MSG_EM_RS08_NF,
328*c4397e61SRobert Mustacchi MSG_EM_SHARC_NF, MSG_EM_ECOG2_NF,
329*c4397e61SRobert Mustacchi MSG_EM_SCORE7_NF, MSG_EM_DSP24_NF,
330*c4397e61SRobert Mustacchi MSG_EM_VIDEOCORE3_NF, MSG_EM_LATTICEMICO32_NF,
331*c4397e61SRobert Mustacchi MSG_EM_SE_C17_NF, MSG_EM_TI_C6000_NF,
332*c4397e61SRobert Mustacchi MSG_EM_TI_C2000_NF, MSG_EM_TI_C5500_NF,
333*c4397e61SRobert Mustacchi MSG_EM_TI_ARP32_NF, MSG_EM_TI_PRU_NF
3344f680cc6SAli Bahrami };
335*c4397e61SRobert Mustacchi static const Msg mach_66_120_dmp[] = {
3364f680cc6SAli Bahrami MSG_EM_FX66_CF, MSG_EM_ST9PLUS_CF,
3374f680cc6SAli Bahrami MSG_EM_ST7_CF, MSG_EM_68HC16_CF,
3384f680cc6SAli Bahrami MSG_EM_68HC11_CF, MSG_EM_68HC08_CF,
3394f680cc6SAli Bahrami MSG_EM_68HC05_CF, MSG_EM_SVX_CF,
3404f680cc6SAli Bahrami MSG_EM_ST19_CF, MSG_EM_VAX_DMP,
3414f680cc6SAli Bahrami MSG_EM_CRIS_CF, MSG_EM_JAVELIN_CF,
3424f680cc6SAli Bahrami MSG_EM_FIREPATH_CF, MSG_EM_ZSP_CF,
3434f680cc6SAli Bahrami MSG_EM_MMIX_CF, MSG_EM_HUANY_CF,
3444f680cc6SAli Bahrami MSG_EM_PRISM_CF, MSG_EM_AVR_CF,
3454f680cc6SAli Bahrami MSG_EM_FR30_CF, MSG_EM_D10V_CF,
3464f680cc6SAli Bahrami MSG_EM_D30V_CF, MSG_EM_V850_CF,
3474f680cc6SAli Bahrami MSG_EM_M32R_CF, MSG_EM_MN10300_CF,
3484f680cc6SAli Bahrami MSG_EM_MN10200_CF, MSG_EM_PJ_CF,
3494f680cc6SAli Bahrami MSG_EM_OPENRISC_CF, MSG_EM_ARC_A5_CF,
350*c4397e61SRobert Mustacchi MSG_EM_XTENSA_CF, MSG_EM_VIDEOCORE_CF,
351*c4397e61SRobert Mustacchi MSG_EM_TMM_GPP_CF, MSG_EM_NS32K_CF,
352*c4397e61SRobert Mustacchi MSG_EM_TPC_CF, MSG_EM_SNP1K_CF,
353*c4397e61SRobert Mustacchi MSG_EM_ST200_CF, MSG_EM_IP2K_CF,
354*c4397e61SRobert Mustacchi MSG_EM_MAX_CF, MSG_EM_CR_CF,
355*c4397e61SRobert Mustacchi MSG_EM_F2MC16_CF, MSG_EM_MSP430_CF,
356*c4397e61SRobert Mustacchi MSG_EM_BLACKFIN_CF, MSG_EM_SE_C33_CF,
357*c4397e61SRobert Mustacchi MSG_EM_SEP_CF, MSG_EM_ARCA_CF,
358*c4397e61SRobert Mustacchi MSG_EM_UNICORE_CF, MSG_EM_EXCESS_CF,
359*c4397e61SRobert Mustacchi MSG_EM_DXP_CF, MSG_EM_ALTERA_NIOS2_CF,
360*c4397e61SRobert Mustacchi MSG_EM_CRX_CF, MSG_EM_XGATE_CF,
361*c4397e61SRobert Mustacchi MSG_EM_C166_CF, MSG_EM_M16C_CF,
362*c4397e61SRobert Mustacchi MSG_EM_DSPIC30F_CF, MSG_EM_CE_CF,
363*c4397e61SRobert Mustacchi MSG_EM_M32C_CF
364c13de8f6Sab196087 };
365*c4397e61SRobert Mustacchi
366*c4397e61SRobert Mustacchi static const conv_ds_msg_t ds_mach_66_120_cf = {
367*c4397e61SRobert Mustacchi CONV_DS_MSG_INIT(EM_FX66, mach_66_120_cf) };
368*c4397e61SRobert Mustacchi static const conv_ds_msg_t ds_mach_66_120_nf = {
369*c4397e61SRobert Mustacchi CONV_DS_MSG_INIT(EM_FX66, mach_66_120_nf) };
370*c4397e61SRobert Mustacchi static const conv_ds_msg_t ds_mach_66_120_dmp = {
371*c4397e61SRobert Mustacchi CONV_DS_MSG_INIT(EM_FX66, mach_66_120_dmp) };
372*c4397e61SRobert Mustacchi
373*c4397e61SRobert Mustacchi static const Msg mach_131_144_cf[] = {
374*c4397e61SRobert Mustacchi MSG_EM_TSK3000_CF, MSG_EM_RS08_CF,
375*c4397e61SRobert Mustacchi MSG_EM_SHARC_CF, MSG_EM_ECOG2_CF,
376*c4397e61SRobert Mustacchi MSG_EM_SCORE7_CF, MSG_EM_DSP24_CF,
377*c4397e61SRobert Mustacchi MSG_EM_VIDEOCORE3_CF, MSG_EM_LATTICEMICO32_CF,
378*c4397e61SRobert Mustacchi MSG_EM_SE_C17_CF, MSG_EM_TI_C6000_CF,
379*c4397e61SRobert Mustacchi MSG_EM_TI_C2000_CF, MSG_EM_TI_C5500_CF,
380*c4397e61SRobert Mustacchi MSG_EM_TI_ARP32_CF, MSG_EM_TI_PRU_CF
381*c4397e61SRobert Mustacchi };
382*c4397e61SRobert Mustacchi static const Msg mach_131_144_nf[] = {
383*c4397e61SRobert Mustacchi MSG_EM_TSK3000_NF, MSG_EM_RS08_NF,
384*c4397e61SRobert Mustacchi MSG_EM_SHARC_NF, MSG_EM_ECOG2_NF,
385*c4397e61SRobert Mustacchi MSG_EM_SCORE7_NF, MSG_EM_DSP24_NF,
386*c4397e61SRobert Mustacchi MSG_EM_VIDEOCORE3_NF, MSG_EM_LATTICEMICO32_NF,
387*c4397e61SRobert Mustacchi MSG_EM_SE_C17_NF, MSG_EM_TI_C6000_NF,
388*c4397e61SRobert Mustacchi MSG_EM_TI_C2000_NF, MSG_EM_TI_C5500_NF,
389*c4397e61SRobert Mustacchi MSG_EM_TI_ARP32_NF, MSG_EM_TI_PRU_NF
390*c4397e61SRobert Mustacchi };
391*c4397e61SRobert Mustacchi static const Msg mach_131_144_dmp[] = {
392*c4397e61SRobert Mustacchi MSG_EM_TSK3000_CF, MSG_EM_RS08_CF,
393*c4397e61SRobert Mustacchi MSG_EM_SHARC_CF, MSG_EM_ECOG2_CF,
394*c4397e61SRobert Mustacchi MSG_EM_SCORE7_CF, MSG_EM_DSP24_CF,
395*c4397e61SRobert Mustacchi MSG_EM_VIDEOCORE3_CF, MSG_EM_LATTICEMICO32_CF,
396*c4397e61SRobert Mustacchi MSG_EM_SE_C17_CF, MSG_EM_TI_C6000_CF,
397*c4397e61SRobert Mustacchi MSG_EM_TI_C2000_CF, MSG_EM_TI_C5500_CF,
398*c4397e61SRobert Mustacchi MSG_EM_TI_ARP32_CF, MSG_EM_TI_PRU_CF
399*c4397e61SRobert Mustacchi };
400*c4397e61SRobert Mustacchi static const conv_ds_msg_t ds_mach_131_144_cf = {
401*c4397e61SRobert Mustacchi CONV_DS_MSG_INIT(EM_TSK3000, mach_131_144_cf) };
402*c4397e61SRobert Mustacchi static const conv_ds_msg_t ds_mach_131_144_nf = {
403*c4397e61SRobert Mustacchi CONV_DS_MSG_INIT(EM_TSK3000, mach_131_144_nf) };
404*c4397e61SRobert Mustacchi static const conv_ds_msg_t ds_mach_131_144_dmp = {
405*c4397e61SRobert Mustacchi CONV_DS_MSG_INIT(EM_TSK3000, mach_131_144_dmp) };
406*c4397e61SRobert Mustacchi
407*c4397e61SRobert Mustacchi static const Msg mach_160_181_cf[] = {
408*c4397e61SRobert Mustacchi MSG_EM_MMDSP_PLUS_CF, MSG_EM_CYPRESS_M8C_CF,
409*c4397e61SRobert Mustacchi MSG_EM_R32C_CF, MSG_EM_TRIMEDIA_CF,
410*c4397e61SRobert Mustacchi MSG_EM_QDSP6_CF, MSG_EM_8051_CF,
411*c4397e61SRobert Mustacchi MSG_EM_STXP7X_CF, MSG_EM_NDS32_CF,
412*c4397e61SRobert Mustacchi MSG_EM_ECOG1_CF, MSG_EM_MAXQ30_CF,
413*c4397e61SRobert Mustacchi MSG_EM_XIMO16_CF, MSG_EM_MANIK_CF,
414*c4397e61SRobert Mustacchi MSG_EM_CRAYNV2_CF, MSG_EM_RX_CF,
415*c4397e61SRobert Mustacchi MSG_EM_METAG_CF, MSG_EM_MCST_ELBRUS_CF,
416*c4397e61SRobert Mustacchi MSG_EM_ECOG16_CF, MSG_EM_CR16_CF,
417*c4397e61SRobert Mustacchi MSG_EM_ETPU_CF, MSG_EM_SLE9X_CF,
418*c4397e61SRobert Mustacchi MSG_EM_L10M_CF, MSG_EM_K10M_CF,
419*c4397e61SRobert Mustacchi };
420*c4397e61SRobert Mustacchi static const Msg mach_160_181_nf[] = {
421*c4397e61SRobert Mustacchi MSG_EM_MMDSP_PLUS_NF, MSG_EM_CYPRESS_M8C_NF,
422*c4397e61SRobert Mustacchi MSG_EM_R32C_NF, MSG_EM_TRIMEDIA_NF,
423*c4397e61SRobert Mustacchi MSG_EM_QDSP6_NF, MSG_EM_8051_NF,
424*c4397e61SRobert Mustacchi MSG_EM_STXP7X_NF, MSG_EM_NDS32_NF,
425*c4397e61SRobert Mustacchi MSG_EM_ECOG1_NF, MSG_EM_MAXQ30_NF,
426*c4397e61SRobert Mustacchi MSG_EM_XIMO16_NF, MSG_EM_MANIK_NF,
427*c4397e61SRobert Mustacchi MSG_EM_CRAYNV2_NF, MSG_EM_RX_NF,
428*c4397e61SRobert Mustacchi MSG_EM_METAG_NF, MSG_EM_MCST_ELBRUS_NF,
429*c4397e61SRobert Mustacchi MSG_EM_ECOG16_NF, MSG_EM_CR16_NF,
430*c4397e61SRobert Mustacchi MSG_EM_ETPU_NF, MSG_EM_SLE9X_NF,
431*c4397e61SRobert Mustacchi MSG_EM_L10M_NF, MSG_EM_K10M_NF,
432*c4397e61SRobert Mustacchi };
433*c4397e61SRobert Mustacchi static const Msg mach_160_181_dmp[] = {
434*c4397e61SRobert Mustacchi MSG_EM_MMDSP_PLUS_CF, MSG_EM_CYPRESS_M8C_CF,
435*c4397e61SRobert Mustacchi MSG_EM_R32C_CF, MSG_EM_TRIMEDIA_CF,
436*c4397e61SRobert Mustacchi MSG_EM_QDSP6_CF, MSG_EM_8051_CF,
437*c4397e61SRobert Mustacchi MSG_EM_STXP7X_CF, MSG_EM_NDS32_CF,
438*c4397e61SRobert Mustacchi MSG_EM_ECOG1_CF, MSG_EM_MAXQ30_CF,
439*c4397e61SRobert Mustacchi MSG_EM_XIMO16_CF, MSG_EM_MANIK_CF,
440*c4397e61SRobert Mustacchi MSG_EM_CRAYNV2_CF, MSG_EM_RX_CF,
441*c4397e61SRobert Mustacchi MSG_EM_METAG_CF, MSG_EM_MCST_ELBRUS_CF,
442*c4397e61SRobert Mustacchi MSG_EM_ECOG16_CF, MSG_EM_CR16_CF,
443*c4397e61SRobert Mustacchi MSG_EM_ETPU_CF, MSG_EM_SLE9X_CF,
444*c4397e61SRobert Mustacchi MSG_EM_L10M_CF, MSG_EM_K10M_CF,
445*c4397e61SRobert Mustacchi };
446*c4397e61SRobert Mustacchi static const conv_ds_msg_t ds_mach_160_181_cf = {
447*c4397e61SRobert Mustacchi CONV_DS_MSG_INIT(EM_MMDSP_PLUS, mach_160_181_cf) };
448*c4397e61SRobert Mustacchi static const conv_ds_msg_t ds_mach_160_181_nf = {
449*c4397e61SRobert Mustacchi CONV_DS_MSG_INIT(EM_MMDSP_PLUS, mach_160_181_nf) };
450*c4397e61SRobert Mustacchi static const conv_ds_msg_t ds_mach_160_181_dmp = {
451*c4397e61SRobert Mustacchi CONV_DS_MSG_INIT(EM_MMDSP_PLUS, mach_160_181_dmp) };
452*c4397e61SRobert Mustacchi
453*c4397e61SRobert Mustacchi static const Msg mach_183_cf[] = {
454*c4397e61SRobert Mustacchi MSG_EM_AARCH64_CF
455*c4397e61SRobert Mustacchi };
456*c4397e61SRobert Mustacchi static const Msg mach_183_nf[] = {
457*c4397e61SRobert Mustacchi MSG_EM_AARCH64_NF
458*c4397e61SRobert Mustacchi };
459*c4397e61SRobert Mustacchi static const Msg mach_183_dmp[] = {
460*c4397e61SRobert Mustacchi MSG_EM_AARCH64_CF
461*c4397e61SRobert Mustacchi };
462*c4397e61SRobert Mustacchi static const conv_ds_msg_t ds_mach_183_cf = {
463*c4397e61SRobert Mustacchi CONV_DS_MSG_INIT(EM_AARCH64, mach_183_cf) };
464*c4397e61SRobert Mustacchi static const conv_ds_msg_t ds_mach_183_nf = {
465*c4397e61SRobert Mustacchi CONV_DS_MSG_INIT(EM_AARCH64, mach_183_nf) };
466*c4397e61SRobert Mustacchi static const conv_ds_msg_t ds_mach_183_dmp = {
467*c4397e61SRobert Mustacchi CONV_DS_MSG_INIT(EM_AARCH64, mach_183_dmp) };
468*c4397e61SRobert Mustacchi
469*c4397e61SRobert Mustacchi static const Msg mach_185_224_cf[] = {
470*c4397e61SRobert Mustacchi MSG_EM_AVR32_CF, MSG_EM_STM8_CF,
471*c4397e61SRobert Mustacchi MSG_EM_TILE64_CF, MSG_EM_TILEPRO_CF,
472*c4397e61SRobert Mustacchi MSG_EM_MICROBLAZE_CF, MSG_EM_CUDA_CF,
473*c4397e61SRobert Mustacchi MSG_EM_TILEGX_CF, MSG_EM_CLOUDSHIELD_CF,
474*c4397e61SRobert Mustacchi MSG_EM_COREA_1ST_CF, MSG_EM_COREA_2ND_CF,
475*c4397e61SRobert Mustacchi MSG_EM_ARC_COMPACT2_CF, MSG_EM_OPEN8_CF,
476*c4397e61SRobert Mustacchi MSG_EM_RL78_CF, MSG_EM_VIDEOCORE5_CF,
477*c4397e61SRobert Mustacchi MSG_EM_78KOR_CF, MSG_EM_56800EX_CF,
478*c4397e61SRobert Mustacchi MSG_EM_BA1_CF, MSG_EM_BA2_CF,
479*c4397e61SRobert Mustacchi MSG_EM_XCORE_CF, MSG_EM_MCHP_PIC_CF,
480*c4397e61SRobert Mustacchi MSG_EM_INTEL205_CF, MSG_EM_INTEL206_CF,
481*c4397e61SRobert Mustacchi MSG_EM_INTEL207_CF, MSG_EM_INTEL208_CF,
482*c4397e61SRobert Mustacchi MSG_EM_INTEL209_CF, MSG_EM_KM32_CF,
483*c4397e61SRobert Mustacchi MSG_EM_KMX32_CF, MSG_EM_KMX16_CF,
484*c4397e61SRobert Mustacchi MSG_EM_KMX8_CF, MSG_EM_KVARC_CF,
485*c4397e61SRobert Mustacchi MSG_EM_CDP_CF, MSG_EM_COGE_CF,
486*c4397e61SRobert Mustacchi MSG_EM_COOL_CF, MSG_EM_NORC_CF,
487*c4397e61SRobert Mustacchi MSG_EM_CSR_KALIMBA_CF, MSG_EM_Z80_CF,
488*c4397e61SRobert Mustacchi MSG_EM_VISIUM_CF, MSG_EM_FT32_CF,
489*c4397e61SRobert Mustacchi MSG_EM_MOXIE_CF, MSG_EM_AMDGPU_CF
490*c4397e61SRobert Mustacchi };
491*c4397e61SRobert Mustacchi static const Msg mach_185_224_nf[] = {
492*c4397e61SRobert Mustacchi MSG_EM_AVR32_NF, MSG_EM_STM8_NF,
493*c4397e61SRobert Mustacchi MSG_EM_TILE64_NF, MSG_EM_TILEPRO_NF,
494*c4397e61SRobert Mustacchi MSG_EM_MICROBLAZE_NF, MSG_EM_CUDA_NF,
495*c4397e61SRobert Mustacchi MSG_EM_TILEGX_NF, MSG_EM_CLOUDSHIELD_NF,
496*c4397e61SRobert Mustacchi MSG_EM_COREA_1ST_NF, MSG_EM_COREA_2ND_NF,
497*c4397e61SRobert Mustacchi MSG_EM_ARC_COMPACT2_NF, MSG_EM_OPEN8_NF,
498*c4397e61SRobert Mustacchi MSG_EM_RL78_NF, MSG_EM_VIDEOCORE5_NF,
499*c4397e61SRobert Mustacchi MSG_EM_78KOR_NF, MSG_EM_56800EX_NF,
500*c4397e61SRobert Mustacchi MSG_EM_BA1_NF, MSG_EM_BA2_NF,
501*c4397e61SRobert Mustacchi MSG_EM_XCORE_NF, MSG_EM_MCHP_PIC_NF,
502*c4397e61SRobert Mustacchi MSG_EM_INTEL205_NF, MSG_EM_INTEL206_NF,
503*c4397e61SRobert Mustacchi MSG_EM_INTEL207_NF, MSG_EM_INTEL208_NF,
504*c4397e61SRobert Mustacchi MSG_EM_INTEL209_NF, MSG_EM_KM32_NF,
505*c4397e61SRobert Mustacchi MSG_EM_KMX32_NF, MSG_EM_KMX16_NF,
506*c4397e61SRobert Mustacchi MSG_EM_KMX8_NF, MSG_EM_KVARC_NF,
507*c4397e61SRobert Mustacchi MSG_EM_CDP_NF, MSG_EM_COGE_NF,
508*c4397e61SRobert Mustacchi MSG_EM_COOL_NF, MSG_EM_NORC_NF,
509*c4397e61SRobert Mustacchi MSG_EM_CSR_KALIMBA_NF, MSG_EM_Z80_NF,
510*c4397e61SRobert Mustacchi MSG_EM_VISIUM_NF, MSG_EM_FT32_NF,
511*c4397e61SRobert Mustacchi MSG_EM_MOXIE_NF, MSG_EM_AMDGPU_NF
512*c4397e61SRobert Mustacchi };
513*c4397e61SRobert Mustacchi static const Msg mach_185_224_dmp[] = {
514*c4397e61SRobert Mustacchi MSG_EM_AVR32_CF, MSG_EM_STM8_CF,
515*c4397e61SRobert Mustacchi MSG_EM_TILE64_CF, MSG_EM_TILEPRO_CF,
516*c4397e61SRobert Mustacchi MSG_EM_MICROBLAZE_CF, MSG_EM_CUDA_CF,
517*c4397e61SRobert Mustacchi MSG_EM_TILEGX_CF, MSG_EM_CLOUDSHIELD_CF,
518*c4397e61SRobert Mustacchi MSG_EM_COREA_1ST_CF, MSG_EM_COREA_2ND_CF,
519*c4397e61SRobert Mustacchi MSG_EM_ARC_COMPACT2_CF, MSG_EM_OPEN8_CF,
520*c4397e61SRobert Mustacchi MSG_EM_RL78_CF, MSG_EM_VIDEOCORE5_CF,
521*c4397e61SRobert Mustacchi MSG_EM_78KOR_CF, MSG_EM_56800EX_CF,
522*c4397e61SRobert Mustacchi MSG_EM_BA1_CF, MSG_EM_BA2_CF,
523*c4397e61SRobert Mustacchi MSG_EM_XCORE_CF, MSG_EM_MCHP_PIC_CF,
524*c4397e61SRobert Mustacchi MSG_EM_INTEL205_CF, MSG_EM_INTEL206_CF,
525*c4397e61SRobert Mustacchi MSG_EM_INTEL207_CF, MSG_EM_INTEL208_CF,
526*c4397e61SRobert Mustacchi MSG_EM_INTEL209_CF, MSG_EM_KM32_CF,
527*c4397e61SRobert Mustacchi MSG_EM_KMX32_CF, MSG_EM_KMX16_CF,
528*c4397e61SRobert Mustacchi MSG_EM_KMX8_CF, MSG_EM_KVARC_CF,
529*c4397e61SRobert Mustacchi MSG_EM_CDP_CF, MSG_EM_COGE_CF,
530*c4397e61SRobert Mustacchi MSG_EM_COOL_CF, MSG_EM_NORC_CF,
531*c4397e61SRobert Mustacchi MSG_EM_CSR_KALIMBA_CF, MSG_EM_Z80_CF,
532*c4397e61SRobert Mustacchi MSG_EM_VISIUM_CF, MSG_EM_FT32_CF,
533*c4397e61SRobert Mustacchi MSG_EM_MOXIE_CF, MSG_EM_AMDGPU_CF
534*c4397e61SRobert Mustacchi };
535*c4397e61SRobert Mustacchi
536*c4397e61SRobert Mustacchi static const conv_ds_msg_t ds_mach_185_224_cf = {
537*c4397e61SRobert Mustacchi CONV_DS_MSG_INIT(EM_AVR32, mach_185_224_cf) };
538*c4397e61SRobert Mustacchi static const conv_ds_msg_t ds_mach_185_224_nf = {
539*c4397e61SRobert Mustacchi CONV_DS_MSG_INIT(EM_AVR32, mach_185_224_nf) };
540*c4397e61SRobert Mustacchi static const conv_ds_msg_t ds_mach_185_224_dmp = {
541*c4397e61SRobert Mustacchi CONV_DS_MSG_INIT(EM_AVR32, mach_185_224_dmp) };
542*c4397e61SRobert Mustacchi
543*c4397e61SRobert Mustacchi
544*c4397e61SRobert Mustacchi static const Msg mach_243_cf[] = {
545*c4397e61SRobert Mustacchi MSG_EM_RISCV_CF
546*c4397e61SRobert Mustacchi };
547*c4397e61SRobert Mustacchi static const Msg mach_243_nf[] = {
548*c4397e61SRobert Mustacchi MSG_EM_RISCV_NF
549*c4397e61SRobert Mustacchi };
550*c4397e61SRobert Mustacchi static const Msg mach_243_dmp[] = {
551*c4397e61SRobert Mustacchi MSG_EM_RISCV_CF
552*c4397e61SRobert Mustacchi };
553*c4397e61SRobert Mustacchi
554*c4397e61SRobert Mustacchi static const conv_ds_msg_t ds_mach_243_cf = {
555*c4397e61SRobert Mustacchi CONV_DS_MSG_INIT(EM_RISCV, mach_243_cf) };
556*c4397e61SRobert Mustacchi static const conv_ds_msg_t ds_mach_243_nf = {
557*c4397e61SRobert Mustacchi CONV_DS_MSG_INIT(EM_RISCV, mach_243_nf) };
558*c4397e61SRobert Mustacchi static const conv_ds_msg_t ds_mach_243_dmp = {
559*c4397e61SRobert Mustacchi CONV_DS_MSG_INIT(EM_RISCV, mach_243_dmp) };
560*c4397e61SRobert Mustacchi
561*c4397e61SRobert Mustacchi #if (EM_NUM != (EM_RISCV + 1))
5627c478bd9Sstevel@tonic-gate #error "EM_NUM has grown"
5637c478bd9Sstevel@tonic-gate #endif
5644f680cc6SAli Bahrami /* Build NULL terminated return arrays for each string style */
565e6d6d618SToomas Soome static const conv_ds_t *ds_cf[] = {
566*c4397e61SRobert Mustacchi CONV_DS_ADDR(ds_mach_0_11_cf),
567*c4397e61SRobert Mustacchi CONV_DS_ADDR(ds_mach_15_22_cf),
568*c4397e61SRobert Mustacchi CONV_DS_ADDR(ds_mach_36_63_cf),
569*c4397e61SRobert Mustacchi CONV_DS_ADDR(ds_mach_66_120_cf),
570*c4397e61SRobert Mustacchi CONV_DS_ADDR(ds_mach_131_144_cf),
571*c4397e61SRobert Mustacchi CONV_DS_ADDR(ds_mach_160_181_cf),
572*c4397e61SRobert Mustacchi CONV_DS_ADDR(ds_mach_183_cf),
573*c4397e61SRobert Mustacchi CONV_DS_ADDR(ds_mach_185_224_cf),
574*c4397e61SRobert Mustacchi CONV_DS_ADDR(ds_mach_243_cf),
5754f680cc6SAli Bahrami NULL
5764f680cc6SAli Bahrami };
577e6d6d618SToomas Soome static const conv_ds_t *ds_nf[] = {
578*c4397e61SRobert Mustacchi CONV_DS_ADDR(ds_mach_0_11_nf),
579*c4397e61SRobert Mustacchi CONV_DS_ADDR(ds_mach_15_22_nf),
580*c4397e61SRobert Mustacchi CONV_DS_ADDR(ds_mach_36_63_nf),
581*c4397e61SRobert Mustacchi CONV_DS_ADDR(ds_mach_66_120_nf),
582*c4397e61SRobert Mustacchi CONV_DS_ADDR(ds_mach_131_144_nf),
583*c4397e61SRobert Mustacchi CONV_DS_ADDR(ds_mach_160_181_nf),
584*c4397e61SRobert Mustacchi CONV_DS_ADDR(ds_mach_183_nf),
585*c4397e61SRobert Mustacchi CONV_DS_ADDR(ds_mach_185_224_nf),
586*c4397e61SRobert Mustacchi CONV_DS_ADDR(ds_mach_243_nf),
5874f680cc6SAli Bahrami NULL
5884f680cc6SAli Bahrami };
589e6d6d618SToomas Soome static const conv_ds_t *ds_dmp[] = {
590*c4397e61SRobert Mustacchi CONV_DS_ADDR(ds_mach_0_11_dmp),
591*c4397e61SRobert Mustacchi CONV_DS_ADDR(ds_mach_15_22_dmp),
5924f680cc6SAli Bahrami CONV_DS_ADDR(ds_mach_36_63_dmp),
593*c4397e61SRobert Mustacchi CONV_DS_ADDR(ds_mach_66_120_dmp),
594*c4397e61SRobert Mustacchi CONV_DS_ADDR(ds_mach_131_144_dmp),
595*c4397e61SRobert Mustacchi CONV_DS_ADDR(ds_mach_160_181_dmp),
596*c4397e61SRobert Mustacchi CONV_DS_ADDR(ds_mach_183_dmp),
597*c4397e61SRobert Mustacchi CONV_DS_ADDR(ds_mach_185_224_dmp),
598*c4397e61SRobert Mustacchi CONV_DS_ADDR(ds_mach_243_dmp),
599*c4397e61SRobert Mustacchi NULL
6004f680cc6SAli Bahrami };
6014f680cc6SAli Bahrami
6024f680cc6SAli Bahrami
6034f680cc6SAli Bahrami /* Select the strings to use */
6044f680cc6SAli Bahrami switch (CONV_TYPE_FMT_ALT(fmt_flags)) {
6054f680cc6SAli Bahrami case CONV_FMT_ALT_DUMP:
6064f680cc6SAli Bahrami case CONV_FMT_ALT_FILE:
6074f680cc6SAli Bahrami return (ds_dmp);
6084f680cc6SAli Bahrami case CONV_FMT_ALT_NF:
6094f680cc6SAli Bahrami return (ds_nf);
6104f680cc6SAli Bahrami }
6114f680cc6SAli Bahrami
6124f680cc6SAli Bahrami return (ds_cf);
6134f680cc6SAli Bahrami }
6145aefb655Srie
6155aefb655Srie const char *
conv_ehdr_mach(Half machine,Conv_fmt_flags_t fmt_flags,Conv_inv_buf_t * inv_buf)616d29b2c44Sab196087 conv_ehdr_mach(Half machine, Conv_fmt_flags_t fmt_flags,
617d29b2c44Sab196087 Conv_inv_buf_t *inv_buf)
6185aefb655Srie {
6194f680cc6SAli Bahrami return (conv_map_ds(ELFOSABI_NONE, EM_NONE, machine,
6204f680cc6SAli Bahrami ehdr_mach_strings(fmt_flags), fmt_flags, inv_buf));
6214f680cc6SAli Bahrami }
6224f680cc6SAli Bahrami
6234f680cc6SAli Bahrami conv_iter_ret_t
conv_iter_ehdr_mach(Conv_fmt_flags_t fmt_flags,conv_iter_cb_t func,void * uvalue)6244f680cc6SAli Bahrami conv_iter_ehdr_mach(Conv_fmt_flags_t fmt_flags, conv_iter_cb_t func,
6254f680cc6SAli Bahrami void *uvalue)
6264f680cc6SAli Bahrami {
6274f680cc6SAli Bahrami static const Val_desc extra_dmp_nf[] = {
6284f680cc6SAli Bahrami { EM_M32, MSG_EM_M32_DMP},
6294f680cc6SAli Bahrami { EM_386, MSG_EM_386_DMP },
6304f680cc6SAli Bahrami { EM_68K, MSG_EM_68K_DMP },
6314f680cc6SAli Bahrami { EM_88K, MSG_EM_88K_DMP },
6324f680cc6SAli Bahrami { EM_486, MSG_EM_486_DMP },
6334f680cc6SAli Bahrami { EM_860, MSG_EM_860_DMP },
6344f680cc6SAli Bahrami { EM_MIPS, MSG_EM_MIPS_DMP },
6354f680cc6SAli Bahrami { EM_MIPS_RS3_LE, MSG_EM_MIPS_RS3_LE_DMP },
6364f680cc6SAli Bahrami { EM_PPC, MSG_EM_PPC_DMP },
6374f680cc6SAli Bahrami { EM_PPC64, MSG_EM_PPC64_DMP },
6384f680cc6SAli Bahrami
6394f680cc6SAli Bahrami { 0 }
6404f680cc6SAli Bahrami };
6414f680cc6SAli Bahrami
6424f680cc6SAli Bahrami if (conv_iter_ds(ELFOSABI_NONE, EM_NONE,
6434f680cc6SAli Bahrami ehdr_mach_strings(fmt_flags), func, uvalue) == CONV_ITER_DONE)
6444f680cc6SAli Bahrami return (CONV_ITER_DONE);
6454f680cc6SAli Bahrami
6464f680cc6SAli Bahrami /*
6474f680cc6SAli Bahrami * For the NF style, we also supply a few of the traditional
6484f680cc6SAli Bahrami * dump versions for iteration, but not for display.
6494f680cc6SAli Bahrami */
6504f680cc6SAli Bahrami if (CONV_TYPE_FMT_ALT(fmt_flags) == CONV_FMT_ALT_NF)
6514f680cc6SAli Bahrami return (conv_iter_vd(extra_dmp_nf, func, uvalue));
6524f680cc6SAli Bahrami
6534f680cc6SAli Bahrami return (CONV_ITER_CONT);
6544f680cc6SAli Bahrami }
6554f680cc6SAli Bahrami
6564f680cc6SAli Bahrami
6574f680cc6SAli Bahrami
6584f680cc6SAli Bahrami static const conv_ds_t **
ehdr_eident_strings(Conv_fmt_flags_t fmt_flags)6594f680cc6SAli Bahrami ehdr_eident_strings(Conv_fmt_flags_t fmt_flags)
6604f680cc6SAli Bahrami {
6614f680cc6SAli Bahrami static const Msg eident_cf[] = {
6624f680cc6SAli Bahrami MSG_EI_MAG0_CF, MSG_EI_MAG1_CF,
6634f680cc6SAli Bahrami MSG_EI_MAG2_CF, MSG_EI_MAG3_CF,
6644f680cc6SAli Bahrami MSG_EI_CLASS_CF, MSG_EI_DATA_CF,
6654f680cc6SAli Bahrami MSG_EI_VERSION_CF, MSG_EI_OSABI_CF,
6664f680cc6SAli Bahrami MSG_EI_ABIVERSION_CF
6674f680cc6SAli Bahrami };
6684f680cc6SAli Bahrami static const Msg eident_nf[] = {
6694f680cc6SAli Bahrami MSG_EI_MAG0_NF, MSG_EI_MAG1_NF,
6704f680cc6SAli Bahrami MSG_EI_MAG2_NF, MSG_EI_MAG3_NF,
6714f680cc6SAli Bahrami MSG_EI_CLASS_NF, MSG_EI_DATA_NF,
6724f680cc6SAli Bahrami MSG_EI_VERSION_NF, MSG_EI_OSABI_NF,
6734f680cc6SAli Bahrami MSG_EI_ABIVERSION_NF
6744f680cc6SAli Bahrami };
6754f680cc6SAli Bahrami #if EI_PAD != (EI_ABIVERSION + 1)
6764f680cc6SAli Bahrami error "EI_PAD has grown. Update etypes[]"
6774f680cc6SAli Bahrami #endif
6784f680cc6SAli Bahrami static const conv_ds_msg_t ds_eident_cf = {
6794f680cc6SAli Bahrami CONV_DS_MSG_INIT(EI_MAG0, eident_cf) };
6804f680cc6SAli Bahrami static const conv_ds_msg_t ds_eident_nf = {
6814f680cc6SAli Bahrami CONV_DS_MSG_INIT(EI_MAG0, eident_nf) };
6824f680cc6SAli Bahrami
6834f680cc6SAli Bahrami /* Build NULL terminated return arrays for each string style */
684e6d6d618SToomas Soome static const conv_ds_t *ds_cf[] = {
6854f680cc6SAli Bahrami CONV_DS_ADDR(ds_eident_cf), NULL };
6864f680cc6SAli Bahrami static const conv_ds_t *ds_nf[] = {
6874f680cc6SAli Bahrami CONV_DS_ADDR(ds_eident_nf), NULL };
6884f680cc6SAli Bahrami
6894f680cc6SAli Bahrami /* Select the strings to use */
6904f680cc6SAli Bahrami return ((CONV_TYPE_FMT_ALT(fmt_flags) == CONV_FMT_ALT_CF) ?
6914f680cc6SAli Bahrami ds_cf : ds_nf);
6924f680cc6SAli Bahrami }
6934f680cc6SAli Bahrami
6944f680cc6SAli Bahrami conv_iter_ret_t
conv_iter_ehdr_eident(Conv_fmt_flags_t fmt_flags,conv_iter_cb_t func,void * uvalue)6954f680cc6SAli Bahrami conv_iter_ehdr_eident(Conv_fmt_flags_t fmt_flags, conv_iter_cb_t func,
6964f680cc6SAli Bahrami void *uvalue)
6974f680cc6SAli Bahrami {
6984f680cc6SAli Bahrami return (conv_iter_ds(ELFOSABI_NONE, EM_NONE,
6994f680cc6SAli Bahrami ehdr_eident_strings(fmt_flags), func, uvalue));
7004f680cc6SAli Bahrami }
7014f680cc6SAli Bahrami
7024f680cc6SAli Bahrami static const conv_ds_t **
ehdr_type_strings(Conv_fmt_flags_t fmt_flags)7034f680cc6SAli Bahrami ehdr_type_strings(Conv_fmt_flags_t fmt_flags)
7044f680cc6SAli Bahrami {
7054f680cc6SAli Bahrami #define SOL ELFOSABI_SOLARIS, EM_NONE
7064f680cc6SAli Bahrami
7074f680cc6SAli Bahrami static const Msg type_cf[] = {
7084f680cc6SAli Bahrami MSG_ET_NONE_CF, MSG_ET_REL_CF, MSG_ET_EXEC_CF,
7094f680cc6SAli Bahrami MSG_ET_DYN_CF, MSG_ET_CORE_CF
7104f680cc6SAli Bahrami };
7114f680cc6SAli Bahrami static const Msg type_nf[] = {
7124f680cc6SAli Bahrami MSG_ET_NONE_NF, MSG_ET_REL_NF, MSG_ET_EXEC_NF,
7134f680cc6SAli Bahrami MSG_ET_DYN_NF, MSG_ET_CORE_NF
7144f680cc6SAli Bahrami };
7154f680cc6SAli Bahrami static const Msg type_dmp[] = {
7164f680cc6SAli Bahrami MSG_ET_NONE_DMP, MSG_ET_REL_DMP, MSG_ET_EXEC_DMP,
7174f680cc6SAli Bahrami MSG_ET_DYN_DMP, MSG_ET_CORE_DMP
7184f680cc6SAli Bahrami };
7194f680cc6SAli Bahrami #if ET_NUM != (ET_CORE + 1)
7204f680cc6SAli Bahrami error "ET_NUM has grown. Update types[]"
7214f680cc6SAli Bahrami #endif
7224f680cc6SAli Bahrami static const conv_ds_msg_t ds_type_cf = {
7234f680cc6SAli Bahrami CONV_DS_MSG_INIT(ET_NONE, type_cf) };
7244f680cc6SAli Bahrami static const conv_ds_msg_t ds_type_nf = {
7254f680cc6SAli Bahrami CONV_DS_MSG_INIT(ET_NONE, type_nf) };
7264f680cc6SAli Bahrami static const conv_ds_msg_t ds_type_dmp = {
7274f680cc6SAli Bahrami CONV_DS_MSG_INIT(ET_NONE, type_dmp) };
7284f680cc6SAli Bahrami
7294f680cc6SAli Bahrami static const Val_desc2 type_osabi_cf[] = {
7304f680cc6SAli Bahrami { ET_SUNWPSEUDO, SOL, MSG_ET_SUNWPSEUDO_CF },
7314f680cc6SAli Bahrami { 0 }
7324f680cc6SAli Bahrami };
7334f680cc6SAli Bahrami static const Val_desc2 type_osabi_nf[] = {
7344f680cc6SAli Bahrami { ET_SUNWPSEUDO, SOL, MSG_ET_SUNWPSEUDO_NF },
7354f680cc6SAli Bahrami { 0 }
7364f680cc6SAli Bahrami };
7374f680cc6SAli Bahrami static const Val_desc2 type_osabi_dmp[] = {
7384f680cc6SAli Bahrami { ET_SUNWPSEUDO, SOL, MSG_ET_SUNWPSEUDO_DMP },
7394f680cc6SAli Bahrami { 0 }
7404f680cc6SAli Bahrami };
7414f680cc6SAli Bahrami #if ET_LOSUNW != ET_SUNWPSEUDO
7424f680cc6SAli Bahrami error "ET_LOSUNW has grown. Update type_osabi[]"
7434f680cc6SAli Bahrami #endif
7444f680cc6SAli Bahrami static const conv_ds_vd2_t ds_type_osabi_cf = {
7454f680cc6SAli Bahrami CONV_DS_VD2, ET_LOOS, ET_HIOS, type_osabi_cf };
7464f680cc6SAli Bahrami static const conv_ds_vd2_t ds_type_osabi_nf = {
7474f680cc6SAli Bahrami CONV_DS_VD2, ET_LOOS, ET_HIOS, type_osabi_nf };
7484f680cc6SAli Bahrami static const conv_ds_vd2_t ds_type_osabi_dmp = {
7494f680cc6SAli Bahrami CONV_DS_VD2, ET_LOOS, ET_HIOS, type_osabi_dmp };
7504f680cc6SAli Bahrami
7514f680cc6SAli Bahrami
7524f680cc6SAli Bahrami /* Build NULL terminated return arrays for each string style */
753e6d6d618SToomas Soome static const conv_ds_t *ds_cf[] = {
7544f680cc6SAli Bahrami CONV_DS_ADDR(ds_type_cf), CONV_DS_ADDR(ds_type_osabi_cf),
7554f680cc6SAli Bahrami NULL };
7564f680cc6SAli Bahrami static const conv_ds_t *ds_nf[] = {
7574f680cc6SAli Bahrami CONV_DS_ADDR(ds_type_nf), CONV_DS_ADDR(ds_type_osabi_nf),
7584f680cc6SAli Bahrami NULL };
7594f680cc6SAli Bahrami static const conv_ds_t *ds_dmp[] = {
7604f680cc6SAli Bahrami CONV_DS_ADDR(ds_type_dmp), CONV_DS_ADDR(ds_type_osabi_dmp),
7614f680cc6SAli Bahrami NULL };
7624f680cc6SAli Bahrami
7634f680cc6SAli Bahrami /* Select the strings to use */
764d29b2c44Sab196087 switch (CONV_TYPE_FMT_ALT(fmt_flags)) {
765d29b2c44Sab196087 case CONV_FMT_ALT_DUMP:
7664f680cc6SAli Bahrami return (ds_dmp);
7674f680cc6SAli Bahrami case CONV_FMT_ALT_NF:
7684f680cc6SAli Bahrami return (ds_nf);
769d29b2c44Sab196087 }
770d29b2c44Sab196087
7714f680cc6SAli Bahrami return (ds_cf);
7727c478bd9Sstevel@tonic-gate
7734f680cc6SAli Bahrami #undef SOL
7744f680cc6SAli Bahrami }
775c13de8f6Sab196087
7765aefb655Srie const char *
conv_ehdr_type(uchar_t osabi,Half etype,Conv_fmt_flags_t fmt_flags,Conv_inv_buf_t * inv_buf)7774f680cc6SAli Bahrami conv_ehdr_type(uchar_t osabi, Half etype, Conv_fmt_flags_t fmt_flags,
7784f680cc6SAli Bahrami Conv_inv_buf_t *inv_buf)
7795aefb655Srie {
7804f680cc6SAli Bahrami return (conv_map_ds(osabi, EM_NONE, etype,
7814f680cc6SAli Bahrami ehdr_type_strings(fmt_flags), fmt_flags, inv_buf));
7824f680cc6SAli Bahrami }
7837c478bd9Sstevel@tonic-gate
7844f680cc6SAli 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)7854f680cc6SAli Bahrami conv_iter_ehdr_type(conv_iter_osabi_t osabi, Conv_fmt_flags_t fmt_flags,
7864f680cc6SAli Bahrami conv_iter_cb_t func, void *uvalue)
7874f680cc6SAli Bahrami {
7884f680cc6SAli Bahrami return (conv_iter_ds(osabi, EM_NONE,
7894f680cc6SAli Bahrami ehdr_type_strings(fmt_flags), func, uvalue));
7904f680cc6SAli Bahrami }
7914f680cc6SAli Bahrami
7924f680cc6SAli Bahrami static const conv_ds_t **
ehdr_vers_strings(Conv_fmt_flags_t fmt_flags)7934f680cc6SAli Bahrami ehdr_vers_strings(Conv_fmt_flags_t fmt_flags)
7944f680cc6SAli Bahrami {
7954f680cc6SAli Bahrami static const Msg versions_cf[] = {
7964f680cc6SAli Bahrami MSG_EV_NONE_CF, MSG_EV_CURRENT_CF
7974f680cc6SAli Bahrami };
7984f680cc6SAli Bahrami static const Msg versions_nf[] = {
7994f680cc6SAli Bahrami MSG_EV_NONE_NF, MSG_EV_CURRENT_NF
8004f680cc6SAli Bahrami };
8014f680cc6SAli Bahrami static const Msg versions_dmp[] = {
8024f680cc6SAli Bahrami MSG_EV_NONE_DMP, MSG_EV_CURRENT_DMP
8034f680cc6SAli Bahrami };
8044f680cc6SAli Bahrami #if EV_NUM != 2
8054f680cc6SAli Bahrami error "EV_NUM has grown. Update versions[]"
8064f680cc6SAli Bahrami #endif
8074f680cc6SAli Bahrami static const conv_ds_msg_t ds_versions_cf = {
8084f680cc6SAli Bahrami CONV_DS_MSG_INIT(EV_NONE, versions_cf) };
8094f680cc6SAli Bahrami static const conv_ds_msg_t ds_versions_nf = {
8104f680cc6SAli Bahrami CONV_DS_MSG_INIT(EV_NONE, versions_nf) };
8114f680cc6SAli Bahrami static const conv_ds_msg_t ds_versions_dmp = {
8124f680cc6SAli Bahrami CONV_DS_MSG_INIT(EV_NONE, versions_dmp) };
8134f680cc6SAli Bahrami
8144f680cc6SAli Bahrami /* Build NULL terminated return arrays for each string style */
815e6d6d618SToomas Soome static const conv_ds_t *ds_cf[] = {
8164f680cc6SAli Bahrami CONV_DS_ADDR(ds_versions_cf), NULL };
8174f680cc6SAli Bahrami static const conv_ds_t *ds_nf[] = {
8184f680cc6SAli Bahrami CONV_DS_ADDR(ds_versions_nf), NULL };
8194f680cc6SAli Bahrami static const conv_ds_t *ds_dmp[] = {
8204f680cc6SAli Bahrami CONV_DS_ADDR(ds_versions_dmp), NULL };
8214f680cc6SAli Bahrami
8224f680cc6SAli Bahrami /* Select the strings to use */
823d29b2c44Sab196087 switch (CONV_TYPE_FMT_ALT(fmt_flags)) {
824d29b2c44Sab196087 case CONV_FMT_ALT_DUMP:
8254f680cc6SAli Bahrami return (ds_dmp);
8264f680cc6SAli Bahrami case CONV_FMT_ALT_NF:
8274f680cc6SAli Bahrami return (ds_nf);
828c13de8f6Sab196087 }
829c13de8f6Sab196087
8304f680cc6SAli Bahrami return (ds_cf);
8317c478bd9Sstevel@tonic-gate }
8327c478bd9Sstevel@tonic-gate
8335aefb655Srie const char *
conv_ehdr_vers(Word version,Conv_fmt_flags_t fmt_flags,Conv_inv_buf_t * inv_buf)834d29b2c44Sab196087 conv_ehdr_vers(Word version, Conv_fmt_flags_t fmt_flags,
835d29b2c44Sab196087 Conv_inv_buf_t *inv_buf)
8365aefb655Srie {
8374f680cc6SAli Bahrami return (conv_map_ds(ELFOSABI_NONE, EM_NONE, version,
8384f680cc6SAli Bahrami ehdr_vers_strings(fmt_flags), fmt_flags, inv_buf));
839d29b2c44Sab196087 }
840d29b2c44Sab196087
8414f680cc6SAli Bahrami conv_iter_ret_t
conv_iter_ehdr_vers(Conv_fmt_flags_t fmt_flags,conv_iter_cb_t func,void * uvalue)8424f680cc6SAli Bahrami conv_iter_ehdr_vers(Conv_fmt_flags_t fmt_flags, conv_iter_cb_t func,
8434f680cc6SAli Bahrami void *uvalue)
8444f680cc6SAli Bahrami {
8454f680cc6SAli Bahrami return (conv_iter_ds(ELFOSABI_NONE, EM_NONE,
8464f680cc6SAli Bahrami ehdr_vers_strings(fmt_flags), func, uvalue));
8477c478bd9Sstevel@tonic-gate }
8487c478bd9Sstevel@tonic-gate
8494f680cc6SAli 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)8504f680cc6SAli Bahrami conv_ehdr_sparc_flags_strings(Conv_fmt_flags_t fmt_flags,
8514f680cc6SAli Bahrami const conv_ds_msg_t **mm_msg, const Val_desc **flag_desc)
8524f680cc6SAli Bahrami {
853ba4e3c84Sab196087 #define EFLAGSZ CONV_EXPN_FIELD_DEF_PREFIX_SIZE + \
8544f680cc6SAli Bahrami MSG_EF_SPARCV9_TSO_CF_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
8554f680cc6SAli Bahrami MSG_EF_SPARC_SUN_US1_CF_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
8564f680cc6SAli Bahrami MSG_EF_SPARC_HAL_R1_CF_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
8574f680cc6SAli Bahrami MSG_EF_SPARC_SUN_US3_CF_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
858de777a60Sab196087 CONV_INV_BUFSIZE + CONV_EXPN_FIELD_DEF_SUFFIX_SIZE
859de777a60Sab196087
860de777a60Sab196087 /*
861de777a60Sab196087 * Ensure that Conv_ehdr_flags_buf_t is large enough:
862de777a60Sab196087 *
8634f680cc6SAli Bahrami * EFLAGSZ is the real minimum size of the buffer required by
8644f680cc6SAli Bahrami * conv_ehdr_flags(). However, Conv_ehdr_flags_buf_t uses
8654f680cc6SAli Bahrami * CONV_EHDR_FLAG_BUFSIZE to set the buffer size. We do things
8664f680cc6SAli Bahrami * this way because the definition of EFLAGSZ uses information
8674f680cc6SAli Bahrami * that is not available in the environment of other programs
868de777a60Sab196087 * that include the conv.h header file.
869de777a60Sab196087 */
8706a074c93Sab196087 #if (CONV_EHDR_FLAGS_BUFSIZE != EFLAGSZ) && !defined(__lint)
8716a074c93Sab196087 #define REPORT_BUFSIZE EFLAGSZ
8726a074c93Sab196087 #include "report_bufsize.h"
8736a074c93Sab196087 #error "CONV_EHDR_FLAGS_BUFSIZE does not match EFLAGSZ"
874de777a60Sab196087 #endif
8757c478bd9Sstevel@tonic-gate
8764f680cc6SAli Bahrami static const Msg mm_flags_cf[] = {
8774f680cc6SAli Bahrami MSG_EF_SPARCV9_TSO_CF, MSG_EF_SPARCV9_PSO_CF,
8784f680cc6SAli Bahrami MSG_EF_SPARCV9_RMO_CF
8794f680cc6SAli Bahrami };
8804f680cc6SAli Bahrami static const Msg mm_flags_nf[] = {
8814f680cc6SAli Bahrami MSG_EF_SPARCV9_TSO_NF, MSG_EF_SPARCV9_PSO_NF,
8824f680cc6SAli Bahrami MSG_EF_SPARCV9_RMO_NF
8834f680cc6SAli Bahrami };
8844f680cc6SAli Bahrami static const conv_ds_msg_t ds_mm_flags_cf = {
8854f680cc6SAli Bahrami CONV_DS_MSG_INIT(EF_SPARCV9_TSO, mm_flags_cf) };
8864f680cc6SAli Bahrami static const conv_ds_msg_t ds_mm_flags_nf = {
8874f680cc6SAli Bahrami CONV_DS_MSG_INIT(EF_SPARCV9_TSO, mm_flags_nf) };
8884f680cc6SAli Bahrami
8894f680cc6SAli Bahrami
8904f680cc6SAli Bahrami static const Val_desc vda_cf[] = {
8914f680cc6SAli Bahrami { EF_SPARC_32PLUS, MSG_EF_SPARC_32PLUS_CF },
8924f680cc6SAli Bahrami { EF_SPARC_SUN_US1, MSG_EF_SPARC_SUN_US1_CF },
8934f680cc6SAli Bahrami { EF_SPARC_HAL_R1, MSG_EF_SPARC_HAL_R1_CF },
8944f680cc6SAli Bahrami { EF_SPARC_SUN_US3, MSG_EF_SPARC_SUN_US3_CF },
8954f680cc6SAli Bahrami { 0 }
8964f680cc6SAli Bahrami };
8974f680cc6SAli Bahrami static const Val_desc vda_nf[] = {
8984f680cc6SAli Bahrami { EF_SPARC_32PLUS, MSG_EF_SPARC_32PLUS_NF },
8994f680cc6SAli Bahrami { EF_SPARC_SUN_US1, MSG_EF_SPARC_SUN_US1_NF },
9004f680cc6SAli Bahrami { EF_SPARC_HAL_R1, MSG_EF_SPARC_HAL_R1_NF },
9014f680cc6SAli Bahrami { EF_SPARC_SUN_US3, MSG_EF_SPARC_SUN_US3_NF },
9024f680cc6SAli Bahrami { 0 }
9034f680cc6SAli Bahrami };
9044f680cc6SAli Bahrami
9054f680cc6SAli Bahrami switch (CONV_TYPE_FMT_ALT(fmt_flags)) {
9064f680cc6SAli Bahrami default:
9074f680cc6SAli Bahrami *mm_msg = &ds_mm_flags_cf;
9084f680cc6SAli Bahrami *flag_desc = vda_cf;
9094f680cc6SAli Bahrami break;
9104f680cc6SAli Bahrami case CONV_FMT_ALT_NF:
9114f680cc6SAli Bahrami *mm_msg = &ds_mm_flags_nf;
9124f680cc6SAli Bahrami *flag_desc = vda_nf;
9134f680cc6SAli Bahrami break;
9144f680cc6SAli Bahrami }
9154f680cc6SAli Bahrami }
9164f680cc6SAli Bahrami
9177c478bd9Sstevel@tonic-gate /*
9185aefb655Srie * Make a string representation of the e_flags field.
9197c478bd9Sstevel@tonic-gate */
9207c478bd9Sstevel@tonic-gate const char *
conv_ehdr_flags(Half mach,Word flags,Conv_fmt_flags_t fmt_flags,Conv_ehdr_flags_buf_t * flags_buf)921d29b2c44Sab196087 conv_ehdr_flags(Half mach, Word flags, Conv_fmt_flags_t fmt_flags,
922d29b2c44Sab196087 Conv_ehdr_flags_buf_t *flags_buf)
9237c478bd9Sstevel@tonic-gate {
924ba4e3c84Sab196087 static const char *leading_str_arr[2];
925de777a60Sab196087 static CONV_EXPN_FIELD_ARG conv_arg = {
9264f680cc6SAli Bahrami NULL, sizeof (flags_buf->buf), leading_str_arr };
927ba4e3c84Sab196087
9284f680cc6SAli Bahrami const char **lstr;
9294f680cc6SAli Bahrami const conv_ds_msg_t *mm_msg;
9304f680cc6SAli Bahrami const Val_desc *vdp;
9314f680cc6SAli Bahrami Word mm;
932de777a60Sab196087
9337c478bd9Sstevel@tonic-gate /*
9345aefb655Srie * Non-SPARC architectures presently provide no known flags.
9357c478bd9Sstevel@tonic-gate */
9364f680cc6SAli Bahrami if ((mach != EM_SPARCV9) && (((mach != EM_SPARC) &&
9374f680cc6SAli Bahrami (mach != EM_SPARC32PLUS)) || (flags == 0)))
9384f680cc6SAli Bahrami return (conv_invalid_val(&flags_buf->inv_buf, flags,
9394f680cc6SAli Bahrami CONV_FMT_DECIMAL));
9407c478bd9Sstevel@tonic-gate
9414f680cc6SAli Bahrami conv_arg.buf = flags_buf->buf;
9424f680cc6SAli Bahrami conv_ehdr_sparc_flags_strings(fmt_flags, &mm_msg, &vdp);
943ba4e3c84Sab196087 conv_arg.oflags = conv_arg.rflags = flags;
9444f680cc6SAli Bahrami
9454f680cc6SAli Bahrami mm = flags & EF_SPARCV9_MM;
9464f680cc6SAli Bahrami lstr = leading_str_arr;
9474f680cc6SAli Bahrami if ((mach == EM_SPARCV9) && (mm <= mm_msg->ds_topval)) {
9484f680cc6SAli Bahrami *lstr++ = MSG_ORIG(mm_msg->ds_msg[mm]);
949ba4e3c84Sab196087 conv_arg.rflags &= ~EF_SPARCV9_MM;
9507c478bd9Sstevel@tonic-gate }
951ba4e3c84Sab196087 *lstr = NULL;
9527c478bd9Sstevel@tonic-gate
9534f680cc6SAli Bahrami (void) conv_expn_field(&conv_arg, vdp, fmt_flags);
9547c478bd9Sstevel@tonic-gate
955de777a60Sab196087 return (conv_arg.buf);
9567c478bd9Sstevel@tonic-gate }
957de777a60Sab196087
9584f680cc6SAli Bahrami conv_iter_ret_t
conv_iter_ehdr_flags(Half mach,Conv_fmt_flags_t fmt_flags,conv_iter_cb_t func,void * uvalue)9594f680cc6SAli Bahrami conv_iter_ehdr_flags(Half mach, Conv_fmt_flags_t fmt_flags, conv_iter_cb_t func,
9604f680cc6SAli Bahrami void *uvalue)
9614f680cc6SAli Bahrami {
9624f680cc6SAli Bahrami
9634f680cc6SAli Bahrami if ((mach == EM_SPARCV9) || (mach == EM_SPARC) ||
9644f680cc6SAli Bahrami (mach == EM_SPARC32PLUS) || (mach == CONV_MACH_ALL)) {
9654f680cc6SAli Bahrami const conv_ds_msg_t *ds_msg_mm;
9664f680cc6SAli Bahrami const Val_desc *vdp;
9674f680cc6SAli Bahrami
9684f680cc6SAli Bahrami conv_ehdr_sparc_flags_strings(fmt_flags, &ds_msg_mm, &vdp);
9694f680cc6SAli Bahrami
9704f680cc6SAli Bahrami if (mach == EM_SPARCV9) {
9714f680cc6SAli Bahrami const conv_ds_t *ds[2];
9724f680cc6SAli Bahrami
9734f680cc6SAli Bahrami ds[0] = CONV_DS_ADDR(ds_msg_mm);
9744f680cc6SAli Bahrami ds[1] = NULL;
9754f680cc6SAli Bahrami
9764f680cc6SAli Bahrami if (conv_iter_ds(ELFOSABI_NONE, mach, ds,
9774f680cc6SAli Bahrami func, uvalue) == CONV_ITER_DONE)
9784f680cc6SAli Bahrami return (CONV_ITER_DONE);
9794f680cc6SAli Bahrami }
9804f680cc6SAli Bahrami
9814f680cc6SAli Bahrami return (conv_iter_vd(vdp, func, uvalue));
9824f680cc6SAli Bahrami }
9834f680cc6SAli Bahrami
9844f680cc6SAli Bahrami return (CONV_ITER_CONT);
9854f680cc6SAli Bahrami }
9864f680cc6SAli Bahrami
9874f680cc6SAli Bahrami static const conv_ds_t **
ehdr_osabi_strings(Conv_fmt_flags_t fmt_flags)9884f680cc6SAli Bahrami ehdr_osabi_strings(Conv_fmt_flags_t fmt_flags)
9894f680cc6SAli Bahrami {
9904f680cc6SAli Bahrami
9914f680cc6SAli Bahrami static const Msg osabi_0_3_cf[] = {
9924f680cc6SAli Bahrami MSG_OSABI_NONE_CF, MSG_OSABI_HPUX_CF,
9934f680cc6SAli Bahrami MSG_OSABI_NETBSD_CF, MSG_OSABI_LINUX_CF
9944f680cc6SAli Bahrami };
9954f680cc6SAli Bahrami static const Msg osabi_0_3_nf[] = {
9964f680cc6SAli Bahrami MSG_OSABI_NONE_NF, MSG_OSABI_HPUX_NF,
9974f680cc6SAli Bahrami MSG_OSABI_NETBSD_NF, MSG_OSABI_LINUX_NF
9984f680cc6SAli Bahrami };
9994f680cc6SAli Bahrami static const Msg osabi_0_3_dmp[] = {
10004f680cc6SAli Bahrami MSG_OSABI_NONE_DMP, MSG_OSABI_HPUX_DMP,
10014f680cc6SAli Bahrami MSG_OSABI_NETBSD_DMP, MSG_OSABI_LINUX_DMP
10024f680cc6SAli Bahrami };
10034f680cc6SAli Bahrami static const conv_ds_msg_t ds_osabi_0_3_cf = {
10044f680cc6SAli Bahrami CONV_DS_MSG_INIT(ELFOSABI_NONE, osabi_0_3_cf) };
10054f680cc6SAli Bahrami static const conv_ds_msg_t ds_osabi_0_3_nf = {
10064f680cc6SAli Bahrami CONV_DS_MSG_INIT(ELFOSABI_NONE, osabi_0_3_nf) };
10074f680cc6SAli Bahrami static const conv_ds_msg_t ds_osabi_0_3_dmp = {
10084f680cc6SAli Bahrami CONV_DS_MSG_INIT(ELFOSABI_NONE, osabi_0_3_dmp) };
10094f680cc6SAli Bahrami
10104f680cc6SAli Bahrami
1011*c4397e61SRobert Mustacchi static const Msg osabi_6_18_cf[] = {
10124f680cc6SAli Bahrami MSG_OSABI_SOLARIS_CF, MSG_OSABI_AIX_CF,
10134f680cc6SAli Bahrami MSG_OSABI_IRIX_CF, MSG_OSABI_FREEBSD_CF,
10144f680cc6SAli Bahrami MSG_OSABI_TRU64_CF, MSG_OSABI_MODESTO_CF,
10154f680cc6SAli Bahrami MSG_OSABI_OPENBSD_CF, MSG_OSABI_OPENVMS_CF,
1016*c4397e61SRobert Mustacchi MSG_OSABI_NSK_CF, MSG_OSABI_AROS_CF,
1017*c4397e61SRobert Mustacchi MSG_OSABI_FENIXOS_CF, MSG_OSABI_CLOUDABI_CF,
1018*c4397e61SRobert Mustacchi MSG_OSABI_OPENVOS_CF
10194f680cc6SAli Bahrami };
1020*c4397e61SRobert Mustacchi static const Msg osabi_6_18_nf[] = {
10214f680cc6SAli Bahrami MSG_OSABI_SOLARIS_NF, MSG_OSABI_AIX_NF,
10224f680cc6SAli Bahrami MSG_OSABI_IRIX_NF, MSG_OSABI_FREEBSD_NF,
10234f680cc6SAli Bahrami MSG_OSABI_TRU64_NF, MSG_OSABI_MODESTO_NF,
10244f680cc6SAli Bahrami MSG_OSABI_OPENBSD_NF, MSG_OSABI_OPENVMS_NF,
1025*c4397e61SRobert Mustacchi MSG_OSABI_NSK_NF, MSG_OSABI_AROS_NF,
1026*c4397e61SRobert Mustacchi MSG_OSABI_FENIXOS_NF, MSG_OSABI_CLOUDABI_NF,
1027*c4397e61SRobert Mustacchi MSG_OSABI_OPENVOS_NF
10284f680cc6SAli Bahrami };
1029*c4397e61SRobert Mustacchi static const Msg osabi_6_18_dmp[] = {
10304f680cc6SAli Bahrami MSG_OSABI_SOLARIS_DMP, MSG_OSABI_AIX_DMP,
10314f680cc6SAli Bahrami MSG_OSABI_IRIX_DMP, MSG_OSABI_FREEBSD_DMP,
10324f680cc6SAli Bahrami MSG_OSABI_TRU64_DMP, MSG_OSABI_MODESTO_DMP,
10334f680cc6SAli Bahrami MSG_OSABI_OPENBSD_DMP, MSG_OSABI_OPENVMS_DMP,
1034*c4397e61SRobert Mustacchi MSG_OSABI_NSK_DMP, MSG_OSABI_AROS_DMP,
1035*c4397e61SRobert Mustacchi MSG_OSABI_FENIXOS_DMP, MSG_OSABI_CLOUDABI_DMP,
1036*c4397e61SRobert Mustacchi MSG_OSABI_OPENVOS_DMP
10374f680cc6SAli Bahrami };
1038*c4397e61SRobert Mustacchi static const conv_ds_msg_t ds_osabi_6_18_cf = {
1039*c4397e61SRobert Mustacchi CONV_DS_MSG_INIT(ELFOSABI_SOLARIS, osabi_6_18_cf) };
1040*c4397e61SRobert Mustacchi static const conv_ds_msg_t ds_osabi_6_18_nf = {
1041*c4397e61SRobert Mustacchi CONV_DS_MSG_INIT(ELFOSABI_SOLARIS, osabi_6_18_nf) };
1042*c4397e61SRobert Mustacchi static const conv_ds_msg_t ds_osabi_6_18_dmp = {
1043*c4397e61SRobert Mustacchi CONV_DS_MSG_INIT(ELFOSABI_SOLARIS, osabi_6_18_dmp) };
10444f680cc6SAli Bahrami
10454f680cc6SAli Bahrami
10464f680cc6SAli Bahrami static const Val_desc osabi_misc_cf[] = {
10474f680cc6SAli Bahrami { ELFOSABI_ARM, MSG_OSABI_ARM_CF },
10484f680cc6SAli Bahrami { ELFOSABI_STANDALONE, MSG_OSABI_STANDALONE_CF },
10494f680cc6SAli Bahrami { 0 }
10504f680cc6SAli Bahrami };
10514f680cc6SAli Bahrami static const Val_desc osabi_misc_nf[] = {
10524f680cc6SAli Bahrami { ELFOSABI_ARM, MSG_OSABI_ARM_NF },
10534f680cc6SAli Bahrami { ELFOSABI_STANDALONE, MSG_OSABI_STANDALONE_NF },
10544f680cc6SAli Bahrami { 0 }
10554f680cc6SAli Bahrami };
10564f680cc6SAli Bahrami static const Val_desc osabi_misc_dmp[] = {
10574f680cc6SAli Bahrami { ELFOSABI_ARM, MSG_OSABI_ARM_DMP },
10584f680cc6SAli Bahrami { ELFOSABI_STANDALONE, MSG_OSABI_STANDALONE_DMP },
10594f680cc6SAli Bahrami { 0 }
10604f680cc6SAli Bahrami };
10614f680cc6SAli Bahrami static const conv_ds_vd_t ds_osabi_misc_cf = {
10624f680cc6SAli Bahrami CONV_DS_VD, ELFOSABI_ARM, ELFOSABI_STANDALONE, osabi_misc_cf };
10634f680cc6SAli Bahrami static const conv_ds_vd_t ds_osabi_misc_nf = {
10644f680cc6SAli Bahrami CONV_DS_VD, ELFOSABI_ARM, ELFOSABI_STANDALONE, osabi_misc_nf };
10654f680cc6SAli Bahrami static const conv_ds_vd_t ds_osabi_misc_dmp = {
10664f680cc6SAli Bahrami CONV_DS_VD, ELFOSABI_ARM, ELFOSABI_STANDALONE, osabi_misc_dmp };
10674f680cc6SAli Bahrami
10684f680cc6SAli Bahrami /* Build NULL terminated return arrays for each string style */
1069e6d6d618SToomas Soome static const conv_ds_t *ds_cf[] = {
1070*c4397e61SRobert Mustacchi CONV_DS_ADDR(ds_osabi_0_3_cf), CONV_DS_ADDR(ds_osabi_6_18_cf),
10714f680cc6SAli Bahrami CONV_DS_ADDR(ds_osabi_misc_cf), NULL };
1072e6d6d618SToomas Soome static const conv_ds_t *ds_nf[] = {
1073*c4397e61SRobert Mustacchi CONV_DS_ADDR(ds_osabi_0_3_nf), CONV_DS_ADDR(ds_osabi_6_18_nf),
10744f680cc6SAli Bahrami CONV_DS_ADDR(ds_osabi_misc_nf), NULL };
1075e6d6d618SToomas Soome static const conv_ds_t *ds_dmp[] = {
1076*c4397e61SRobert Mustacchi CONV_DS_ADDR(ds_osabi_0_3_dmp), CONV_DS_ADDR(ds_osabi_6_18_dmp),
10774f680cc6SAli Bahrami CONV_DS_ADDR(ds_osabi_misc_dmp), NULL };
10784f680cc6SAli Bahrami
10794f680cc6SAli Bahrami /* Select the strings to use */
10804f680cc6SAli Bahrami switch (CONV_TYPE_FMT_ALT(fmt_flags)) {
10814f680cc6SAli Bahrami case CONV_FMT_ALT_DUMP:
10824f680cc6SAli Bahrami return (ds_dmp);
10834f680cc6SAli Bahrami case CONV_FMT_ALT_NF:
10844f680cc6SAli Bahrami return (ds_nf);
10854f680cc6SAli Bahrami }
10864f680cc6SAli Bahrami
10874f680cc6SAli Bahrami return (ds_cf);
10885aefb655Srie }
10897c478bd9Sstevel@tonic-gate
10907c478bd9Sstevel@tonic-gate /*
10913244bcaaSab196087 * Make a string representation of the e_ident[EI_OSABI] field.
10923244bcaaSab196087 */
10933244bcaaSab196087 const char *
conv_ehdr_osabi(uchar_t osabi,Conv_fmt_flags_t fmt_flags,Conv_inv_buf_t * inv_buf)1094d29b2c44Sab196087 conv_ehdr_osabi(uchar_t osabi, Conv_fmt_flags_t fmt_flags,
1095d29b2c44Sab196087 Conv_inv_buf_t *inv_buf)
10963244bcaaSab196087 {
10974f680cc6SAli Bahrami return (conv_map_ds(ELFOSABI_NONE, EM_NONE, osabi,
10984f680cc6SAli Bahrami ehdr_osabi_strings(fmt_flags), fmt_flags, inv_buf));
10994f680cc6SAli Bahrami }
11004f680cc6SAli Bahrami
11014f680cc6SAli Bahrami conv_iter_ret_t
conv_iter_ehdr_osabi(Conv_fmt_flags_t fmt_flags,conv_iter_cb_t func,void * uvalue)11024f680cc6SAli Bahrami conv_iter_ehdr_osabi(Conv_fmt_flags_t fmt_flags, conv_iter_cb_t func,
11034f680cc6SAli Bahrami void *uvalue)
11044f680cc6SAli Bahrami {
11054f680cc6SAli Bahrami if (conv_iter_ds(ELFOSABI_NONE, EM_NONE, ehdr_osabi_strings(fmt_flags),
11064f680cc6SAli Bahrami func, uvalue) == CONV_ITER_DONE)
11074f680cc6SAli Bahrami return (CONV_ITER_DONE);
11084f680cc6SAli Bahrami
11094f680cc6SAli Bahrami /*
11104f680cc6SAli Bahrami * ELFOSABI_NONE might have been better named ELFOSABI_SYSV. For the
11114f680cc6SAli Bahrami * CF and NF sytles, we supply that name for 0 in addition to NONE.
11124f680cc6SAli Bahrami */
11134f680cc6SAli Bahrami switch (CONV_TYPE_FMT_ALT(fmt_flags)) {
11144f680cc6SAli Bahrami case CONV_FMT_ALT_CF:
11154f680cc6SAli Bahrami return ((* func)(MSG_ORIG(MSG_OSABI_SYSV_CF),
11164f680cc6SAli Bahrami ELFOSABI_NONE, uvalue));
11174f680cc6SAli Bahrami case CONV_FMT_ALT_NF:
11184f680cc6SAli Bahrami return ((* func)(MSG_ORIG(MSG_OSABI_SYSV_NF),
11194f680cc6SAli Bahrami ELFOSABI_NONE, uvalue));
11204f680cc6SAli Bahrami }
11214f680cc6SAli Bahrami
11224f680cc6SAli Bahrami return (CONV_ITER_CONT);
11234f680cc6SAli Bahrami }
11244f680cc6SAli Bahrami
11254f680cc6SAli Bahrami static const conv_ds_t **
ehdr_abivers_strings(conv_iter_osabi_t osabi,Conv_fmt_flags_t fmt_flags)11264f680cc6SAli Bahrami ehdr_abivers_strings(conv_iter_osabi_t osabi, Conv_fmt_flags_t fmt_flags)
11274f680cc6SAli Bahrami {
11284f680cc6SAli Bahrami static const Msg abiversions_cf[] = {
11294f680cc6SAli Bahrami MSG_EAV_SUNW_NONE_CF, MSG_EAV_SUNW_CURRENT_CF
11303244bcaaSab196087 };
11314f680cc6SAli Bahrami static const Msg abiversions_nf[] = {
11324f680cc6SAli Bahrami MSG_EAV_SUNW_NONE_NF, MSG_EAV_SUNW_CURRENT_NF
11333244bcaaSab196087 };
11344f680cc6SAli Bahrami #if EAV_SUNW_NUM != 2
11354f680cc6SAli Bahrami error "EAV_SUNW_NUM has grown. Update abiversions[]"
11364f680cc6SAli Bahrami #endif
11374f680cc6SAli Bahrami static const conv_ds_msg_t ds_abiversions_cf = {
11384f680cc6SAli Bahrami CONV_DS_MSG_INIT(EV_NONE, abiversions_cf) };
11394f680cc6SAli Bahrami static const conv_ds_msg_t ds_abiversions_nf = {
11404f680cc6SAli Bahrami CONV_DS_MSG_INIT(EV_NONE, abiversions_nf) };
11413244bcaaSab196087
11424f680cc6SAli Bahrami /* Build NULL terminated return arrays for each string style */
1143e6d6d618SToomas Soome static const conv_ds_t *ds_cf[] = {
11444f680cc6SAli Bahrami CONV_DS_ADDR(ds_abiversions_cf), NULL };
11454f680cc6SAli Bahrami static const conv_ds_t *ds_nf[] = {
11464f680cc6SAli Bahrami CONV_DS_ADDR(ds_abiversions_nf), NULL };
11473244bcaaSab196087
11484f680cc6SAli Bahrami /* For non-Solaris OSABI, we don't have symbolic names */
11494f680cc6SAli Bahrami static const conv_ds_t *ds_none[] = { NULL };
11503244bcaaSab196087
11513244bcaaSab196087
11524f680cc6SAli Bahrami /*
11534f680cc6SAli Bahrami * Select the strings to use. This is a rare case where
11544f680cc6SAli Bahrami * we don't treat ELFOSABI_NONE and ELFOSABI_SOLARIS
11554f680cc6SAli Bahrami * as the same thing. We should never create a Solaris
11564f680cc6SAli Bahrami * object tagged as ELFOSABI_NONE for which the abiversion
11574f680cc6SAli Bahrami * is non-zero.
11584f680cc6SAli Bahrami */
11594f680cc6SAli Bahrami if ((osabi == ELFOSABI_SOLARIS) || (osabi == CONV_OSABI_ALL))
11604f680cc6SAli Bahrami return ((CONV_TYPE_FMT_ALT(fmt_flags) == CONV_FMT_ALT_NF) ?
11614f680cc6SAli Bahrami ds_nf : ds_cf);
11624f680cc6SAli Bahrami
11634f680cc6SAli Bahrami return (ds_none);
11643244bcaaSab196087 }
11653244bcaaSab196087
11664f680cc6SAli Bahrami const char *
conv_ehdr_abivers(uchar_t osabi,Word version,Conv_fmt_flags_t fmt_flags,Conv_inv_buf_t * inv_buf)11674f680cc6SAli Bahrami conv_ehdr_abivers(uchar_t osabi, Word version, Conv_fmt_flags_t fmt_flags,
11684f680cc6SAli Bahrami Conv_inv_buf_t *inv_buf)
11694f680cc6SAli Bahrami {
11704f680cc6SAli Bahrami return (conv_map_ds(osabi, EM_NONE, version,
11714f680cc6SAli Bahrami ehdr_abivers_strings(osabi, fmt_flags), fmt_flags, inv_buf));
11724f680cc6SAli Bahrami }
11734f680cc6SAli Bahrami
11744f680cc6SAli 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)11754f680cc6SAli Bahrami conv_iter_ehdr_abivers(conv_iter_osabi_t osabi, Conv_fmt_flags_t fmt_flags,
11764f680cc6SAli Bahrami conv_iter_cb_t func, void *uvalue)
11774f680cc6SAli Bahrami {
11784f680cc6SAli Bahrami return (conv_iter_ds(osabi, EM_NONE,
11794f680cc6SAli Bahrami ehdr_abivers_strings(osabi, fmt_flags), func, uvalue));
11803244bcaaSab196087 }
11813244bcaaSab196087
11823244bcaaSab196087 /*
11837c478bd9Sstevel@tonic-gate * A generic means of returning additional information for a rejected file in
11844f680cc6SAli Bahrami * terms of a string. ELFOSABI_SOLARIS is assummed.
11857c478bd9Sstevel@tonic-gate */
11867c478bd9Sstevel@tonic-gate const char *
conv_reject_desc(Rej_desc * rej,Conv_reject_desc_buf_t * reject_desc_buf,Half mach)1187ba2be530Sab196087 conv_reject_desc(Rej_desc * rej, Conv_reject_desc_buf_t *reject_desc_buf,
1188ba2be530Sab196087 Half mach)
11897c478bd9Sstevel@tonic-gate {
11907c478bd9Sstevel@tonic-gate ushort_t type = rej->rej_type;
11917c478bd9Sstevel@tonic-gate uint_t info = rej->rej_info;
11927c478bd9Sstevel@tonic-gate
1193bebb829dSRod Evans switch (type) {
1194bebb829dSRod Evans case SGS_REJ_MACH:
1195de777a60Sab196087 return (conv_ehdr_mach((Half)info, 0,
1196de777a60Sab196087 &reject_desc_buf->inv_buf));
1197bebb829dSRod Evans case SGS_REJ_CLASS:
1198de777a60Sab196087 return (conv_ehdr_class((uchar_t)info, 0,
1199de777a60Sab196087 &reject_desc_buf->inv_buf));
1200bebb829dSRod Evans case SGS_REJ_DATA:
1201de777a60Sab196087 return (conv_ehdr_data((uchar_t)info, 0,
1202de777a60Sab196087 &reject_desc_buf->inv_buf));
1203bebb829dSRod Evans case SGS_REJ_TYPE:
12044f680cc6SAli Bahrami return (conv_ehdr_type(ELFOSABI_SOLARIS, (Half)info, 0,
1205de777a60Sab196087 &reject_desc_buf->inv_buf));
1206bebb829dSRod Evans case SGS_REJ_BADFLAG:
1207bebb829dSRod Evans case SGS_REJ_MISFLAG:
1208bebb829dSRod Evans case SGS_REJ_HAL:
1209bebb829dSRod Evans case SGS_REJ_US3:
1210ba2be530Sab196087 return (conv_ehdr_flags(mach, (Word)info, 0,
1211de777a60Sab196087 &reject_desc_buf->flags_buf));
1212bebb829dSRod Evans case SGS_REJ_UNKFILE:
1213dc0f59e5SAli Bahrami case SGS_REJ_ARCHIVE:
1214dc0f59e5SAli Bahrami return (NULL);
1215bebb829dSRod Evans case SGS_REJ_STR:
1216bebb829dSRod Evans case SGS_REJ_HWCAP_1:
1217bebb829dSRod Evans case SGS_REJ_SFCAP_1:
121808278a5eSRod Evans case SGS_REJ_HWCAP_2:
121908278a5eSRod Evans case SGS_REJ_MACHCAP:
122008278a5eSRod Evans case SGS_REJ_PLATCAP:
12217c478bd9Sstevel@tonic-gate if (rej->rej_str)
12227c478bd9Sstevel@tonic-gate return ((const char *)rej->rej_str);
12237c478bd9Sstevel@tonic-gate else
12247c478bd9Sstevel@tonic-gate return (MSG_ORIG(MSG_STR_EMPTY));
1225bebb829dSRod Evans default:
1226de777a60Sab196087 return (conv_invalid_val(&reject_desc_buf->inv_buf, info,
1227c13de8f6Sab196087 CONV_FMT_DECIMAL));
12287c478bd9Sstevel@tonic-gate }
1229bebb829dSRod Evans }
1230