xref: /illumos-gate/usr/src/cmd/sgs/include/conv.h (revision d29b2c44)
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 /*
237c478bd9Sstevel@tonic-gate  *	Copyright (c) 1988 AT&T
247c478bd9Sstevel@tonic-gate  *	  All Rights Reserved
257c478bd9Sstevel@tonic-gate  *
2602ca3e02Srie  * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
275aefb655Srie  * Use is subject to license terms.
287c478bd9Sstevel@tonic-gate  */
297c478bd9Sstevel@tonic-gate 
307c478bd9Sstevel@tonic-gate #ifndef	_CONV_H
317c478bd9Sstevel@tonic-gate #define	_CONV_H
327c478bd9Sstevel@tonic-gate 
337c478bd9Sstevel@tonic-gate #pragma ident	"%Z%%M%	%I%	%E% SMI"
347c478bd9Sstevel@tonic-gate 
357c478bd9Sstevel@tonic-gate /*
367c478bd9Sstevel@tonic-gate  * Global include file for conversion library.
377c478bd9Sstevel@tonic-gate  */
387c478bd9Sstevel@tonic-gate 
397c478bd9Sstevel@tonic-gate #include <stdlib.h>
407c478bd9Sstevel@tonic-gate #include <libelf.h>
417c478bd9Sstevel@tonic-gate #include <dlfcn.h>
427c478bd9Sstevel@tonic-gate #include <libld.h>
437c478bd9Sstevel@tonic-gate #include <sgs.h>
447c478bd9Sstevel@tonic-gate #include <machdep.h>
457c478bd9Sstevel@tonic-gate 
467c478bd9Sstevel@tonic-gate #ifdef	__cplusplus
477c478bd9Sstevel@tonic-gate extern "C" {
487c478bd9Sstevel@tonic-gate #endif
497c478bd9Sstevel@tonic-gate 
507c478bd9Sstevel@tonic-gate /*
517c478bd9Sstevel@tonic-gate  * Configuration features available - maintained here (instead of debug.h)
527c478bd9Sstevel@tonic-gate  * to save libconv from having to include debug.h which results in numerous
537c478bd9Sstevel@tonic-gate  * "declared but not used or defined" lint errors.
547c478bd9Sstevel@tonic-gate  */
557c478bd9Sstevel@tonic-gate #define	CONF_EDLIBPATH	0x000100	/* ELF default library path */
567c478bd9Sstevel@tonic-gate #define	CONF_ESLIBPATH	0x000200	/* ELF secure library path */
577c478bd9Sstevel@tonic-gate #define	CONF_ADLIBPATH	0x000400	/* AOUT default library path */
587c478bd9Sstevel@tonic-gate #define	CONF_ASLIBPATH	0x000800	/* AOUT secure library path */
597c478bd9Sstevel@tonic-gate #define	CONF_DIRCFG	0x001000	/* directory configuration available */
607c478bd9Sstevel@tonic-gate #define	CONF_OBJALT	0x002000	/* object alternatives available */
617c478bd9Sstevel@tonic-gate #define	CONF_MEMRESV	0x004000	/* memory reservation required */
627c478bd9Sstevel@tonic-gate #define	CONF_ENVS	0x008000	/* environment variables available */
637c478bd9Sstevel@tonic-gate #define	CONF_FLTR	0x010000	/* filter information available */
647c478bd9Sstevel@tonic-gate #define	CONF_FEATMSK	0xffff00
657c478bd9Sstevel@tonic-gate 
667c478bd9Sstevel@tonic-gate /*
67de777a60Sab  * Buffer types:
68de777a60Sab  *
69de777a60Sab  * Many of the routines in this module require the user to supply a
70de777a60Sab  * buffer into which the desired strings may be written. These are
71de777a60Sab  * all arrays of characters, and might be defined as simple arrays
72de777a60Sab  * of char. The problem with that approach is that when such an array
73de777a60Sab  * is passed to a function, the C language considers it to have the
74de777a60Sab  * type (char *), without any regard to its length. Not all of our
75de777a60Sab  * buffers have the same length, and we want to ensure that the compiler
76de777a60Sab  * will refuse to compile code that passes the wrong type of buffer to
77de777a60Sab  * a given routine. The solution is to define the buffers as unions
78de777a60Sab  * that contain the needed array, and then to pass the given union
79de777a60Sab  * by address. The compiler will catch attempts to pass the wrong type
80de777a60Sab  * of pointer, and the size of a structure/union is implicit in its type.
81de777a60Sab  *
82de777a60Sab  * A nice side effect of this approach is that we can use a union with
83de777a60Sab  * multiple buffers to handle the cases where a given routine needs
84de777a60Sab  * more than one type of buffer. The end result is a single buffer large
85de777a60Sab  * enough to handle any of the subcases, but no larger.
86de777a60Sab  */
87de777a60Sab 
88de777a60Sab /*
89de777a60Sab  * Size of buffer used by conv_invalid_val():
90de777a60Sab  *
915aefb655Srie  * Various values that can't be matched to a symbolic definition are converted
92de777a60Sab  * to a numeric string.
935aefb655Srie  *
94de777a60Sab  * The buffer size reflects the maximum number of digits needed to
95de777a60Sab  * display an integer as text, plus a trailing null, and with room for
96de777a60Sab  * a leading "0x" if hexidecimal display is selected.
97de777a60Sab  */
98de777a60Sab #define	CONV32_INV_BUFSIZE	12
99de777a60Sab typedef union {
100de777a60Sab 	char			buf[CONV32_INV_BUFSIZE];
101de777a60Sab } Conv32_inv_buf_t;
102de777a60Sab 
103de777a60Sab #define	CONV64_INV_BUFSIZE	22
104de777a60Sab typedef union {
105de777a60Sab 	char			buf[CONV64_INV_BUFSIZE];
106de777a60Sab } Conv64_inv_buf_t;
107de777a60Sab 
108de777a60Sab 
109de777a60Sab 
110de777a60Sab /* conv_ehdr_flags() */
111*d29b2c44Sab #define	CONV_EHDR_FLAGS_BASE_BUFSIZE	69
112de777a60Sab #define	CONV32_EHDR_FLAGS_BUFSIZE	\
113*d29b2c44Sab 	(CONV_EHDR_FLAGS_BASE_BUFSIZE + CONV32_INV_BUFSIZE)
114de777a60Sab typedef union {
115de777a60Sab 	Conv32_inv_buf_t	inv_buf;
116de777a60Sab 	char			buf[CONV32_EHDR_FLAGS_BUFSIZE];
117de777a60Sab } Conv32_ehdr_flags_buf_t;
118de777a60Sab 
119de777a60Sab #define	CONV64_EHDR_FLAGS_BUFSIZE	\
120*d29b2c44Sab 	(CONV_EHDR_FLAGS_BASE_BUFSIZE + CONV64_INV_BUFSIZE)
121de777a60Sab typedef union {
122de777a60Sab 	Conv64_inv_buf_t	inv_buf;
123de777a60Sab 	char			buf[CONV64_EHDR_FLAGS_BUFSIZE];
124de777a60Sab } Conv64_ehdr_flags_buf_t;
125de777a60Sab 
126de777a60Sab 
127de777a60Sab /* conv_reject_desc() */
128de777a60Sab typedef union {
129de777a60Sab 	Conv32_inv_buf_t	inv_buf;
130de777a60Sab 	Conv32_ehdr_flags_buf_t	flags_buf;
131de777a60Sab } Conv32_reject_desc_buf_t;
132de777a60Sab 
133de777a60Sab typedef union {
134de777a60Sab 	Conv64_inv_buf_t	inv_buf;
135de777a60Sab 	Conv64_ehdr_flags_buf_t	flags_buf;
136de777a60Sab } Conv64_reject_desc_buf_t;
137de777a60Sab 
138de777a60Sab 
139de777a60Sab /*
140de777a60Sab  * conv_cap_val_hw1()
141de777a60Sab  *
142de777a60Sab  * This size is based on the maximum number of hardware capabilities
143de777a60Sab  * that exist.  See common/elfcap.
144de777a60Sab  */
145de777a60Sab #define	CONV_CAP_VAL_HW1_BUFSIZE	195
146de777a60Sab 
147de777a60Sab typedef union {
148de777a60Sab 	Conv32_inv_buf_t	inv_buf;
149de777a60Sab 	char			buf[CONV_CAP_VAL_HW1_BUFSIZE];
150de777a60Sab } Conv32_cap_val_hw1_buf_t;
151de777a60Sab 
152de777a60Sab typedef union {
153de777a60Sab 	Conv64_inv_buf_t	inv_buf;
154de777a60Sab 	char			buf[CONV_CAP_VAL_HW1_BUFSIZE];
155de777a60Sab } Conv64_cap_val_hw1_buf_t;
156de777a60Sab 
157de777a60Sab 
158de777a60Sab /*
159de777a60Sab  * conv_cap_val_sf1()
160de777a60Sab  *
161de777a60Sab  * This size is based on the maximum number of software capabilities
162de777a60Sab  * that exist.  See common/elfcap.
163de777a60Sab  */
164de777a60Sab #define	CONV_CAP_VAL_SF1_BUFSIZE	45
165de777a60Sab 
166de777a60Sab typedef union {
167de777a60Sab 	Conv32_inv_buf_t	inv_buf;
168de777a60Sab 	char			buf[CONV_CAP_VAL_SF1_BUFSIZE];
169de777a60Sab } Conv32_cap_val_sf1_buf_t;
170de777a60Sab 
171de777a60Sab typedef union {
172de777a60Sab 	Conv64_inv_buf_t	inv_buf;
173de777a60Sab 	char			buf[CONV_CAP_VAL_SF1_BUFSIZE];
174de777a60Sab } Conv64_cap_val_sf1_buf_t;
175de777a60Sab 
176de777a60Sab 
177de777a60Sab 
178de777a60Sab /* conv_cap_val_buf() */
179de777a60Sab typedef union {
180de777a60Sab 	Conv32_inv_buf_t		inv_buf;
181de777a60Sab 	Conv32_cap_val_hw1_buf_t	cap_val_hw1_buf;
182de777a60Sab 	Conv32_cap_val_sf1_buf_t	cap_val_sf1_buf;
183de777a60Sab } Conv32_cap_val_buf_t;
184de777a60Sab 
185de777a60Sab typedef union {
186de777a60Sab 	Conv64_inv_buf_t		inv_buf;
187de777a60Sab 	Conv64_cap_val_hw1_buf_t	cap_val_hw1_buf;
188de777a60Sab 	Conv64_cap_val_sf1_buf_t	cap_val_sf1_buf;
189de777a60Sab } Conv64_cap_val_buf_t;
190de777a60Sab 
191de777a60Sab 
192de777a60Sab /* conv_config_feat() */
193de777a60Sab #define	CONV_CONFIG_FEAT_BUFSIZE	195
194de777a60Sab 
195de777a60Sab typedef union {
196de777a60Sab 	Conv32_inv_buf_t	inv_buf;
197de777a60Sab 	char			buf[CONV_CONFIG_FEAT_BUFSIZE];
198de777a60Sab } Conv32_config_feat_buf_t;
199de777a60Sab 
200de777a60Sab typedef union {
201de777a60Sab 	Conv64_inv_buf_t	inv_buf;
202de777a60Sab 	char			buf[CONV_CONFIG_FEAT_BUFSIZE];
203de777a60Sab } Conv64_config_feat_buf_t;
204de777a60Sab 
205de777a60Sab 
206de777a60Sab /* conv_config_obj() */
207de777a60Sab #define	CONV_CONFIG_OBJ_BUFSIZE		154
208de777a60Sab 
209de777a60Sab typedef union {
210de777a60Sab 	Conv32_inv_buf_t	inv_buf;
211de777a60Sab 	char			buf[CONV_CONFIG_OBJ_BUFSIZE];
212de777a60Sab } Conv32_config_obj_buf_t;
213de777a60Sab 
214de777a60Sab typedef union {
215de777a60Sab 	Conv64_inv_buf_t	inv_buf;
216de777a60Sab 	char			buf[CONV_CONFIG_OBJ_BUFSIZE];
217de777a60Sab } Conv64_config_obj_buf_t;
218de777a60Sab 
219de777a60Sab 
220de777a60Sab /* conv_dl_mode() */
221de777a60Sab #define	CONV_DL_MODE_BUFSIZE		122
222de777a60Sab 
223de777a60Sab typedef union {
224de777a60Sab 	Conv32_inv_buf_t	inv_buf;
225de777a60Sab 	char			buf[CONV_DL_MODE_BUFSIZE];
226de777a60Sab } Conv32_dl_mode_buf_t;
227de777a60Sab 
228de777a60Sab typedef union {
229de777a60Sab 	Conv64_inv_buf_t	inv_buf;
230de777a60Sab 	char			buf[CONV_DL_MODE_BUFSIZE];
231de777a60Sab } Conv64_dl_mode_buf_t;
232de777a60Sab 
233de777a60Sab 
234de777a60Sab /* conv_dl_flag() */
235de777a60Sab #define	CONV_DL_FLAG_BUFSIZE		195
236de777a60Sab 
237de777a60Sab typedef union {
238de777a60Sab 	Conv32_inv_buf_t	inv_buf;
239de777a60Sab 	char			buf[CONV_DL_FLAG_BUFSIZE];
240de777a60Sab } Conv32_dl_flag_buf_t;
241de777a60Sab 
242de777a60Sab typedef union {
243de777a60Sab 	Conv64_inv_buf_t	inv_buf;
244de777a60Sab 	char			buf[CONV_DL_FLAG_BUFSIZE];
245de777a60Sab } Conv64_dl_flag_buf_t;
246de777a60Sab 
247de777a60Sab 
248de777a60Sab /* conv_grphdl_flags() */
2498af2c5b9Srie #define	CONV_GRPHDL_FLAGS_BUFSIZE	82
250de777a60Sab 
251de777a60Sab typedef union {
252de777a60Sab 	Conv32_inv_buf_t	inv_buf;
253de777a60Sab 	char			buf[CONV_GRPHDL_FLAGS_BUFSIZE];
254de777a60Sab } Conv32_grphdl_flags_buf_t;
255de777a60Sab 
256de777a60Sab typedef union {
257de777a60Sab 	Conv64_inv_buf_t	inv_buf;
258de777a60Sab 	char			buf[CONV_GRPHDL_FLAGS_BUFSIZE];
259de777a60Sab } Conv64_grphdl_flags_buf_t;
260de777a60Sab 
261de777a60Sab 
262de777a60Sab /* conv_grpdesc_flags() */
2638af2c5b9Srie #define	CONV_GRPDESC_FLAGS_BUFSIZE	92
264de777a60Sab 
265de777a60Sab typedef union {
266de777a60Sab 	Conv32_inv_buf_t	inv_buf;
267de777a60Sab 	char			buf[CONV_GRPDESC_FLAGS_BUFSIZE];
268de777a60Sab } Conv32_grpdesc_flags_buf_t;
269de777a60Sab 
270de777a60Sab typedef union {
271de777a60Sab 	Conv64_inv_buf_t	inv_buf;
272de777a60Sab 	char			buf[CONV_GRPDESC_FLAGS_BUFSIZE];
273de777a60Sab } Conv64_grpdesc_flags_buf_t;
274de777a60Sab 
275de777a60Sab 
276de777a60Sab /* conv_seg_flags() */
277de777a60Sab #define	CONV_SEG_FLAGS_BUFSIZE		186
278de777a60Sab 
279de777a60Sab typedef union {
280de777a60Sab 	Conv32_inv_buf_t	inv_buf;
281de777a60Sab 	char			buf[CONV_SEG_FLAGS_BUFSIZE];
282de777a60Sab } Conv32_seg_flags_buf_t;
283de777a60Sab 
284de777a60Sab typedef union {
285de777a60Sab 	Conv64_inv_buf_t	inv_buf;
286de777a60Sab 	char			buf[CONV_SEG_FLAGS_BUFSIZE];
287de777a60Sab } Conv64_seg_flags_buf_t;
288de777a60Sab 
289de777a60Sab 
290de777a60Sab /* conv_dyn_posflag1() */
291*d29b2c44Sab #define	CONV_DYN_POSFLAG1_BASE_BUFSIZE	23
292de777a60Sab #define	CONV32_DYN_POSFLAG1_BUFSIZE	\
293*d29b2c44Sab 	(CONV_DYN_POSFLAG1_BASE_BUFSIZE + CONV32_INV_BUFSIZE)
294de777a60Sab typedef union {
295de777a60Sab 	Conv32_inv_buf_t	inv_buf;
296de777a60Sab 	char			buf[CONV32_DYN_POSFLAG1_BUFSIZE];
297de777a60Sab } Conv32_dyn_posflag1_buf_t;
298de777a60Sab 
299de777a60Sab #define	CONV64_DYN_POSFLAG1_BUFSIZE	\
300*d29b2c44Sab 	(CONV_DYN_POSFLAG1_BASE_BUFSIZE + CONV64_INV_BUFSIZE)
301de777a60Sab typedef union {
302de777a60Sab 	Conv64_inv_buf_t	inv_buf;
303de777a60Sab 	char			buf[CONV64_DYN_POSFLAG1_BUFSIZE];
304de777a60Sab } Conv64_dyn_posflag1_buf_t;
305de777a60Sab 
306de777a60Sab 
307de777a60Sab /* conv_dyn_flag() */
308*d29b2c44Sab #define	CONV_DYN_FLAG_BASE_BUFSIZE	48
309de777a60Sab #define	CONV32_DYN_FLAG_BUFSIZE	\
310*d29b2c44Sab 	(CONV_DYN_FLAG_BASE_BUFSIZE + CONV32_INV_BUFSIZE)
311de777a60Sab typedef union {
312de777a60Sab 	Conv32_inv_buf_t	inv_buf;
313de777a60Sab 	char			buf[CONV32_DYN_FLAG_BUFSIZE];
314de777a60Sab } Conv32_dyn_flag_buf_t;
315de777a60Sab 
316de777a60Sab #define	CONV64_DYN_FLAG_BUFSIZE	\
317*d29b2c44Sab 	(CONV_DYN_FLAG_BASE_BUFSIZE + CONV64_INV_BUFSIZE)
318de777a60Sab typedef union {
319de777a60Sab 	Conv64_inv_buf_t	inv_buf;
320de777a60Sab 	char			buf[CONV64_DYN_FLAG_BUFSIZE];
321de777a60Sab } Conv64_dyn_flag_buf_t;
322de777a60Sab 
323de777a60Sab 
324de777a60Sab /* conv_dyn_flag1() */
325*d29b2c44Sab #define	CONV_DYN_FLAG1_BASE_BUFSIZE	223
326de777a60Sab #define	CONV32_DYN_FLAG1_BUFSIZE	\
327*d29b2c44Sab 	(CONV_DYN_FLAG1_BASE_BUFSIZE + CONV32_INV_BUFSIZE)
328de777a60Sab typedef union {
329de777a60Sab 	Conv32_inv_buf_t	inv_buf;
330de777a60Sab 	char			buf[CONV32_DYN_FLAG1_BUFSIZE];
331de777a60Sab } Conv32_dyn_flag1_buf_t;
332de777a60Sab 
333de777a60Sab #define	CONV64_DYN_FLAG1_BUFSIZE	\
334*d29b2c44Sab 	(CONV_DYN_FLAG1_BASE_BUFSIZE + CONV64_INV_BUFSIZE)
335de777a60Sab typedef union {
336de777a60Sab 	Conv64_inv_buf_t	inv_buf;
337de777a60Sab 	char			buf[CONV64_DYN_FLAG1_BUFSIZE];
338de777a60Sab } Conv64_dyn_flag1_buf_t;
339de777a60Sab 
340de777a60Sab 
341de777a60Sab /* conv_dyn_feature1() */
342*d29b2c44Sab #define	CONV_DYN_FEATURE1_BASE_BUFSIZE	20
343de777a60Sab #define	CONV32_DYN_FEATURE1_BUFSIZE	\
344*d29b2c44Sab 	(CONV_DYN_FEATURE1_BASE_BUFSIZE + CONV32_INV_BUFSIZE)
345de777a60Sab typedef union {
346de777a60Sab 	Conv32_inv_buf_t	inv_buf;
347de777a60Sab 	char			buf[CONV32_DYN_FEATURE1_BUFSIZE];
348de777a60Sab } Conv32_dyn_feature1_buf_t;
349de777a60Sab 
350de777a60Sab #define	CONV64_DYN_FEATURE1_BUFSIZE	\
351*d29b2c44Sab 	(CONV_DYN_FEATURE1_BASE_BUFSIZE + CONV64_INV_BUFSIZE)
352de777a60Sab typedef union {
353de777a60Sab 	Conv64_inv_buf_t	inv_buf;
354de777a60Sab 	char			buf[CONV64_DYN_FEATURE1_BUFSIZE];
355de777a60Sab } Conv64_dyn_feature1_buf_t;
356de777a60Sab 
357de777a60Sab 
358de777a60Sab /* conv_bnd_type() */
359*d29b2c44Sab #define	CONV_BND_TYPE_BASE_BUFSIZE	29
360de777a60Sab #define	CONV32_BND_TYPE_BUFSIZE	\
361*d29b2c44Sab 	(CONV_BND_TYPE_BASE_BUFSIZE + CONV32_INV_BUFSIZE)
362de777a60Sab typedef union {
363de777a60Sab 	Conv32_inv_buf_t	inv_buf;
364de777a60Sab 	char			buf[CONV32_BND_TYPE_BUFSIZE];
365de777a60Sab } Conv32_bnd_type_buf_t;
366de777a60Sab 
367de777a60Sab #define	CONV64_BND_TYPE_BUFSIZE	\
368*d29b2c44Sab 	(CONV_BND_TYPE_BASE_BUFSIZE + CONV64_INV_BUFSIZE)
369de777a60Sab typedef union {
370de777a60Sab 	Conv64_inv_buf_t	inv_buf;
371de777a60Sab 	char			buf[CONV64_BND_TYPE_BUFSIZE];
372de777a60Sab } Conv64_bnd_type_buf_t;
373de777a60Sab 
374de777a60Sab 
375de777a60Sab /* conv_bnd_obj() */
376*d29b2c44Sab #define	CONV_BND_OBJ_BASE_BUFSIZE	38
377de777a60Sab #define	CONV32_BND_OBJ_BUFSIZE	\
378*d29b2c44Sab 	(CONV_BND_OBJ_BASE_BUFSIZE + CONV32_INV_BUFSIZE)
379de777a60Sab typedef union {
380de777a60Sab 	Conv32_inv_buf_t	inv_buf;
381de777a60Sab 	char			buf[CONV32_BND_OBJ_BUFSIZE];
382de777a60Sab } Conv32_bnd_obj_buf_t;
383de777a60Sab 
384de777a60Sab #define	CONV64_BND_OBJ_BUFSIZE	\
385*d29b2c44Sab 	(CONV_BND_OBJ_BASE_BUFSIZE + CONV64_INV_BUFSIZE)
386de777a60Sab typedef union {
387de777a60Sab 	Conv64_inv_buf_t	inv_buf;
388de777a60Sab 	char			buf[CONV64_BND_OBJ_BUFSIZE];
389de777a60Sab } Conv64_bnd_obj_buf_t;
390de777a60Sab 
391de777a60Sab 
392de777a60Sab /* conv_phdr_flags() */
393*d29b2c44Sab #define	CONV_PHDR_FLAGS_BASE_BUFSIZE	35
394de777a60Sab #define	CONV32_PHDR_FLAGS_BUFSIZE	\
395*d29b2c44Sab 	(CONV_PHDR_FLAGS_BASE_BUFSIZE + CONV32_INV_BUFSIZE)
396de777a60Sab typedef union {
397de777a60Sab 	Conv32_inv_buf_t	inv_buf;
398de777a60Sab 	char			buf[CONV32_PHDR_FLAGS_BUFSIZE];
399de777a60Sab } Conv32_phdr_flags_buf_t;
400de777a60Sab 
401de777a60Sab #define	CONV64_PHDR_FLAGS_BUFSIZE	\
402*d29b2c44Sab 	(CONV_PHDR_FLAGS_BASE_BUFSIZE + CONV64_INV_BUFSIZE)
403de777a60Sab typedef union {
404de777a60Sab 	Conv64_inv_buf_t	inv_buf;
405de777a60Sab 	char			buf[CONV64_PHDR_FLAGS_BUFSIZE];
406de777a60Sab } Conv64_phdr_flags_buf_t;
407de777a60Sab 
408de777a60Sab 
409de777a60Sab /* conv_sec_flags() */
410*d29b2c44Sab #define	CONV_SEC_FLAGS_BASE_BUFSIZE	168
411de777a60Sab #define	CONV32_SEC_FLAGS_BUFSIZE	\
412*d29b2c44Sab 	(CONV_SEC_FLAGS_BASE_BUFSIZE + CONV32_INV_BUFSIZE)
413de777a60Sab typedef union {
414de777a60Sab 	Conv32_inv_buf_t	inv_buf;
415de777a60Sab 	char			buf[CONV32_SEC_FLAGS_BUFSIZE];
416de777a60Sab } Conv32_sec_flags_buf_t;
417de777a60Sab 
418de777a60Sab #define	CONV64_SEC_FLAGS_BUFSIZE	\
419*d29b2c44Sab 	(CONV_SEC_FLAGS_BASE_BUFSIZE + CONV64_INV_BUFSIZE)
420de777a60Sab typedef union {
421de777a60Sab 	Conv64_inv_buf_t	inv_buf;
422de777a60Sab 	char			buf[CONV64_SEC_FLAGS_BUFSIZE];
423de777a60Sab } Conv64_sec_flags_buf_t;
424de777a60Sab 
425de777a60Sab 
426de777a60Sab /* conv_dwarf_ehe() */
427de777a60Sab #define	CONV_DWARF_EHE_BUFSIZE		33
428de777a60Sab typedef union {
429de777a60Sab 	Conv32_inv_buf_t	inv_buf;
430de777a60Sab 	char			buf[CONV_DWARF_EHE_BUFSIZE];
431de777a60Sab } Conv32_dwarf_ehe_buf_t;
432de777a60Sab typedef union {
433de777a60Sab 	Conv64_inv_buf_t	inv_buf;
434de777a60Sab 	char			buf[CONV_DWARF_EHE_BUFSIZE];
435de777a60Sab } Conv64_dwarf_ehe_buf_t;
436de777a60Sab 
437de777a60Sab 
438*d29b2c44Sab /* conv_syminfo_flags() */
439*d29b2c44Sab #define	CONV_SYMINFO_FLAGS_BASE_BUFSIZE	36
440*d29b2c44Sab #define	CONV32_SYMINFO_FLAGS_BUFSIZE	\
441*d29b2c44Sab 	(CONV_SYMINFO_FLAGS_BASE_BUFSIZE + CONV32_INV_BUFSIZE)
442*d29b2c44Sab typedef union {
443*d29b2c44Sab 	Conv32_inv_buf_t	inv_buf;
444*d29b2c44Sab 	char			buf[CONV32_SYMINFO_FLAGS_BUFSIZE];
445*d29b2c44Sab } Conv32_syminfo_flags_buf_t;
446*d29b2c44Sab 
447*d29b2c44Sab #define	CONV64_SYMINFO_FLAGS_BUFSIZE	\
448*d29b2c44Sab 	(CONV_SYMINFO_FLAGS_BASE_BUFSIZE + CONV64_INV_BUFSIZE)
449*d29b2c44Sab typedef union {
450*d29b2c44Sab 	Conv64_inv_buf_t	inv_buf;
451*d29b2c44Sab 	char			buf[CONV64_SYMINFO_FLAGS_BUFSIZE];
452*d29b2c44Sab } Conv64_syminfo_flags_buf_t;
453*d29b2c44Sab 
454*d29b2c44Sab 
455de777a60Sab 
456de777a60Sab /*
457de777a60Sab  * Generic names for class specific buffer types above
4585aefb655Srie  */
4595aefb655Srie #if	defined(_ELF64)
460de777a60Sab #define	CONV_INV_BUFSIZE		CONV64_INV_BUFSIZE
461de777a60Sab #define	CONV_EHDR_FLAGS_BUFSIZE		CONV64_EHDR_FLAGS_BUFSIZE
462de777a60Sab #define	CONV_DYN_POSFLAG1_BUFSIZE	CONV64_DYN_POSFLAG1_BUFSIZE
463de777a60Sab #define	CONV_DYN_FLAG_BUFSIZE		CONV64_DYN_FLAG_BUFSIZE
464de777a60Sab #define	CONV_DYN_FLAG1_BUFSIZE		CONV64_DYN_FLAG1_BUFSIZE
465de777a60Sab #define	CONV_DYN_FEATURE1_BUFSIZE	CONV64_DYN_FEATURE1_BUFSIZE
466de777a60Sab #define	CONV_BND_TYPE_BUFSIZE		CONV64_BND_TYPE_BUFSIZE
467de777a60Sab #define	CONV_BND_OBJ_BUFSIZE		CONV64_BND_OBJ_BUFSIZE
468de777a60Sab #define	CONV_PHDR_FLAGS_BUFSIZE		CONV64_PHDR_FLAGS_BUFSIZE
469de777a60Sab #define	CONV_SEC_FLAGS_BUFSIZE		CONV64_SEC_FLAGS_BUFSIZE
470*d29b2c44Sab #define	CONV_SYMINFO_FLAGS_BUFSIZE	CONV64_SYMINFO_FLAGS_BUFSIZE
471de777a60Sab 
472de777a60Sab #define	Conv_inv_buf_t			Conv64_inv_buf_t
473de777a60Sab #define	Conv_ehdr_flags_buf_t		Conv64_ehdr_flags_buf_t
474de777a60Sab #define	Conv_reject_desc_buf_t		Conv64_reject_desc_buf_t
475de777a60Sab #define	Conv_cap_val_hw1_buf_t		Conv64_cap_val_hw1_buf_t
476de777a60Sab #define	Conv_cap_val_sf1_buf_t		Conv64_cap_val_sf1_buf_t
477de777a60Sab #define	Conv_cap_val_buf_t		Conv64_cap_val_buf_t
478de777a60Sab #define	Conv_config_feat_buf_t		Conv64_config_feat_buf_t
479de777a60Sab #define	Conv_config_obj_buf_t		Conv64_config_obj_buf_t
480de777a60Sab #define	Conv_dl_mode_buf_t		Conv64_dl_mode_buf_t
481de777a60Sab #define	Conv_dl_flag_buf_t		Conv64_dl_flag_buf_t
482de777a60Sab #define	Conv_grphdl_flags_buf_t		Conv64_grphdl_flags_buf_t
483de777a60Sab #define	Conv_grpdesc_flags_buf_t	Conv64_grpdesc_flags_buf_t
484de777a60Sab #define	Conv_seg_flags_buf_t		Conv64_seg_flags_buf_t
485de777a60Sab #define	Conv_dyn_posflag1_buf_t		Conv64_dyn_posflag1_buf_t
486de777a60Sab #define	Conv_dyn_flag_buf_t		Conv64_dyn_flag_buf_t
487de777a60Sab #define	Conv_dyn_flag1_buf_t		Conv64_dyn_flag1_buf_t
488de777a60Sab #define	Conv_dyn_feature1_buf_t		Conv64_dyn_feature1_buf_t
489de777a60Sab #define	Conv_bnd_type_buf_t		Conv64_bnd_type_buf_t
490de777a60Sab #define	Conv_bnd_obj_buf_t		Conv64_bnd_obj_buf_t
491de777a60Sab #define	Conv_phdr_flags_buf_t		Conv64_phdr_flags_buf_t
492de777a60Sab #define	Conv_sec_flags_buf_t		Conv64_sec_flags_buf_t
493de777a60Sab #define	Conv_dwarf_ehe_buf_t		Conv64_dwarf_ehe_buf_t
494*d29b2c44Sab #define	Conv_syminfo_flags_buf_t	Conv64_syminfo_flags_buf_t
4955aefb655Srie #else
496de777a60Sab #define	CONV_INV_BUFSIZE		CONV32_INV_BUFSIZE
497de777a60Sab #define	CONV_EHDR_FLAGS_BUFSIZE		CONV32_EHDR_FLAGS_BUFSIZE
498de777a60Sab #define	CONV_DYN_POSFLAG1_BUFSIZE	CONV32_DYN_POSFLAG1_BUFSIZE
499de777a60Sab #define	CONV_DYN_FLAG_BUFSIZE		CONV32_DYN_FLAG_BUFSIZE
500de777a60Sab #define	CONV_DYN_FLAG1_BUFSIZE		CONV32_DYN_FLAG1_BUFSIZE
501de777a60Sab #define	CONV_DYN_FEATURE1_BUFSIZE	CONV32_DYN_FEATURE1_BUFSIZE
502de777a60Sab #define	CONV_BND_TYPE_BUFSIZE		CONV32_BND_TYPE_BUFSIZE
503de777a60Sab #define	CONV_BND_OBJ_BUFSIZE		CONV32_BND_OBJ_BUFSIZE
504de777a60Sab #define	CONV_PHDR_FLAGS_BUFSIZE		CONV32_PHDR_FLAGS_BUFSIZE
505de777a60Sab #define	CONV_SEC_FLAGS_BUFSIZE		CONV32_SEC_FLAGS_BUFSIZE
506*d29b2c44Sab #define	CONV_SYMINFO_FLAGS_BUFSIZE	CONV32_SYMINFO_FLAGS_BUFSIZE
507de777a60Sab 
508de777a60Sab #define	Conv_inv_buf_t			Conv32_inv_buf_t
509de777a60Sab #define	Conv_ehdr_flags_buf_t		Conv32_ehdr_flags_buf_t
510de777a60Sab #define	Conv_reject_desc_buf_t		Conv32_reject_desc_buf_t
511de777a60Sab #define	Conv_cap_val_hw1_buf_t		Conv32_cap_val_hw1_buf_t
512de777a60Sab #define	Conv_cap_val_sf1_buf_t		Conv32_cap_val_sf1_buf_t
513de777a60Sab #define	Conv_cap_val_buf_t		Conv32_cap_val_buf_t
514de777a60Sab #define	Conv_config_feat_buf_t		Conv32_config_feat_buf_t
515de777a60Sab #define	Conv_config_obj_buf_t		Conv32_config_obj_buf_t
516de777a60Sab #define	Conv_dl_mode_buf_t		Conv32_dl_mode_buf_t
517de777a60Sab #define	Conv_dl_flag_buf_t		Conv32_dl_flag_buf_t
518de777a60Sab #define	Conv_grphdl_flags_buf_t		Conv32_grphdl_flags_buf_t
519de777a60Sab #define	Conv_grpdesc_flags_buf_t	Conv32_grpdesc_flags_buf_t
520de777a60Sab #define	Conv_seg_flags_buf_t		Conv32_seg_flags_buf_t
521de777a60Sab #define	Conv_dyn_posflag1_buf_t		Conv32_dyn_posflag1_buf_t
522de777a60Sab #define	Conv_dyn_flag_buf_t		Conv32_dyn_flag_buf_t
523de777a60Sab #define	Conv_dyn_flag1_buf_t		Conv32_dyn_flag1_buf_t
524de777a60Sab #define	Conv_dyn_feature1_buf_t		Conv32_dyn_feature1_buf_t
525de777a60Sab #define	Conv_bnd_type_buf_t		Conv32_bnd_type_buf_t
526de777a60Sab #define	Conv_bnd_obj_buf_t		Conv32_bnd_obj_buf_t
527de777a60Sab #define	Conv_phdr_flags_buf_t		Conv32_phdr_flags_buf_t
528de777a60Sab #define	Conv_sec_flags_buf_t		Conv32_sec_flags_buf_t
529de777a60Sab #define	Conv_dwarf_ehe_buf_t		Conv32_dwarf_ehe_buf_t
530*d29b2c44Sab #define	Conv_syminfo_flags_buf_t	Conv32_syminfo_flags_buf_t
5315aefb655Srie #endif
5325aefb655Srie 
533de777a60Sab 
534de777a60Sab 
5352926dd2eSrie 
536*d29b2c44Sab /*
537*d29b2c44Sab  * Many conversion routines accept a fmt_flags argument of this type
538*d29b2c44Sab  * to allow the caller to modify the output. There are two parts to
539*d29b2c44Sab  * this value:
540*d29b2c44Sab  *
541*d29b2c44Sab  *	(1) Format requests (decimal vs hex, etc...)
542*d29b2c44Sab  *	(2) The low order bits specified by CONV_MASK_FMT_ALT
543*d29b2c44Sab  *		and retrieved by CONV_TYPE_FMT_ALT are integer
544*d29b2c44Sab  *		values that specify that an alternate set of
545*d29b2c44Sab  *		strings should be used. This is necessary because
546*d29b2c44Sab  *		different utilities evolved to use different strings,
547*d29b2c44Sab  *		and there are backward compatability guarantees in
548*d29b2c44Sab  *		place that prevent changing them.
549*d29b2c44Sab  *
550*d29b2c44Sab  * These values are designed such that a caller can always supply a
551*d29b2c44Sab  * simple 0 in order to receive "default" behavior.
552*d29b2c44Sab  */
553*d29b2c44Sab typedef int Conv_fmt_flags_t;
554*d29b2c44Sab 
555*d29b2c44Sab /*
556*d29b2c44Sab  * The bottom 8 bits of Conv_fmt_flags_t are used to encode
557*d29b2c44Sab  * alternative strings.
558*d29b2c44Sab  *
559*d29b2c44Sab  * If a given conversion routine does not support alternative strings
560*d29b2c44Sab  * for a given CONV_FMT_ALT type, it silently ignores the request and
561*d29b2c44Sab  * supplies the default set. This means that a utility like dump(1) is
562*d29b2c44Sab  * free to specify its special type in every conversion routine call,
563*d29b2c44Sab  * without regard to whether it has any special meaning for that particular
564*d29b2c44Sab  * routine. It will receive its special strings if there are any, and
565*d29b2c44Sab  * the defaults otherwise.
566*d29b2c44Sab  */
567*d29b2c44Sab #define	CONV_MASK_FMT_ALT		0xff
568*d29b2c44Sab #define	CONV_TYPE_FMT_ALT(fmt_flags)	(fmt_flags & CONV_MASK_FMT_ALT)
569*d29b2c44Sab 
570*d29b2c44Sab #define	CONV_FMT_ALT_DEFAULT	0	/* "Standard" strings */
571*d29b2c44Sab #define	CONV_FMT_ALT_DUMP	1	/* Style of strings used by dump(1) */
572*d29b2c44Sab #define	CONV_FMT_ALT_FILE	2	/* Style of strings used by file(1) */
573*d29b2c44Sab #define	CONV_FMT_ALT_CRLE	3	/* Style of strings used by crle(1) */
574*d29b2c44Sab #define	CONV_FMT_ALT_FULLNAME	4	/* Strings should be full #define */
575*d29b2c44Sab 					/* 	(e.g. STB_LOCAL, not LOCL) */
576*d29b2c44Sab 
5775aefb655Srie /*
578c13de8f6Sab  * Flags that alter standard formatting for conversion routines.
579*d29b2c44Sab  * These bits start after the range occupied by CONV_MASK_FMT_ALT.
5805aefb655Srie  */
581*d29b2c44Sab #define	CONV_FMT_DECIMAL	0x0100	/* conv_invalid_val() should print */
582c13de8f6Sab 					/*    integer print as decimal */
583c13de8f6Sab 					/*    (default is hex) */
584*d29b2c44Sab #define	CONV_FMT_SPACE		0x0200	/* conv_invalid_val() should append */
585c13de8f6Sab 					/*    a space after the number.  */
586*d29b2c44Sab #define	CONV_FMT_NOBKT		0x0400	/* conv_expn_field() should omit */
587*d29b2c44Sab 					/*    prefix and suffix strings */
588c13de8f6Sab 
5895aefb655Srie 
5905aefb655Srie /*
5915aefb655Srie  * The expansion of bit-field data items is driven from a value descriptor and
5925aefb655Srie  * the conv_expn_field() routine.
5935aefb655Srie  */
5945aefb655Srie typedef struct {
5955aefb655Srie 	Xword		v_val;		/* expansion value */
5965aefb655Srie 	const char	*v_msg;		/* associated message string */
5975aefb655Srie } Val_desc;
5985aefb655Srie 
599ba4e3c84Sab /*
600ba4e3c84Sab  * conv_expn_field() is willing to supply default strings for the
601ba4e3c84Sab  * prefix, separator, and suffix arguments, if they are passed as NULL.
602ba4e3c84Sab  * The caller needs to know how much room to allow for these items.
603ba4e3c84Sab  * These values supply those sizes.
604ba4e3c84Sab  */
605ba4e3c84Sab #define	CONV_EXPN_FIELD_DEF_PREFIX_SIZE	2	/* Default is "[ " */
606ba4e3c84Sab #define	CONV_EXPN_FIELD_DEF_SEP_SIZE	1	/* Default is " " */
607ba4e3c84Sab #define	CONV_EXPN_FIELD_DEF_SUFFIX_SIZE	2	/* Default is " ]" */
608ba4e3c84Sab 
609ba4e3c84Sab /*
610ba4e3c84Sab  * conv_expn_field() requires a large number of inputs, many of which
611ba4e3c84Sab  * can be NULL to accept default behavior. An argument of the following
612ba4e3c84Sab  * type is used to supply them.
613ba4e3c84Sab  */
614ba4e3c84Sab typedef struct {
615ba4e3c84Sab 	char *buf;		/* Buffer to receive generated string */
616ba4e3c84Sab 	size_t bufsize;		/* sizeof(buf) */
617ba4e3c84Sab 	const Val_desc *vdp;	/* Array of value descriptors, giving the */
618ba4e3c84Sab 				/*	possible bit values, and their */
619ba4e3c84Sab 				/*	corresponding strings. Note that the */
620ba4e3c84Sab 				/*	final element must contain only NULL */
621ba4e3c84Sab 				/*	values. This terminates the list. */
622ba4e3c84Sab 	const char **lead_str;	/* NULL, or array of pointers to strings to */
623ba4e3c84Sab 				/*	be output at the head of the list. */
624ba4e3c84Sab 				/*	Last entry must be NULL. */
625ba4e3c84Sab 	Xword oflags;		/* Bits for which output strings are desired */
626ba4e3c84Sab 	Xword rflags;		/* Bits for which a numeric value should be */
627ba4e3c84Sab 				/*	output if vdp does not provide str. */
628ba4e3c84Sab 				/*	Must be a proper subset of oflags */
629ba4e3c84Sab 	const char *prefix;	/* NULL, or string to prefix output with */
630ba4e3c84Sab 				/*	If NULL, "[ " is used. */
631ba4e3c84Sab 	const char *sep;	/* NULL, or string to separate output items */
632ba4e3c84Sab 				/*	with. If NULL, " " is used. */
633ba4e3c84Sab 	const char *suffix;	/* NULL, or string to suffix output with */
634ba4e3c84Sab 				/*	If NULL, " ]" is used. */
635ba4e3c84Sab } CONV_EXPN_FIELD_ARG;
636ba4e3c84Sab 
6375aefb655Srie /*
6385aefb655Srie  * Define all generic interfaces.
6397c478bd9Sstevel@tonic-gate  */
6407010c12aSrie extern	uchar_t		conv_check_native(char **, char **);
641de777a60Sab extern	const char	*conv_config_feat(int, Conv_config_feat_buf_t *);
642de777a60Sab extern	const char	*conv_config_obj(ushort_t, Conv_config_obj_buf_t *);
6435aefb655Srie extern	const char	*conv_config_upm(const char *, const char *,
6445aefb655Srie 			    const char *, size_t);
645de777a60Sab extern	const char	*conv_def_tag(Symref, Conv_inv_buf_t *);
6465aefb655Srie extern	const char	*conv_demangle_name(const char *);
647*d29b2c44Sab extern	const char	*conv_dl_flag(int, Conv_fmt_flags_t,
648*d29b2c44Sab 			    Conv_dl_flag_buf_t *);
649de777a60Sab extern	const char	*conv_dl_mode(int, int, Conv_dl_mode_buf_t *);
650de777a60Sab extern	const char	*conv_dwarf_ehe(uint_t, Conv_dwarf_ehe_buf_t *);
651de777a60Sab extern	const char	*conv_elfdata_type(Elf_Type, Conv_inv_buf_t *);
652de777a60Sab extern	const char	*conv_grphdl_flags(uint_t, Conv_grphdl_flags_buf_t *);
653de777a60Sab extern	const char	*conv_grpdesc_flags(uint_t, Conv_grpdesc_flags_buf_t *);
6547c478bd9Sstevel@tonic-gate extern	Isa_desc	*conv_isalist(void);
6557c478bd9Sstevel@tonic-gate extern	const char	*conv_lddstub(int);
656de777a60Sab extern	const char	*conv_seg_flags(Half, Conv_seg_flags_buf_t *);
6577c478bd9Sstevel@tonic-gate extern	int		conv_sys_eclass();
6587c478bd9Sstevel@tonic-gate extern	Uts_desc	*conv_uts(void);
6595aefb655Srie extern	const char	*conv_ver_flags(Half);
660de777a60Sab extern	const char	*conv_ver_index(Versym, int, Conv_inv_buf_t *);
661de777a60Sab 
6625aefb655Srie 
6635aefb655Srie /*
6645aefb655Srie  * Define all class specific routines.
6655aefb655Srie  */
6665aefb655Srie #if	defined(_ELF64)
6675aefb655Srie #define	conv_bnd_obj		conv64_bnd_obj
6685aefb655Srie #define	conv_bnd_type		conv64_bnd_type
6695aefb655Srie #define	conv_cap_tag		conv64_cap_tag
6705aefb655Srie #define	conv_cap_val		conv64_cap_val
6715aefb655Srie #define	conv_cap_val_hw1	conv64_cap_val_hw1
6725aefb655Srie #define	conv_cap_val_sf1	conv64_cap_val_sf1
6735aefb655Srie #define	conv_dyn_feature1	conv64_dyn_feature1
6745aefb655Srie #define	conv_dyn_flag1		conv64_dyn_flag1
6755aefb655Srie #define	conv_dyn_flag		conv64_dyn_flag
6765aefb655Srie #define	conv_dyn_posflag1	conv64_dyn_posflag1
6775aefb655Srie #define	conv_dyn_tag		conv64_dyn_tag
6785aefb655Srie #define	conv_ehdr_class		conv64_ehdr_class
6795aefb655Srie #define	conv_ehdr_data		conv64_ehdr_data
6805aefb655Srie #define	conv_ehdr_flags		conv64_ehdr_flags
6815aefb655Srie #define	conv_ehdr_mach		conv64_ehdr_mach
6823244bcaaSab #define	conv_ehdr_osabi		conv64_ehdr_osabi
6835aefb655Srie #define	conv_ehdr_type		conv64_ehdr_type
6845aefb655Srie #define	conv_ehdr_vers		conv64_ehdr_vers
6855aefb655Srie #define	conv_expn_field		conv64_expn_field
6865aefb655Srie #define	conv_invalid_val	conv64_invalid_val
6875aefb655Srie #define	conv_phdr_flags		conv64_phdr_flags
6885aefb655Srie #define	conv_phdr_type		conv64_phdr_type
6895aefb655Srie #define	conv_reject_desc	conv64_reject_desc
6905aefb655Srie #define	conv_reloc_type		conv64_reloc_type
691de777a60Sab #define	conv_reloc_type_static	conv64_reloc_type_static
6925aefb655Srie #define	conv_reloc_386_type	conv64_reloc_386_type
6935aefb655Srie #define	conv_reloc_amd64_type	conv64_reloc_amd64_type
6945aefb655Srie #define	conv_reloc_SPARC_type	conv64_reloc_SPARC_type
6955aefb655Srie #define	conv_sec_flags		conv64_sec_flags
6967010c12aSrie #define	conv_sec_linkinfo	conv64_sec_linkinfo
6975aefb655Srie #define	conv_sec_type		conv64_sec_type
6985aefb655Srie #define	conv_sym_info_bind	conv64_sym_info_bind
6995aefb655Srie #define	conv_sym_info_type	conv64_sym_info_type
7005aefb655Srie #define	conv_sym_shndx		conv64_sym_shndx
7015aefb655Srie #define	conv_sym_other		conv64_sym_other
702*d29b2c44Sab #define	conv_sym_other_vis	conv64_sym_other_vis
7035aefb655Srie #define	conv_sym_value		conv64_sym_value
7045aefb655Srie #define	conv_sym_SPARC_value	conv64_sym_SPARC_value
705*d29b2c44Sab #define	conv_syminfo_flags	conv64_syminfo_flags
7065aefb655Srie #else
7075aefb655Srie #define	conv_bnd_obj		conv32_bnd_obj
7085aefb655Srie #define	conv_bnd_type		conv32_bnd_type
7095aefb655Srie #define	conv_cap_tag		conv32_cap_tag
7105aefb655Srie #define	conv_cap_val		conv32_cap_val
7115aefb655Srie #define	conv_cap_val_hw1	conv32_cap_val_hw1
7125aefb655Srie #define	conv_cap_val_sf1	conv32_cap_val_sf1
7135aefb655Srie #define	conv_dyn_feature1	conv32_dyn_feature1
7145aefb655Srie #define	conv_dyn_flag1		conv32_dyn_flag1
7155aefb655Srie #define	conv_dyn_flag		conv32_dyn_flag
7165aefb655Srie #define	conv_dyn_posflag1	conv32_dyn_posflag1
7175aefb655Srie #define	conv_dyn_tag		conv32_dyn_tag
7185aefb655Srie #define	conv_ehdr_class		conv32_ehdr_class
7195aefb655Srie #define	conv_ehdr_data		conv32_ehdr_data
7205aefb655Srie #define	conv_ehdr_flags		conv32_ehdr_flags
7215aefb655Srie #define	conv_ehdr_mach		conv32_ehdr_mach
7223244bcaaSab #define	conv_ehdr_osabi		conv32_ehdr_osabi
7235aefb655Srie #define	conv_ehdr_type		conv32_ehdr_type
7245aefb655Srie #define	conv_ehdr_vers		conv32_ehdr_vers
7255aefb655Srie #define	conv_expn_field		conv32_expn_field
7265aefb655Srie #define	conv_invalid_val	conv32_invalid_val
7275aefb655Srie #define	conv_phdr_flags		conv32_phdr_flags
7285aefb655Srie #define	conv_phdr_type		conv32_phdr_type
7295aefb655Srie #define	conv_reject_desc	conv32_reject_desc
7305aefb655Srie #define	conv_reloc_type		conv32_reloc_type
731de777a60Sab #define	conv_reloc_type_static	conv32_reloc_type_static
7325aefb655Srie #define	conv_reloc_386_type	conv32_reloc_386_type
7335aefb655Srie #define	conv_reloc_amd64_type	conv32_reloc_amd64_type
7345aefb655Srie #define	conv_reloc_SPARC_type	conv32_reloc_SPARC_type
7355aefb655Srie #define	conv_sec_flags		conv32_sec_flags
7367010c12aSrie #define	conv_sec_linkinfo	conv32_sec_linkinfo
7375aefb655Srie #define	conv_sec_type		conv32_sec_type
7385aefb655Srie #define	conv_sym_info_bind	conv32_sym_info_bind
7395aefb655Srie #define	conv_sym_info_type	conv32_sym_info_type
7405aefb655Srie #define	conv_sym_shndx		conv32_sym_shndx
7415aefb655Srie #define	conv_sym_other		conv32_sym_other
742*d29b2c44Sab #define	conv_sym_other_vis	conv32_sym_other_vis
7435aefb655Srie #define	conv_sym_value		conv32_sym_value
7445aefb655Srie #define	conv_sym_SPARC_value	conv32_sym_SPARC_value
745*d29b2c44Sab #define	conv_syminfo_flags	conv32_syminfo_flags
7465aefb655Srie #endif
7475aefb655Srie 
748de777a60Sab extern	const char	*conv_bnd_obj(uint_t, Conv_bnd_obj_buf_t *);
749de777a60Sab extern	const char	*conv_bnd_type(uint_t, Conv_bnd_type_buf_t *);
750de777a60Sab extern	const char	*conv_cap_tag(Xword, Conv_inv_buf_t *);
751de777a60Sab extern	const char	*conv_cap_val(Xword, Xword, Half, Conv_cap_val_buf_t *);
752*d29b2c44Sab extern	const char	*conv_cap_val_hw1(Xword, Half, Conv_fmt_flags_t,
753de777a60Sab 			    Conv_cap_val_hw1_buf_t *);
754*d29b2c44Sab extern	const char	*conv_cap_val_sf1(Xword, Half, Conv_fmt_flags_t,
755de777a60Sab 			    Conv_cap_val_sf1_buf_t *);
756*d29b2c44Sab extern	const char	*conv_dyn_flag1(Xword, Conv_fmt_flags_t,
757*d29b2c44Sab 			    Conv_dyn_flag1_buf_t *);
758*d29b2c44Sab extern	const char	*conv_dyn_flag(Xword, Conv_fmt_flags_t,
759*d29b2c44Sab 			    Conv_dyn_flag_buf_t *);
760*d29b2c44Sab extern	const char	*conv_dyn_posflag1(Xword, Conv_fmt_flags_t,
761de777a60Sab 			    Conv_dyn_posflag1_buf_t *);
762*d29b2c44Sab extern	const char	*conv_dyn_tag(Xword, Half, Conv_fmt_flags_t,
763*d29b2c44Sab 			    Conv_inv_buf_t *);
764*d29b2c44Sab extern	const char	*conv_dyn_feature1(Xword, Conv_fmt_flags_t,
765de777a60Sab 			    Conv_dyn_feature1_buf_t *);
766*d29b2c44Sab extern	const char	*conv_ehdr_class(uchar_t, Conv_fmt_flags_t,
767*d29b2c44Sab 			    Conv_inv_buf_t *);
768*d29b2c44Sab extern	const char	*conv_ehdr_data(uchar_t, Conv_fmt_flags_t,
769*d29b2c44Sab 			    Conv_inv_buf_t *);
770*d29b2c44Sab extern	const char	*conv_ehdr_flags(Half, Word, Conv_fmt_flags_t,
771*d29b2c44Sab 			    Conv_ehdr_flags_buf_t *);
772*d29b2c44Sab extern	const char	*conv_ehdr_mach(Half, Conv_fmt_flags_t,
773*d29b2c44Sab 			    Conv_inv_buf_t *);
774*d29b2c44Sab extern	const char	*conv_ehdr_osabi(uchar_t, Conv_fmt_flags_t,
775*d29b2c44Sab 			    Conv_inv_buf_t *);
776*d29b2c44Sab extern	const char	*conv_ehdr_type(Half, Conv_fmt_flags_t,
777*d29b2c44Sab 			    Conv_inv_buf_t *);
778*d29b2c44Sab extern	const char	*conv_ehdr_vers(Word, Conv_fmt_flags_t,
779*d29b2c44Sab 			    Conv_inv_buf_t *);
780*d29b2c44Sab extern	int		conv_expn_field(CONV_EXPN_FIELD_ARG *,
781*d29b2c44Sab 			    Conv_fmt_flags_t);
782*d29b2c44Sab extern	const char	*conv_invalid_val(Conv_inv_buf_t *, Xword,
783*d29b2c44Sab 			    Conv_fmt_flags_t);
784*d29b2c44Sab extern	const char	*conv_phdr_flags(Word, Conv_fmt_flags_t fmt_flags,
785*d29b2c44Sab 			    Conv_phdr_flags_buf_t *);
786*d29b2c44Sab extern	const char	*conv_phdr_type(Half, Word, Conv_fmt_flags_t,
787*d29b2c44Sab 			    Conv_inv_buf_t *);
788de777a60Sab extern	const char	*conv_reject_desc(Rej_desc *, Conv_reject_desc_buf_t *);
789*d29b2c44Sab extern	const char	*conv_reloc_type(Half, Word, Conv_fmt_flags_t,
790*d29b2c44Sab 			    Conv_inv_buf_t *);
791*d29b2c44Sab extern	const char	*conv_reloc_type_static(Half, Word, Conv_fmt_flags_t);
792*d29b2c44Sab extern	const char	*conv_reloc_386_type(Word, Conv_fmt_flags_t,
793*d29b2c44Sab 			    Conv_inv_buf_t *);
794*d29b2c44Sab extern	const char	*conv_reloc_amd64_type(Word, Conv_fmt_flags_t,
795*d29b2c44Sab 			    Conv_inv_buf_t *);
796*d29b2c44Sab extern	const char	*conv_reloc_SPARC_type(Word, Conv_fmt_flags_t,
797*d29b2c44Sab 			    Conv_inv_buf_t *);
798*d29b2c44Sab extern	const char	*conv_sec_flags(Xword, Conv_fmt_flags_t,
799*d29b2c44Sab 			    Conv_sec_flags_buf_t *);
800de777a60Sab extern	const char	*conv_sec_linkinfo(Word, Xword, Conv_inv_buf_t *);
801*d29b2c44Sab extern	const char	*conv_sec_type(Half, Word, Conv_fmt_flags_t,
802*d29b2c44Sab 			    Conv_inv_buf_t *);
803*d29b2c44Sab extern	const char	*conv_sym_info_bind(uchar_t, Conv_fmt_flags_t,
804*d29b2c44Sab 			    Conv_inv_buf_t *);
805*d29b2c44Sab extern	const char	*conv_sym_info_type(Half, uchar_t, Conv_fmt_flags_t,
806de777a60Sab 			    Conv_inv_buf_t *);
807de777a60Sab extern	const char	*conv_sym_shndx(Half, Conv_inv_buf_t *);
808de777a60Sab extern	const char	*conv_sym_other(uchar_t, Conv_inv_buf_t *);
809*d29b2c44Sab extern	const char	*conv_sym_other_vis(uchar_t, Conv_fmt_flags_t,
810*d29b2c44Sab 			    Conv_inv_buf_t *);
811de777a60Sab extern	const char	*conv_sym_value(Half, uchar_t, Addr, Conv_inv_buf_t *);
812*d29b2c44Sab extern	const char	*conv_sym_SPARC_value(Addr, Conv_fmt_flags_t,
813*d29b2c44Sab 			    Conv_inv_buf_t *);
814*d29b2c44Sab extern	const char	*conv_syminfo_flags(Xword flags, Conv_fmt_flags_t,
815*d29b2c44Sab 			    Conv_syminfo_flags_buf_t *syminfo_flags_buf);
8167c478bd9Sstevel@tonic-gate 
8177c478bd9Sstevel@tonic-gate #ifdef	__cplusplus
8187c478bd9Sstevel@tonic-gate }
8197c478bd9Sstevel@tonic-gate #endif
8207c478bd9Sstevel@tonic-gate 
8217c478bd9Sstevel@tonic-gate #endif /* _CONV_H */
822