9596 Initial xsave xstate_bv should not include all features
[unleashed.git] / usr / src / cmd / sgs / libconv / common / llib-lconv
blob42006517ce1bf6ec4c0fa61882c995bb97345ce7
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  */
23  * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved.
24  */
25 /* LINTLIBRARY */
26 /* PROTOLIB1 */
28 #include        <stdlib.h>
29 #include        <libelf.h>
30 #include        <_machelf.h>
31 #include        <sgs.h>
32 #include        <libld.h>
33 #include        <conv.h>
36  * Generic miscellaneous interfaces
37  */
38 uchar_t         conv_check_native(char **, char **);
39 const char      *conv_lddstub(int);
40 int             conv_sys_eclass(void);
41 int             conv_strproc_isspace(int);
42 char            *conv_strproc_trim(char *);
43 Boolean         conv_strproc_extract_value(char *, size_t, int, const char **);
47  * Generic core formatting and iteration functionality
48  */
49 conv_iter_ret_t _conv_iter_ds(conv_iter_osabi_t, Half, const conv_ds_t **,
50                     conv_iter_cb_t, void *, const char *);
51 conv_iter_ret_t _conv_iter_ds_msg(const conv_ds_msg_t *, conv_iter_cb_t,
52                     void *, const char *);
53 conv_iter_ret_t _conv_iter_msgarr(Conv_elfvalue_t, const Msg *, size_t,
54                     conv_iter_cb_t, void *, const char *);
55 conv_iter_ret_t _conv_iter_vd(const Val_desc *, conv_iter_cb_t,
56                     void *, const char *);
57 conv_iter_ret_t _conv_iter_vd2(conv_iter_osabi_t, Half, const Val_desc2 *,
58                     conv_iter_cb_t, void *, const char *);
59 int             conv_iter_strtol_init(const char *, conv_strtol_uvalue_t *);
60 conv_iter_ret_t conv_iter_strtol(const char *, Conv_elfvalue_t, void *);
61 const char      *_conv_map2str(Conv_inv_buf_t *, Conv_elfvalue_t,
62                     Conv_fmt_flags_t, size_t, const Msg *, const char *);
63 const char      *_conv_map_ds(uchar_t, Half, Conv_elfvalue_t,
64                     const conv_ds_t **, Conv_fmt_flags_t, Conv_inv_buf_t *,
65                     const char *);
66 const char      *_conv_map_vd2str(Conv_inv_buf_t *, Conv_elfvalue_t,
67                     Conv_fmt_flags_t, const Val_desc *, const char *);
68 const char      *_conv_map_vd22str(Conv_inv_buf_t *, uchar_t, Half,
69                     Conv_elfvalue_t, Conv_fmt_flags_t, const Val_desc2 *,
70                     const char *);
73  * Generic formatting interfaces.
74  */
75 const char      *conv_bnd_obj(uint_t, Conv_bnd_obj_buf_t *);
76 const char      *conv_bnd_type(uint_t, Conv_bnd_type_buf_t *);
77 const char      *conv_config_feat(int, Conv_config_feat_buf_t *);
78 const char      *conv_config_obj(ushort_t, Conv_config_obj_buf_t *);
79 const char      *conv_config_upm(const char *, const char *,
80                     const char *, size_t);
81 const char      *conv_cnote_auxv_af(Word, Conv_fmt_flags_t,
82                     Conv_cnote_auxv_af_buf_t *);
83 const char      *conv_cnote_auxv_type(Word, Conv_fmt_flags_t, Conv_inv_buf_t *);
84 const char      *conv_cnote_cc_content(Lword, Conv_fmt_flags_t,
85                     Conv_cnote_cc_content_buf_t *);
86 const char      *conv_cnote_errno(int, Conv_fmt_flags_t, Conv_inv_buf_t *);
87 const char      *conv_cnote_fault(Word, Conv_fmt_flags_t, Conv_inv_buf_t *);
88 const char      *conv_cnote_fltset(uint32_t *, int, Conv_fmt_flags_t,
89                     Conv_cnote_fltset_buf_t *);
90 const char      *conv_cnote_old_pr_flags(int, Conv_fmt_flags_t,
91                     Conv_cnote_old_pr_flags_buf_t *);
92 const char      *conv_cnote_pr_dmodel(Word, Conv_fmt_flags_t, Conv_inv_buf_t *);
93 const char      *conv_cnote_pr_flags(int, Conv_fmt_flags_t,
94                     Conv_cnote_pr_flags_buf_t *);
95 const char      *conv_cnote_proc_flag(int, Conv_fmt_flags_t,
96                     Conv_cnote_proc_flag_buf_t *);
97 const char      *conv_cnote_pr_regname(Half, int, Conv_fmt_flags_t,
98                     Conv_inv_buf_t *inv_buf);
99 const char      *conv_cnote_pr_stype(Word, Conv_fmt_flags_t, Conv_inv_buf_t *);
100 const char      *conv_cnote_pr_what(short, short, Conv_fmt_flags_t,
101                     Conv_inv_buf_t *);
102 const char      *conv_cnote_pr_why(short, Conv_fmt_flags_t, Conv_inv_buf_t *);
103 const char      *conv_cnote_priv(int, Conv_fmt_flags_t, Conv_inv_buf_t *);
104 const char      *conv_cnote_psetid(int, Conv_fmt_flags_t, Conv_inv_buf_t *);
105 const char      *conv_cnote_sa_flags(int, Conv_fmt_flags_t,
106                     Conv_cnote_sa_flags_buf_t *);
107 const char      *conv_cnote_signal(Word, Conv_fmt_flags_t, Conv_inv_buf_t *);
108 const char      *conv_cnote_si_code(Half, int, int, Conv_fmt_flags_t,
109                     Conv_inv_buf_t *);
110 const char      *conv_cnote_sigset(uint32_t *, int, Conv_fmt_flags_t,
111                     Conv_cnote_sigset_buf_t *);
112 const char      *conv_cnote_ss_flags(int, Conv_fmt_flags_t,
113                     Conv_cnote_ss_flags_buf_t *);
114 const char      *conv_cnote_syscall(Word, Conv_fmt_flags_t, Conv_inv_buf_t *);
115 const char      *conv_cnote_sysset(uint32_t *, int, Conv_fmt_flags_t,
116                     Conv_cnote_sysset_buf_t *);
117 const char      *conv_cnote_type(Word, Conv_fmt_flags_t, Conv_inv_buf_t *);
118 const char      *conv_def_tag(Symref, Conv_inv_buf_t *);
119 const char      *conv_demangle_name(const char *);
120 const char      *conv_dl_flag(int, Conv_fmt_flags_t, Conv_dl_flag_buf_t *);
121 const char      *conv_dl_info(int);
122 const char      *conv_dl_mode(int, int, Conv_dl_mode_buf_t *);
123 const char      *conv_dwarf_cfa(uchar_t, Conv_fmt_flags_t, Conv_inv_buf_t *);
124 const char      *conv_dwarf_ehe(uint_t, Conv_dwarf_ehe_buf_t *);
125 const char      *conv_dwarf_regname(Half, Word, Conv_fmt_flags_t,
126                     int *, Conv_inv_buf_t *);
127 const char      *conv_ehdr_abivers(uchar_t, Word, Conv_fmt_flags_t,
128                     Conv_inv_buf_t *);
129 const char      *conv_ehdr_class(uchar_t, Conv_fmt_flags_t, Conv_inv_buf_t *);
130 const char      *conv_ehdr_data(uchar_t, Conv_fmt_flags_t, Conv_inv_buf_t *);
131 const char      *conv_ehdr_flags(Half, Word, Conv_fmt_flags_t,
132                     Conv_ehdr_flags_buf_t *);
133 const char      *conv_ehdr_mach(Half, Conv_fmt_flags_t, Conv_inv_buf_t *);
134 const char      *conv_ehdr_osabi(uchar_t, Conv_fmt_flags_t, Conv_inv_buf_t *);
135 const char      *conv_ehdr_type(uchar_t, Half, Conv_fmt_flags_t,
136                     Conv_inv_buf_t *);
137 const char      *conv_ehdr_vers(Word, Conv_fmt_flags_t, Conv_inv_buf_t *);
138 const char      *conv_elfdata_type(Elf_Type, Conv_inv_buf_t *);
139 const char      *conv_ent_flags(ec_flags_t, Conv_ent_flags_buf_t *);
140 const char      *conv_ent_filcmp(Word, Conv_fmt_flags_t, Conv_inv_buf_t *);
141 const char      *conv_grphdl_flags(uint_t, Conv_grphdl_flags_buf_t *);
142 const char      *conv_grpdesc_flags(uint_t, Conv_grpdesc_flags_buf_t *);
143 const char      *conv_la_activity(uint_t, Conv_fmt_flags_t, Conv_inv_buf_t *);
144 const char      *conv_la_bind(uint_t, Conv_la_bind_buf_t *);
145 const char      *conv_la_search(uint_t, Conv_la_search_buf_t *);
146 const char      *conv_la_symbind(uint_t, Conv_la_symbind_buf_t *);
147 Isa_desc        *conv_isalist(void);
148 const char      *conv_mapfile_version(Word, Conv_fmt_flags_t,
149                     Conv_inv_buf_t *);
150 const char      *conv_phdr_flags(uchar_t, Word, Conv_fmt_flags_t,
151                     Conv_phdr_flags_buf_t *);
152 const char      *conv_phdr_type(uchar_t, Half, Word, Conv_fmt_flags_t,
153                     Conv_inv_buf_t *);
154 const char      *conv_reject_desc(Rej_desc *, Conv_reject_desc_buf_t *,
155                     Half mach);
156 const char      *conv_reloc_type(Half, Word, Conv_fmt_flags_t,
157                     Conv_inv_buf_t *);
158 const char      *conv_reloc_type_static(Half, Word, Conv_fmt_flags_t);
159 const char      *conv_reloc_386_type(Word, Conv_fmt_flags_t, Conv_inv_buf_t *);
160 const char      *conv_reloc_amd64_type(Word, Conv_fmt_flags_t,
161                     Conv_inv_buf_t *);
162 const char      *conv_reloc_SPARC_type(Word, Conv_fmt_flags_t,
163                     Conv_inv_buf_t *);
164 const char      *conv_sec_type(uchar_t, Half, Word, Conv_fmt_flags_t,
165                     Conv_inv_buf_t *);
166 const char      *conv_seg_flags(Half, Conv_seg_flags_buf_t *);
167 void            conv_str_to_c_literal(const char *buf, size_t n,
168                     Conv_str_to_c_literal_func_t *cb_func, void *uvalue);
169 const char      *conv_sym_info_bind(uchar_t, Conv_fmt_flags_t,
170                     Conv_inv_buf_t *);
171 const char      *conv_sym_info_type(Half, uchar_t, Conv_fmt_flags_t,
172                     Conv_inv_buf_t *);
173 const char      *conv_sym_shndx(uchar_t, Half, Half, Conv_fmt_flags_t,
174                     Conv_inv_buf_t *);
175 const char      *conv_sym_other(uchar_t, Conv_inv_buf_t *);
176 const char      *conv_sym_other_vis(uchar_t, Conv_fmt_flags_t,
177                     Conv_inv_buf_t *);
178 const char      *conv_syminfo_boundto(Half, Conv_fmt_flags_t, Conv_inv_buf_t *);
179 const char      *conv_syminfo_flags(Half, Conv_fmt_flags_t,
180                     Conv_syminfo_flags_buf_t *);
181 const char      *conv_time(struct timeval *, struct timeval *,
182                     Conv_time_buf_t *);
183 Uts_desc        *conv_uts(void);
184 const char      *conv_ver_flags(Half, Conv_fmt_flags_t, Conv_ver_flags_buf_t *);
185 const char      *conv_ver_index(Versym, int, Conv_inv_buf_t *);
189  * Generic iteration interfaces.
190  */
191 conv_iter_ret_t conv_iter_cap_tags(Conv_fmt_flags_t, conv_iter_cb_t, void *);
192 conv_iter_ret_t conv_iter_cap_val_hw1(Half, Conv_fmt_flags_t,
193                     conv_iter_cb_t, void *);
194 conv_iter_ret_t conv_iter_cap_val_hw2(Half, Conv_fmt_flags_t,
195                     conv_iter_cb_t, void *);
196 conv_iter_ret_t conv_iter_cap_val_sf1(Conv_fmt_flags_t, conv_iter_cb_t, void *);
198 conv_iter_ret_t conv_iter_dyn_feature1(Conv_fmt_flags_t,
199                     conv_iter_cb_t, void *);
200 conv_iter_ret_t conv_iter_dyn_flag(Conv_fmt_flags_t, conv_iter_cb_t, void *);
201 conv_iter_ret_t conv_iter_dyn_flag1(Conv_fmt_flags_t, conv_iter_cb_t, void *);
202 conv_iter_ret_t conv_iter_dyn_posflag1(Conv_fmt_flags_t,
203                     conv_iter_cb_t, void *);
204 conv_iter_ret_t conv_iter_dyn_tag(conv_iter_osabi_t, Half,
205                     Conv_fmt_flags_t, conv_iter_cb_t, void *);
207 conv_iter_ret_t conv_iter_ehdr_abivers(conv_iter_osabi_t,
208                     Conv_fmt_flags_t, conv_iter_cb_t, void *);
209 conv_iter_ret_t conv_iter_ehdr_class(Conv_fmt_flags_t, conv_iter_cb_t, void *);
210 conv_iter_ret_t conv_iter_ehdr_data(Conv_fmt_flags_t, conv_iter_cb_t, void *);
211 conv_iter_ret_t conv_iter_ehdr_eident(Conv_fmt_flags_t, conv_iter_cb_t, void *);
212 conv_iter_ret_t conv_iter_ehdr_flags(Half, Conv_fmt_flags_t,
213                     conv_iter_cb_t, void *);
214 conv_iter_ret_t conv_iter_ehdr_mach(Conv_fmt_flags_t, conv_iter_cb_t, void *);
215 conv_iter_ret_t conv_iter_ehdr_osabi(Conv_fmt_flags_t, conv_iter_cb_t, void *);
216 conv_iter_ret_t conv_iter_ehdr_type(conv_iter_osabi_t, Conv_fmt_flags_t,
217                     conv_iter_cb_t, void *);
218 conv_iter_ret_t conv_iter_ehdr_vers(Conv_fmt_flags_t, conv_iter_cb_t, void *);
220 conv_iter_ret_t conv_iter_phdr_flags(conv_iter_osabi_t,
221                     Conv_fmt_flags_t, conv_iter_cb_t, void *);
222 conv_iter_ret_t conv_iter_phdr_type(conv_iter_osabi_t, Conv_fmt_flags_t,
223                     conv_iter_cb_t, void *);
225 conv_iter_ret_t conv_iter_sec_flags(conv_iter_osabi_t, Half,
226                     Conv_fmt_flags_t, conv_iter_cb_t, void *);
227 conv_iter_ret_t conv_iter_sec_symtab(conv_iter_osabi_t,
228                     Conv_fmt_flags_t, conv_iter_cb_t, void *);
229 conv_iter_ret_t conv_iter_sec_type(conv_iter_osabi_t, Half,
230                     Conv_fmt_flags_t, conv_iter_cb_t, void *);
232 conv_iter_ret_t conv_iter_sym_info_bind(Conv_fmt_flags_t,
233                     conv_iter_cb_t, void *);
234 conv_iter_ret_t conv_iter_sym_other_vis(Conv_fmt_flags_t,
235                     conv_iter_cb_t, void *);
236 conv_iter_ret_t conv_iter_sym_shndx(conv_iter_osabi_t, Half,
237                     Conv_fmt_flags_t, conv_iter_cb_t, void *);
238 conv_iter_ret_t conv_iter_sym_info_type(Half, Conv_fmt_flags_t,
239                     conv_iter_cb_t, void *);
241 conv_iter_ret_t conv_iter_syminfo_boundto(Conv_fmt_flags_t,
242                     conv_iter_cb_t, void *);
243 conv_iter_ret_t conv_iter_syminfo_flags(Conv_fmt_flags_t,
244                             conv_iter_cb_t, void *);
248  * ELFCLASS-specific core formatting functionality
249  */
250 int             _conv_expn_field(CONV_EXPN_FIELD_ARG *,
251                     const Val_desc *, Conv_fmt_flags_t, const char *);
252 int             _conv_expn_field2(CONV_EXPN_FIELD_ARG *, uchar_t,
253                     Half, const Val_desc2 *, Conv_fmt_flags_t, const char *);
254 const char      *conv_invalid_val(Conv_inv_buf_t *, Xword, Conv_fmt_flags_t);
258  * Define all class specific routines.
259  */
260 const char      *conv32_cap_tag(Elf32_Word, Conv_fmt_flags_t,
261                     Conv_inv_buf_t *);
262 const char      *conv64_cap_tag(Elf64_Xword, Conv_fmt_flags_t,
263                     Conv_inv_buf_t *);
264 const char      *conv32_cap_val(Elf32_Word, Elf32_Word, Half,
265                     Conv_fmt_flags_t, Conv_cap_val_buf_t *);
266 const char      *conv64_cap_val(Elf64_Xword, Elf64_Xword, Half,
267                     Conv_fmt_flags_t, Conv_cap_val_buf_t *);
268 const char      *conv32_cap_val_hw1(Elf32_Word, Half, Conv_fmt_flags_t,
269                     Conv_cap_val_hw1_buf_t *);
270 const char      *conv32_cap_val_hw2(Elf32_Word, Half, Conv_fmt_flags_t,
271                     Conv_cap_val_hw2_buf_t *);
272 const char      *conv64_cap_val_hw1(Elf64_Xword, Half, Conv_fmt_flags_t,
273                     Conv_cap_val_hw1_buf_t *);
274 const char      *conv64_cap_val_hw2(Elf64_Xword, Half, Conv_fmt_flags_t,
275                     Conv_cap_val_hw2_buf_t *);
276 const char      *conv32_cap_val_sf1(Elf32_Word, Half, Conv_fmt_flags_t,
277                     Conv_cap_val_sf1_buf_t *);
278 const char      *conv64_cap_val_sf1(Elf64_Xword, Half, Conv_fmt_flags_t,
279                     Conv_cap_val_sf1_buf_t *);
280 const char      *conv32_dyn_flag1(Elf32_Word, Conv_fmt_flags_t,
281                     Conv_dyn_flag1_buf_t *);
282 const char      *conv64_dyn_flag1(Elf64_Xword, Conv_fmt_flags_t,
283                     Conv_dyn_flag1_buf_t *);
284 const char      *conv32_dyn_flag(Elf32_Word, int, Conv_dyn_flag_buf_t *);
285 const char      *conv64_dyn_flag(Elf64_Xword, int, Conv_dyn_flag_buf_t *);
286 const char      *conv32_dyn_posflag1(Elf32_Word, int,
287                     Conv_dyn_posflag1_buf_t *);
288 const char      *conv64_dyn_posflag1(Elf64_Xword, int,
289                     Conv_dyn_posflag1_buf_t *);
290 const char      *conv32_dyn_tag(Elf32_Word, uchar_t, Elf32_Half,
291                     Conv_fmt_flags_t, Conv_inv_buf_t *);
292 const char      *conv64_dyn_tag(Elf64_Xword, uchar_t, Elf64_Half,
293                     Conv_fmt_flags_t, Conv_inv_buf_t *);
294 const char      *conv32_dyn_feature1(Elf32_Word, int,
295                     Conv_dyn_feature1_buf_t *);
296 const char      *conv64_dyn_feature1(Elf64_Xword, int,
297                     Conv_dyn_feature1_buf_t *);
298 const char      *conv32_sec_flags(uchar_t, Half, Elf32_Word, Conv_fmt_flags_t,
299                     Conv_sec_flags_buf_t *);
300 const char      *conv64_sec_flags(uchar_t, Half, Elf64_Xword, Conv_fmt_flags_t,
301                     Conv_sec_flags_buf_t *);
302 const char      *conv32_sec_linkinfo(Elf32_Word, Elf32_Word,
303                     Conv_inv_buf_t *);
304 const char      *conv64_sec_linkinfo(Elf64_Word, Elf64_Xword,
305                     Conv_inv_buf_t *);
306 const char      *conv32_sym_value(Elf32_Half, uchar_t, Elf32_Addr,
307                     Conv_inv_buf_t *);
308 const char      *conv64_sym_value(Elf64_Half, uchar_t, Elf64_Addr,
309                     Conv_inv_buf_t *);
310 const char      *conv32_sym_SPARC_value(Elf32_Addr, int, Conv_inv_buf_t *);
311 const char      *conv64_sym_SPARC_value(Elf64_Addr, int, Conv_inv_buf_t *);