conv.h revision 1976:f0691a145b7e
1/*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
7 *
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
12 *
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 *
19 * CDDL HEADER END
20 */
21
22/*
23 *	Copyright (c) 1988 AT&T
24 *	  All Rights Reserved
25 *
26 * Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
27 * Use is subject to license terms.
28 */
29
30#ifndef	_CONV_H
31#define	_CONV_H
32
33#pragma ident	"%Z%%M%	%I%	%E% SMI"
34
35/*
36 * Global include file for conversion library.
37 */
38
39#include <stdlib.h>
40#include <libelf.h>
41#include <dlfcn.h>
42#include <libld.h>
43#include <sgs.h>
44#include <machdep.h>
45
46#ifdef	__cplusplus
47extern "C" {
48#endif
49
50/*
51 * Configuration features available - maintained here (instead of debug.h)
52 * to save libconv from having to include debug.h which results in numerous
53 * "declared but not used or defined" lint errors.
54 */
55#define	CONF_EDLIBPATH	0x000100	/* ELF default library path */
56#define	CONF_ESLIBPATH	0x000200	/* ELF secure library path */
57#define	CONF_ADLIBPATH	0x000400	/* AOUT default library path */
58#define	CONF_ASLIBPATH	0x000800	/* AOUT secure library path */
59#define	CONF_DIRCFG	0x001000	/* directory configuration available */
60#define	CONF_OBJALT	0x002000	/* object alternatives available */
61#define	CONF_MEMRESV	0x004000	/* memory reservation required */
62#define	CONF_ENVS	0x008000	/* environment variables available */
63#define	CONF_FLTR	0x010000	/* filter information available */
64#define	CONF_FEATMSK	0xffff00
65
66/*
67 * Various values that can't be matched to a symbolic definition are converted
68 * to a numeric string.  Each function that may require this fallback maintains
69 * its own static string buffer, as many conversion routines may be called for
70 * one final diagnostic.  See conv_invalid_val().
71 *
72 * The string size reflects the largest possible decimal number plus a trailing
73 * null.  Typically however, values are hex with a leading "0x".
74 */
75#if	defined(_ELF64)
76#define	CONV_INV_STRSIZE	22
77#else
78#define	CONV_INV_STRSIZE	12
79#endif
80
81/*
82 * Flags that alter standard formatting for conversion routines.
83 */
84#define	CONV_FMT_DECIMAL	0x1	/* conv_invalid_val() should print */
85					/*    integer print as decimal */
86					/*    (default is hex) */
87#define	CONV_FMT_SPACE		0x2	/* conv_invalid_val() should append */
88					/*    a space after the number.  */
89#define	CONV_FMT_ALTDUMP	0x4	/* Output strings using the versions */
90					/*    used by the dump program. */
91#define	CONV_FMT_ALTFILE	0x8	/* Output strings in the form used */
92					/*    by the file(1) command */
93
94/*
95 * Mask of CONV_FMT bits that reflect a desire to use alternate strings.
96 */
97#define	CONV_FMTALTMASK (CONV_FMT_ALTDUMP|CONV_FMT_ALTFILE)
98
99/*
100 * The expansion of bit-field data items is driven from a value descriptor and
101 * the conv_expn_field() routine.
102 */
103typedef struct {
104	Xword		v_val;		/* expansion value */
105	const char	*v_msg;		/* associated message string */
106} Val_desc;
107
108/*
109 * Define all generic interfaces.
110 */
111extern	void		conv_check_native(char **, char **);
112extern	const char	*conv_config_feat(int);
113extern	const char	*conv_config_obj(ushort_t);
114extern	const char	*conv_config_upm(const char *, const char *,
115			    const char *, size_t);
116extern	const char	*conv_def_tag(Symref);
117extern	const char	*conv_demangle_name(const char *);
118extern	const char	*conv_dl_flag(int, int);
119extern	const char	*conv_dl_mode(int, int);
120extern	const char	*conv_dwarf_ehe(uint_t);
121extern	const char	*conv_elfdata_type(Elf_Type);
122extern	const char	*conv_grphdl_flags(uint_t);
123extern	Isa_desc	*conv_isalist(void);
124extern	const char	*conv_lddstub(int);
125extern	const char	*conv_seg_flags(Half);
126extern	int		conv_sys_eclass();
127extern	Uts_desc	*conv_uts(void);
128extern	const char	*conv_ver_flags(Half);
129
130/*
131 * Define all class specific routines.
132 */
133#if	defined(_ELF64)
134#define	conv_bnd_obj		conv64_bnd_obj
135#define	conv_bnd_type		conv64_bnd_type
136#define	conv_cap_tag		conv64_cap_tag
137#define	conv_cap_val		conv64_cap_val
138#define	conv_cap_val_hw1	conv64_cap_val_hw1
139#define	conv_cap_val_sf1	conv64_cap_val_sf1
140#define	conv_dyn_feature1	conv64_dyn_feature1
141#define	conv_dyn_flag1		conv64_dyn_flag1
142#define	conv_dyn_flag		conv64_dyn_flag
143#define	conv_dyn_posflag1	conv64_dyn_posflag1
144#define	conv_dyn_tag		conv64_dyn_tag
145#define	conv_ehdr_class		conv64_ehdr_class
146#define	conv_ehdr_data		conv64_ehdr_data
147#define	conv_ehdr_flags		conv64_ehdr_flags
148#define	conv_ehdr_mach		conv64_ehdr_mach
149#define	conv_ehdr_type		conv64_ehdr_type
150#define	conv_ehdr_vers		conv64_ehdr_vers
151#define	conv_expn_field		conv64_expn_field
152#define	conv_invalid_val	conv64_invalid_val
153#define	conv_phdr_flags		conv64_phdr_flags
154#define	conv_phdr_type		conv64_phdr_type
155#define	conv_reject_desc	conv64_reject_desc
156#define	conv_reloc_type		conv64_reloc_type
157#define	conv_reloc_386_type	conv64_reloc_386_type
158#define	conv_reloc_amd64_type	conv64_reloc_amd64_type
159#define	conv_reloc_SPARC_type	conv64_reloc_SPARC_type
160#define	conv_sec_flags		conv64_sec_flags
161#define	conv_sec_info		conv64_sec_info
162#define	conv_sec_type		conv64_sec_type
163#define	conv_sym_info_bind	conv64_sym_info_bind
164#define	conv_sym_info_type	conv64_sym_info_type
165#define	conv_sym_shndx		conv64_sym_shndx
166#define	conv_sym_other		conv64_sym_other
167#define	conv_sym_value		conv64_sym_value
168#define	conv_sym_SPARC_value	conv64_sym_SPARC_value
169#else
170#define	conv_bnd_obj		conv32_bnd_obj
171#define	conv_bnd_type		conv32_bnd_type
172#define	conv_cap_tag		conv32_cap_tag
173#define	conv_cap_val		conv32_cap_val
174#define	conv_cap_val_hw1	conv32_cap_val_hw1
175#define	conv_cap_val_sf1	conv32_cap_val_sf1
176#define	conv_dyn_feature1	conv32_dyn_feature1
177#define	conv_dyn_flag1		conv32_dyn_flag1
178#define	conv_dyn_flag		conv32_dyn_flag
179#define	conv_dyn_posflag1	conv32_dyn_posflag1
180#define	conv_dyn_tag		conv32_dyn_tag
181#define	conv_ehdr_class		conv32_ehdr_class
182#define	conv_ehdr_data		conv32_ehdr_data
183#define	conv_ehdr_flags		conv32_ehdr_flags
184#define	conv_ehdr_mach		conv32_ehdr_mach
185#define	conv_ehdr_type		conv32_ehdr_type
186#define	conv_ehdr_vers		conv32_ehdr_vers
187#define	conv_expn_field		conv32_expn_field
188#define	conv_invalid_val	conv32_invalid_val
189#define	conv_phdr_flags		conv32_phdr_flags
190#define	conv_phdr_type		conv32_phdr_type
191#define	conv_reject_desc	conv32_reject_desc
192#define	conv_reloc_type		conv32_reloc_type
193#define	conv_reloc_386_type	conv32_reloc_386_type
194#define	conv_reloc_amd64_type	conv32_reloc_amd64_type
195#define	conv_reloc_SPARC_type	conv32_reloc_SPARC_type
196#define	conv_sec_flags		conv32_sec_flags
197#define	conv_sec_info		conv32_sec_info
198#define	conv_sec_type		conv32_sec_type
199#define	conv_sym_info_bind	conv32_sym_info_bind
200#define	conv_sym_info_type	conv32_sym_info_type
201#define	conv_sym_shndx		conv32_sym_shndx
202#define	conv_sym_other		conv32_sym_other
203#define	conv_sym_value		conv32_sym_value
204#define	conv_sym_SPARC_value	conv32_sym_SPARC_value
205#endif
206
207extern	const char	*conv_bnd_obj(uint_t);
208extern	const char	*conv_bnd_type(uint_t);
209extern	const char	*conv_cap_tag(Xword);
210extern	const char	*conv_cap_val(Xword, Xword, Half);
211extern	const char	*conv_cap_val_hw1(Xword, Half);
212extern	const char	*conv_cap_val_sf1(Xword, Half);
213extern	const char	*conv_dyn_flag1(Xword);
214extern	const char	*conv_dyn_flag(Xword);
215extern	const char	*conv_dyn_posflag1(Xword);
216extern	const char	*conv_dyn_tag(Xword, Half, int);
217extern	const char	*conv_dyn_feature1(Xword);
218extern	const char	*conv_ehdr_class(uchar_t, int);
219extern	const char	*conv_ehdr_data(uchar_t, int);
220extern	const char	*conv_ehdr_flags(Half, Word);
221extern	const char	*conv_ehdr_mach(Half, int);
222extern	const char	*conv_ehdr_type(Half, int);
223extern	const char	*conv_ehdr_vers(Word, int);
224extern	int		conv_expn_field(char *, size_t, const Val_desc *,
225			    Xword, Xword, const char *, int);
226extern	const char	*conv_invalid_val(char *, size_t, Xword, int);
227extern	const char	*conv_phdr_flags(Word);
228extern	const char	*conv_phdr_type(Half, Word);
229extern	const char	*conv_reject_desc(Rej_desc *);
230extern	const char	*conv_reloc_type(Half, Word, int);
231extern	const char	*conv_reloc_386_type(Word, int);
232extern	const char	*conv_reloc_amd64_type(Word, int);
233extern	const char	*conv_reloc_SPARC_type(Word, int);
234extern	const char	*conv_sec_flags(Xword);
235extern	const char	*conv_sec_info(Word, Xword);
236extern	const char	*conv_sec_type(Half, Word, int);
237extern	const char	*conv_sym_info_bind(uchar_t, int);
238extern	const char	*conv_sym_info_type(Half, uchar_t, int);
239extern	const char	*conv_sym_shndx(Half);
240extern	const char	*conv_sym_other(uchar_t);
241extern	const char	*conv_sym_value(Half, uchar_t, Addr);
242extern	const char	*conv_sym_SPARC_value(Addr, int);
243
244#ifdef	__cplusplus
245}
246#endif
247
248#endif /* _CONV_H */
249