xref: /illumos-gate/usr/src/cmd/sgs/libconv/common/elf.c (revision ab5344c6)
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