xref: /titanic_50/usr/src/cmd/sgs/elfedit/common/elfconst.c (revision 1d03c31e0733adea0edef54f0d5d2ea9639ecd2a)
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 2007 Sun Microsystems, Inc.  All rights reserved.
24  * Use is subject to license terms.
25  */
26 #pragma ident	"%Z%%M%	%I%	%E% SMI"
27 
28 #include	<stdlib.h>
29 #include	<stdio.h>
30 #include	<unistd.h>
31 #include	<libintl.h>
32 #include	<libelf.h>
33 #include	<sys/machelf.h>
34 #include	<link.h>
35 #include	<strings.h>
36 #include	<ctype.h>
37 #include	<elfedit.h>
38 #include	<_elfedit.h>
39 #include	<sys/elf_SPARC.h>
40 #include	<sys/elf_amd64.h>
41 #include	<sys/auxv_386.h>
42 #include	<sys/auxv_SPARC.h>
43 #include	<msg.h>
44 
45 
46 
47 /*
48  * This file contains support for mapping well known ELF constants
49  * to their numeric values. It is a layer on top of the elfedit_atoui()
50  * routines defined in util.c. The idea is that centralizing all the
51  * support for such constants will improve consistency between modules,
52  * allow for sharing of commonly needed items, and make the modules
53  * simpler.
54  */
55 
56 
57 
58 
59 /*
60  * elfedit output style, with and without leading -o
61  */
62 static elfedit_atoui_sym_t sym_outstyle[] = {
63 	{ MSG_ORIG(MSG_STR_DEFAULT),		ELFEDIT_OUTSTYLE_DEFAULT },
64 	{ MSG_ORIG(MSG_STR_SIMPLE),		ELFEDIT_OUTSTYLE_SIMPLE },
65 	{ MSG_ORIG(MSG_STR_NUM),		ELFEDIT_OUTSTYLE_NUM },
66 	{ NULL }
67 };
68 static elfedit_atoui_sym_t sym_minus_o_outstyle[] = {
69 	{ MSG_ORIG(MSG_STR_MINUS_O_DEFAULT),	ELFEDIT_OUTSTYLE_DEFAULT },
70 	{ MSG_ORIG(MSG_STR_MINUS_O_SIMPLE),	ELFEDIT_OUTSTYLE_SIMPLE },
71 	{ MSG_ORIG(MSG_STR_MINUS_O_NUM),	ELFEDIT_OUTSTYLE_NUM },
72 	{ NULL }
73 };
74 
75 
76 /*
77  * Booleans
78  */
79 static elfedit_atoui_sym_t sym_bool[] = {
80 	{ MSG_ORIG(MSG_STR_T),			1 },
81 	{ MSG_ORIG(MSG_STR_F),			0 },
82 	{ MSG_ORIG(MSG_STR_TRUE),		1 },
83 	{ MSG_ORIG(MSG_STR_FALSE),		0 },
84 	{ MSG_ORIG(MSG_STR_ON),			1 },
85 	{ MSG_ORIG(MSG_STR_OFF),		0 },
86 	{ MSG_ORIG(MSG_STR_YES),		1 },
87 	{ MSG_ORIG(MSG_STR_NO),			0 },
88 	{ MSG_ORIG(MSG_STR_Y),			1 },
89 	{ MSG_ORIG(MSG_STR_N),			0 },
90 	{ NULL }
91 };
92 
93 /*
94  * ELF section indexes with support for the special index names.
95  */
96 static elfedit_atoui_sym_t sym_shn[] = {
97 	{ MSG_ORIG(MSG_SHN_UNDEF),		SHN_UNDEF },
98 	{ MSG_ORIG(MSG_SHN_UNDEF_ALT1),		SHN_UNDEF },
99 
100 	{ MSG_ORIG(MSG_SHN_SUNW_IGNORE),	SHN_SUNW_IGNORE },
101 	{ MSG_ORIG(MSG_SHN_SUNW_IGNORE_ALT1),	SHN_SUNW_IGNORE },
102 
103 	{ MSG_ORIG(MSG_SHN_BEFORE),		SHN_BEFORE },
104 	{ MSG_ORIG(MSG_SHN_BEFORE_ALT1),	SHN_BEFORE },
105 
106 	{ MSG_ORIG(MSG_SHN_AFTER),		SHN_AFTER },
107 	{ MSG_ORIG(MSG_SHN_AFTER_ALT1), 	SHN_AFTER },
108 
109 	{ MSG_ORIG(MSG_SHN_AMD64_LCOMMON), 	SHN_AMD64_LCOMMON },
110 	{ MSG_ORIG(MSG_SHN_AMD64_LCOMMON_ALT1),	SHN_AMD64_LCOMMON },
111 
112 	{ MSG_ORIG(MSG_SHN_ABS),		SHN_ABS },
113 	{ MSG_ORIG(MSG_SHN_ABS_ALT1),		SHN_ABS },
114 
115 	{ MSG_ORIG(MSG_SHN_COMMON),		SHN_COMMON },
116 	{ MSG_ORIG(MSG_SHN_COMMON_ALT1),	SHN_COMMON },
117 
118 	{ MSG_ORIG(MSG_SHN_XINDEX),		SHN_XINDEX },
119 	{ MSG_ORIG(MSG_SHN_XINDEX_ALT1),	SHN_XINDEX },
120 
121 	{ NULL }
122 };
123 
124 /*
125  * ELF section types.
126  */
127 static elfedit_atoui_sym_t sym_sht[] = {
128 	{ MSG_ORIG(MSG_SHT_NULL),		SHT_NULL },
129 	{ MSG_ORIG(MSG_SHT_NULL_ALT1),		SHT_NULL },
130 
131 	{ MSG_ORIG(MSG_SHT_PROGBITS),		SHT_PROGBITS },
132 	{ MSG_ORIG(MSG_SHT_PROGBITS_ALT1),	SHT_PROGBITS },
133 
134 	{ MSG_ORIG(MSG_SHT_SYMTAB),		SHT_SYMTAB },
135 	{ MSG_ORIG(MSG_SHT_SYMTAB_ALT1),	SHT_SYMTAB },
136 
137 	{ MSG_ORIG(MSG_SHT_STRTAB),		SHT_STRTAB },
138 	{ MSG_ORIG(MSG_SHT_STRTAB_ALT1),	SHT_STRTAB },
139 
140 	{ MSG_ORIG(MSG_SHT_RELA),		SHT_RELA },
141 	{ MSG_ORIG(MSG_SHT_RELA_ALT1),		SHT_RELA },
142 
143 	{ MSG_ORIG(MSG_SHT_HASH),		SHT_HASH },
144 	{ MSG_ORIG(MSG_SHT_HASH_ALT1),		SHT_HASH },
145 
146 	{ MSG_ORIG(MSG_SHT_DYNAMIC),		SHT_DYNAMIC },
147 	{ MSG_ORIG(MSG_SHT_DYNAMIC_ALT1),	SHT_DYNAMIC },
148 
149 	{ MSG_ORIG(MSG_SHT_NOTE),		SHT_NOTE },
150 	{ MSG_ORIG(MSG_SHT_NOTE_ALT1),		SHT_NOTE },
151 
152 	{ MSG_ORIG(MSG_SHT_NOBITS),		SHT_NOBITS },
153 	{ MSG_ORIG(MSG_SHT_NOBITS_ALT1),	SHT_NOBITS },
154 
155 	{ MSG_ORIG(MSG_SHT_REL),		SHT_REL },
156 	{ MSG_ORIG(MSG_SHT_REL_ALT1),		SHT_REL },
157 
158 	{ MSG_ORIG(MSG_SHT_SHLIB),		SHT_SHLIB },
159 	{ MSG_ORIG(MSG_SHT_SHLIB_ALT1),		SHT_SHLIB },
160 
161 	{ MSG_ORIG(MSG_SHT_DYNSYM),		SHT_DYNSYM },
162 	{ MSG_ORIG(MSG_SHT_DYNSYM_ALT1),	SHT_DYNSYM },
163 
164 	{ MSG_ORIG(MSG_SHT_INIT_ARRAY),		SHT_INIT_ARRAY },
165 	{ MSG_ORIG(MSG_SHT_INIT_ARRAY_ALT1),	SHT_INIT_ARRAY },
166 
167 	{ MSG_ORIG(MSG_SHT_FINI_ARRAY),		SHT_FINI_ARRAY },
168 	{ MSG_ORIG(MSG_SHT_FINI_ARRAY_ALT1),	SHT_FINI_ARRAY },
169 
170 	{ MSG_ORIG(MSG_SHT_PREINIT_ARRAY),	SHT_PREINIT_ARRAY },
171 	{ MSG_ORIG(MSG_SHT_PREINIT_ARRAY_ALT1),	SHT_PREINIT_ARRAY },
172 
173 	{ MSG_ORIG(MSG_SHT_GROUP),		SHT_GROUP },
174 	{ MSG_ORIG(MSG_SHT_GROUP_ALT1),		SHT_GROUP },
175 
176 	{ MSG_ORIG(MSG_SHT_SYMTAB_SHNDX),	SHT_SYMTAB_SHNDX },
177 	{ MSG_ORIG(MSG_SHT_SYMTAB_SHNDX_ALT1),	SHT_SYMTAB_SHNDX },
178 
179 	{ MSG_ORIG(MSG_SHT_SUNW_SYMSORT),	SHT_SUNW_symsort },
180 	{ MSG_ORIG(MSG_SHT_SUNW_SYMSORT_ALT1),	SHT_SUNW_symsort },
181 
182 	{ MSG_ORIG(MSG_SHT_SUNW_TLSSORT),	SHT_SUNW_tlssort },
183 	{ MSG_ORIG(MSG_SHT_SUNW_TLSSORT_ALT1),	SHT_SUNW_tlssort },
184 
185 	{ MSG_ORIG(MSG_SHT_SUNW_LDYNSYM),	SHT_SUNW_LDYNSYM },
186 	{ MSG_ORIG(MSG_SHT_SUNW_LDYNSYM_ALT1),	SHT_SUNW_LDYNSYM },
187 
188 	{ MSG_ORIG(MSG_SHT_SUNW_DOF),		SHT_SUNW_dof },
189 	{ MSG_ORIG(MSG_SHT_SUNW_DOF_ALT1),	SHT_SUNW_dof },
190 
191 	{ MSG_ORIG(MSG_SHT_SUNW_CAP),		SHT_SUNW_cap },
192 	{ MSG_ORIG(MSG_SHT_SUNW_CAP_ALT1),	SHT_SUNW_cap },
193 
194 	{ MSG_ORIG(MSG_SHT_SUNW_SIGNATURE),	SHT_SUNW_SIGNATURE },
195 	{ MSG_ORIG(MSG_SHT_SUNW_SIGNATURE_ALT1), SHT_SUNW_SIGNATURE },
196 
197 	{ MSG_ORIG(MSG_SHT_SUNW_ANNOTATE),	SHT_SUNW_ANNOTATE },
198 	{ MSG_ORIG(MSG_SHT_SUNW_ANNOTATE_ALT1),	SHT_SUNW_ANNOTATE },
199 
200 	{ MSG_ORIG(MSG_SHT_SUNW_DEBUGSTR),	SHT_SUNW_DEBUGSTR },
201 	{ MSG_ORIG(MSG_SHT_SUNW_DEBUGSTR_ALT1),	SHT_SUNW_DEBUGSTR },
202 
203 	{ MSG_ORIG(MSG_SHT_SUNW_DEBUG),		SHT_SUNW_DEBUG },
204 	{ MSG_ORIG(MSG_SHT_SUNW_DEBUG_ALT1),	SHT_SUNW_DEBUG },
205 
206 	{ MSG_ORIG(MSG_SHT_SUNW_MOVE),		SHT_SUNW_move },
207 	{ MSG_ORIG(MSG_SHT_SUNW_MOVE_ALT1),	SHT_SUNW_move },
208 
209 	{ MSG_ORIG(MSG_SHT_SUNW_COMDAT),	SHT_SUNW_COMDAT },
210 	{ MSG_ORIG(MSG_SHT_SUNW_COMDAT_ALT1),	SHT_SUNW_COMDAT },
211 
212 	{ MSG_ORIG(MSG_SHT_SUNW_SYMINFO),	SHT_SUNW_syminfo },
213 	{ MSG_ORIG(MSG_SHT_SUNW_SYMINFO_ALT1),	SHT_SUNW_syminfo },
214 
215 	{ MSG_ORIG(MSG_SHT_SUNW_VERDEF),	SHT_SUNW_verdef },
216 	{ MSG_ORIG(MSG_SHT_SUNW_VERDEF_ALT1),	SHT_SUNW_verdef },
217 
218 	{ MSG_ORIG(MSG_SHT_GNU_VERDEF),		SHT_GNU_verdef },
219 	{ MSG_ORIG(MSG_SHT_GNU_VERDEF_ALT1),	SHT_GNU_verdef },
220 
221 	{ MSG_ORIG(MSG_SHT_SUNW_VERNEED),	SHT_SUNW_verneed },
222 	{ MSG_ORIG(MSG_SHT_SUNW_VERNEED_ALT1),	SHT_SUNW_verneed },
223 
224 	{ MSG_ORIG(MSG_SHT_GNU_VERNEED),	SHT_GNU_verneed },
225 	{ MSG_ORIG(MSG_SHT_GNU_VERNEED_ALT1),	SHT_GNU_verneed },
226 
227 	{ MSG_ORIG(MSG_SHT_SUNW_VERSYM),	SHT_SUNW_versym },
228 	{ MSG_ORIG(MSG_SHT_SUNW_VERSYM_ALT1),	SHT_SUNW_versym },
229 
230 	{ MSG_ORIG(MSG_SHT_GNU_VERSYM),		SHT_GNU_versym },
231 	{ MSG_ORIG(MSG_SHT_GNU_VERSYM_ALT1),	SHT_GNU_versym },
232 
233 	{ MSG_ORIG(MSG_SHT_SPARC_GOTDATA),	SHT_SPARC_GOTDATA },
234 	{ MSG_ORIG(MSG_SHT_SPARC_GOTDATA_ALT1),	SHT_SPARC_GOTDATA },
235 
236 	{ MSG_ORIG(MSG_SHT_AMD64_UNWIND),	SHT_AMD64_UNWIND },
237 	{ MSG_ORIG(MSG_SHT_AMD64_UNWIND_ALT1),	SHT_AMD64_UNWIND },
238 
239 	{ NULL }
240 };
241 
242 /*
243  * ELF section types.
244  */
245 static elfedit_atoui_sym_t sym_sht_strtab[] = {
246 	{ MSG_ORIG(MSG_SHT_STRTAB),		SHT_STRTAB },
247 	{ MSG_ORIG(MSG_SHT_STRTAB_ALT1),	SHT_STRTAB },
248 
249 	{ NULL }
250 };
251 
252 
253 /*
254  * ELF section types for symbol tables
255  */
256 static elfedit_atoui_sym_t sym_sht_allsymtab[] = {
257 	{ MSG_ORIG(MSG_SHT_SYMTAB),		SHT_SYMTAB },
258 	{ MSG_ORIG(MSG_SHT_SYMTAB_ALT1),	SHT_SYMTAB },
259 
260 	{ MSG_ORIG(MSG_SHT_DYNSYM),		SHT_DYNSYM },
261 	{ MSG_ORIG(MSG_SHT_DYNSYM_ALT1),	SHT_DYNSYM },
262 
263 	{ MSG_ORIG(MSG_SHT_SUNW_LDYNSYM),	SHT_SUNW_LDYNSYM },
264 	{ MSG_ORIG(MSG_SHT_SUNW_LDYNSYM_ALT1),	SHT_SUNW_LDYNSYM },
265 
266 	{ NULL }
267 };
268 
269 /*
270  * ELF section types for SHT_SYMTAB
271  */
272 static elfedit_atoui_sym_t sym_sht_symtab[] = {
273 	{ MSG_ORIG(MSG_SHT_SYMTAB),		SHT_SYMTAB },
274 	{ MSG_ORIG(MSG_SHT_SYMTAB_ALT1),	SHT_SYMTAB },
275 
276 	{ NULL }
277 };
278 
279 /*
280  * ELF section types for SHT_SYMTAB
281  */
282 static elfedit_atoui_sym_t sym_sht_dynsym[] = {
283 	{ MSG_ORIG(MSG_SHT_DYNSYM),		SHT_DYNSYM },
284 	{ MSG_ORIG(MSG_SHT_DYNSYM_ALT1),	SHT_DYNSYM },
285 
286 	{ NULL }
287 };
288 
289 /*
290  * ELF section types for SHT_SUNW_LDYNSYM
291  */
292 static elfedit_atoui_sym_t sym_sht_ldynsym[] = {
293 	{ MSG_ORIG(MSG_SHT_SUNW_LDYNSYM),	SHT_SUNW_LDYNSYM },
294 	{ MSG_ORIG(MSG_SHT_SUNW_LDYNSYM_ALT1),	SHT_SUNW_LDYNSYM },
295 
296 	{ NULL }
297 };
298 
299 /*
300  * ELF dynamic tag DT_ values
301  */
302 static elfedit_atoui_sym_t sym_dt[] = {
303 	{ MSG_ORIG(MSG_DT_NULL),		DT_NULL },
304 	{ MSG_ORIG(MSG_DT_NULL_ALT1),		DT_NULL },
305 
306 	{ MSG_ORIG(MSG_DT_NEEDED),		DT_NEEDED },
307 	{ MSG_ORIG(MSG_DT_NEEDED_ALT1),		DT_NEEDED },
308 
309 	{ MSG_ORIG(MSG_DT_PLTRELSZ),		DT_PLTRELSZ },
310 	{ MSG_ORIG(MSG_DT_PLTRELSZ_ALT1),	DT_PLTRELSZ },
311 
312 	{ MSG_ORIG(MSG_DT_PLTGOT),		DT_PLTGOT },
313 	{ MSG_ORIG(MSG_DT_PLTGOT_ALT1),		DT_PLTGOT },
314 
315 	{ MSG_ORIG(MSG_DT_HASH),		DT_HASH },
316 	{ MSG_ORIG(MSG_DT_HASH_ALT1),		DT_HASH },
317 
318 	{ MSG_ORIG(MSG_DT_STRTAB),		DT_STRTAB },
319 	{ MSG_ORIG(MSG_DT_STRTAB_ALT1),		DT_STRTAB },
320 
321 	{ MSG_ORIG(MSG_DT_SYMTAB),		DT_SYMTAB },
322 	{ MSG_ORIG(MSG_DT_SYMTAB_ALT1),		DT_SYMTAB },
323 
324 	{ MSG_ORIG(MSG_DT_RELA),		DT_RELA },
325 	{ MSG_ORIG(MSG_DT_RELA_ALT1),		DT_RELA },
326 
327 	{ MSG_ORIG(MSG_DT_RELASZ),		DT_RELASZ },
328 	{ MSG_ORIG(MSG_DT_RELASZ_ALT1),		DT_RELASZ },
329 
330 	{ MSG_ORIG(MSG_DT_RELAENT),		DT_RELAENT },
331 	{ MSG_ORIG(MSG_DT_RELAENT_ALT1),	DT_RELAENT },
332 
333 	{ MSG_ORIG(MSG_DT_STRSZ),		DT_STRSZ },
334 	{ MSG_ORIG(MSG_DT_STRSZ_ALT1),		DT_STRSZ },
335 
336 	{ MSG_ORIG(MSG_DT_SYMENT),		DT_SYMENT },
337 	{ MSG_ORIG(MSG_DT_SYMENT_ALT1),		DT_SYMENT },
338 
339 	{ MSG_ORIG(MSG_DT_INIT),		DT_INIT },
340 	{ MSG_ORIG(MSG_DT_INIT_ALT1),		DT_INIT },
341 
342 	{ MSG_ORIG(MSG_DT_FINI),		DT_FINI },
343 	{ MSG_ORIG(MSG_DT_FINI_ALT1),		DT_FINI },
344 
345 	{ MSG_ORIG(MSG_DT_SONAME),		DT_SONAME },
346 	{ MSG_ORIG(MSG_DT_SONAME_ALT1),		DT_SONAME },
347 
348 	{ MSG_ORIG(MSG_DT_RPATH),		DT_RPATH },
349 	{ MSG_ORIG(MSG_DT_RPATH_ALT1),		DT_RPATH },
350 
351 	{ MSG_ORIG(MSG_DT_SYMBOLIC),		DT_SYMBOLIC },
352 	{ MSG_ORIG(MSG_DT_SYMBOLIC_ALT1),	DT_SYMBOLIC },
353 
354 	{ MSG_ORIG(MSG_DT_REL),			DT_REL },
355 	{ MSG_ORIG(MSG_DT_REL_ALT1),		DT_REL },
356 
357 	{ MSG_ORIG(MSG_DT_RELSZ),		DT_RELSZ },
358 	{ MSG_ORIG(MSG_DT_RELSZ_ALT1),		DT_RELSZ },
359 
360 	{ MSG_ORIG(MSG_DT_RELENT),		DT_RELENT },
361 	{ MSG_ORIG(MSG_DT_RELENT_ALT1),		DT_RELENT },
362 
363 	{ MSG_ORIG(MSG_DT_PLTREL),		DT_PLTREL },
364 	{ MSG_ORIG(MSG_DT_PLTREL_ALT1),		DT_PLTREL },
365 
366 	{ MSG_ORIG(MSG_DT_DEBUG),		DT_DEBUG },
367 	{ MSG_ORIG(MSG_DT_DEBUG_ALT1),		DT_DEBUG },
368 
369 	{ MSG_ORIG(MSG_DT_TEXTREL),		DT_TEXTREL },
370 	{ MSG_ORIG(MSG_DT_TEXTREL_ALT1),	DT_TEXTREL },
371 
372 	{ MSG_ORIG(MSG_DT_JMPREL),		DT_JMPREL },
373 	{ MSG_ORIG(MSG_DT_JMPREL_ALT1),		DT_JMPREL },
374 
375 	{ MSG_ORIG(MSG_DT_BIND_NOW),		DT_BIND_NOW },
376 	{ MSG_ORIG(MSG_DT_BIND_NOW_ALT1),	DT_BIND_NOW },
377 
378 	{ MSG_ORIG(MSG_DT_INIT_ARRAY),		DT_INIT_ARRAY },
379 	{ MSG_ORIG(MSG_DT_INIT_ARRAY_ALT1),	DT_INIT_ARRAY },
380 
381 	{ MSG_ORIG(MSG_DT_FINI_ARRAY),		DT_FINI_ARRAY },
382 	{ MSG_ORIG(MSG_DT_FINI_ARRAY_ALT1),	DT_FINI_ARRAY },
383 
384 	{ MSG_ORIG(MSG_DT_INIT_ARRAYSZ),	DT_INIT_ARRAYSZ },
385 	{ MSG_ORIG(MSG_DT_INIT_ARRAYSZ_ALT1),	DT_INIT_ARRAYSZ },
386 
387 	{ MSG_ORIG(MSG_DT_FINI_ARRAYSZ),	DT_FINI_ARRAYSZ },
388 	{ MSG_ORIG(MSG_DT_FINI_ARRAYSZ_ALT1),	DT_FINI_ARRAYSZ },
389 
390 	{ MSG_ORIG(MSG_DT_RUNPATH),		DT_RUNPATH },
391 	{ MSG_ORIG(MSG_DT_RUNPATH_ALT1),	DT_RUNPATH },
392 
393 	{ MSG_ORIG(MSG_DT_FLAGS),		DT_FLAGS },
394 	{ MSG_ORIG(MSG_DT_FLAGS_ALT1),		DT_FLAGS },
395 
396 	{ MSG_ORIG(MSG_DT_PREINIT_ARRAY),	DT_PREINIT_ARRAY },
397 	{ MSG_ORIG(MSG_DT_PREINIT_ARRAY_ALT1),	DT_PREINIT_ARRAY },
398 
399 	{ MSG_ORIG(MSG_DT_PREINIT_ARRAYSZ),	DT_PREINIT_ARRAYSZ },
400 	{ MSG_ORIG(MSG_DT_PREINIT_ARRAYSZ_ALT1), DT_PREINIT_ARRAYSZ },
401 
402 	{ MSG_ORIG(MSG_DT_SUNW_AUXILIARY),	DT_SUNW_AUXILIARY },
403 	{ MSG_ORIG(MSG_DT_SUNW_AUXILIARY_ALT1),	DT_SUNW_AUXILIARY },
404 
405 	{ MSG_ORIG(MSG_DT_SUNW_RTLDINF),	DT_SUNW_RTLDINF },
406 	{ MSG_ORIG(MSG_DT_SUNW_RTLDINF_ALT1),	DT_SUNW_RTLDINF },
407 
408 	{ MSG_ORIG(MSG_DT_SUNW_FILTER),		DT_SUNW_FILTER },
409 	{ MSG_ORIG(MSG_DT_SUNW_FILTER_ALT1),	DT_SUNW_FILTER },
410 
411 	{ MSG_ORIG(MSG_DT_SUNW_CAP),		DT_SUNW_CAP },
412 	{ MSG_ORIG(MSG_DT_SUNW_CAP_ALT1),	DT_SUNW_CAP },
413 
414 	{ MSG_ORIG(MSG_DT_SUNW_SYMTAB),		DT_SUNW_SYMTAB },
415 	{ MSG_ORIG(MSG_DT_SUNW_SYMTAB_ALT1),	DT_SUNW_SYMTAB },
416 
417 	{ MSG_ORIG(MSG_DT_SUNW_SYMSZ),		DT_SUNW_SYMSZ },
418 	{ MSG_ORIG(MSG_DT_SUNW_SYMSZ_ALT1),	DT_SUNW_SYMSZ },
419 
420 	{ MSG_ORIG(MSG_DT_SUNW_SORTENT),	DT_SUNW_SORTENT },
421 	{ MSG_ORIG(MSG_DT_SUNW_SORTENT_ALT1),	DT_SUNW_SORTENT },
422 
423 	{ MSG_ORIG(MSG_DT_SUNW_SYMSORT),	DT_SUNW_SYMSORT },
424 	{ MSG_ORIG(MSG_DT_SUNW_SYMSORT_ALT1),	DT_SUNW_SYMSORT },
425 
426 	{ MSG_ORIG(MSG_DT_SUNW_SYMSORTSZ),	DT_SUNW_SYMSORTSZ },
427 	{ MSG_ORIG(MSG_DT_SUNW_SYMSORTSZ_ALT1),	DT_SUNW_SYMSORTSZ },
428 
429 	{ MSG_ORIG(MSG_DT_SUNW_TLSSORT),	DT_SUNW_TLSSORT },
430 	{ MSG_ORIG(MSG_DT_SUNW_TLSSORT_ALT1),	DT_SUNW_TLSSORT },
431 
432 	{ MSG_ORIG(MSG_DT_SUNW_TLSSORTSZ),	DT_SUNW_TLSSORTSZ },
433 	{ MSG_ORIG(MSG_DT_SUNW_TLSSORTSZ_ALT1),	DT_SUNW_TLSSORTSZ },
434 
435 	{ MSG_ORIG(MSG_DT_SUNW_STRPAD),		DT_SUNW_STRPAD },
436 	{ MSG_ORIG(MSG_DT_SUNW_STRPAD_ALT1),	DT_SUNW_STRPAD },
437 
438 	{ MSG_ORIG(MSG_DT_SPARC_REGISTER),	DT_SPARC_REGISTER },
439 	{ MSG_ORIG(MSG_DT_SPARC_REGISTER_ALT1),	DT_SPARC_REGISTER },
440 
441 	{ MSG_ORIG(MSG_DT_DEPRECATED_SPARC_REGISTER),
442 						DT_DEPRECATED_SPARC_REGISTER },
443 	{ MSG_ORIG(MSG_DT_DEPRECATED_SPARC_REGISTER_ALT1),
444 						DT_DEPRECATED_SPARC_REGISTER },
445 
446 	{ MSG_ORIG(MSG_DT_CHECKSUM),		DT_CHECKSUM },
447 	{ MSG_ORIG(MSG_DT_CHECKSUM_ALT1),	DT_CHECKSUM },
448 
449 	{ MSG_ORIG(MSG_DT_PLTPADSZ),		DT_PLTPADSZ },
450 	{ MSG_ORIG(MSG_DT_PLTPADSZ_ALT1),	DT_PLTPADSZ },
451 
452 	{ MSG_ORIG(MSG_DT_MOVEENT),		DT_MOVEENT },
453 	{ MSG_ORIG(MSG_DT_MOVEENT_ALT1),	DT_MOVEENT },
454 
455 	{ MSG_ORIG(MSG_DT_MOVESZ),		DT_MOVESZ },
456 	{ MSG_ORIG(MSG_DT_MOVESZ_ALT1),		DT_MOVESZ },
457 
458 	{ MSG_ORIG(MSG_DT_FEATURE_1),		DT_FEATURE_1 },
459 	{ MSG_ORIG(MSG_DT_FEATURE_1_ALT1),	DT_FEATURE_1 },
460 
461 	{ MSG_ORIG(MSG_DT_POSFLAG_1),		DT_POSFLAG_1 },
462 	{ MSG_ORIG(MSG_DT_POSFLAG_1_ALT1),	DT_POSFLAG_1 },
463 
464 	{ MSG_ORIG(MSG_DT_SYMINSZ),		DT_SYMINSZ },
465 	{ MSG_ORIG(MSG_DT_SYMINSZ_ALT1),	DT_SYMINSZ },
466 
467 	{ MSG_ORIG(MSG_DT_SYMINENT),		DT_SYMINENT },
468 	{ MSG_ORIG(MSG_DT_SYMINENT_ALT1),	DT_SYMINENT },
469 
470 	{ MSG_ORIG(MSG_DT_CONFIG),		DT_CONFIG },
471 	{ MSG_ORIG(MSG_DT_CONFIG_ALT1),		DT_CONFIG },
472 
473 	{ MSG_ORIG(MSG_DT_DEPAUDIT),		DT_DEPAUDIT },
474 	{ MSG_ORIG(MSG_DT_DEPAUDIT_ALT1),	DT_DEPAUDIT },
475 
476 	{ MSG_ORIG(MSG_DT_AUDIT),		DT_AUDIT },
477 	{ MSG_ORIG(MSG_DT_AUDIT_ALT1),		DT_AUDIT },
478 
479 	{ MSG_ORIG(MSG_DT_PLTPAD),		DT_PLTPAD },
480 	{ MSG_ORIG(MSG_DT_PLTPAD_ALT1),		DT_PLTPAD },
481 
482 	{ MSG_ORIG(MSG_DT_MOVETAB),		DT_MOVETAB },
483 	{ MSG_ORIG(MSG_DT_MOVETAB_ALT1),	DT_MOVETAB },
484 
485 	{ MSG_ORIG(MSG_DT_SYMINFO),		DT_SYMINFO },
486 	{ MSG_ORIG(MSG_DT_SYMINFO_ALT1),	DT_SYMINFO },
487 
488 	{ MSG_ORIG(MSG_DT_VERSYM),		DT_VERSYM },
489 	{ MSG_ORIG(MSG_DT_VERSYM_ALT1),		DT_VERSYM },
490 
491 	{ MSG_ORIG(MSG_DT_RELACOUNT),		DT_RELACOUNT },
492 	{ MSG_ORIG(MSG_DT_RELACOUNT_ALT1),	DT_RELACOUNT },
493 
494 	{ MSG_ORIG(MSG_DT_RELCOUNT),		DT_RELCOUNT },
495 	{ MSG_ORIG(MSG_DT_RELCOUNT_ALT1),	DT_RELCOUNT },
496 
497 	{ MSG_ORIG(MSG_DT_FLAGS_1),		DT_FLAGS_1 },
498 	{ MSG_ORIG(MSG_DT_FLAGS_1_ALT1),	DT_FLAGS_1 },
499 
500 	{ MSG_ORIG(MSG_DT_VERDEF),		DT_VERDEF },
501 	{ MSG_ORIG(MSG_DT_VERDEF_ALT1),		DT_VERDEF },
502 
503 	{ MSG_ORIG(MSG_DT_VERDEFNUM),		DT_VERDEFNUM },
504 	{ MSG_ORIG(MSG_DT_VERDEFNUM_ALT1),	DT_VERDEFNUM },
505 
506 	{ MSG_ORIG(MSG_DT_VERNEED),		DT_VERNEED },
507 	{ MSG_ORIG(MSG_DT_VERNEED_ALT1),	DT_VERNEED },
508 
509 	{ MSG_ORIG(MSG_DT_VERNEEDNUM),		DT_VERNEEDNUM },
510 	{ MSG_ORIG(MSG_DT_VERNEEDNUM_ALT1),	DT_VERNEEDNUM },
511 
512 	{ MSG_ORIG(MSG_DT_AUXILIARY),		DT_AUXILIARY },
513 	{ MSG_ORIG(MSG_DT_AUXILIARY_ALT1),	DT_AUXILIARY },
514 
515 	{ MSG_ORIG(MSG_DT_USED),		DT_USED },
516 	{ MSG_ORIG(MSG_DT_USED_ALT1),		DT_USED },
517 
518 	{ MSG_ORIG(MSG_DT_FILTER),		DT_FILTER },
519 	{ MSG_ORIG(MSG_DT_FILTER_ALT1),		DT_FILTER },
520 
521 	{ NULL }
522 };
523 
524 
525 /*
526  * ELF DT_FLAGS DF_* values
527  */
528 static elfedit_atoui_sym_t sym_df[] = {
529 	{ MSG_ORIG(MSG_DF_ORIGIN),		DF_ORIGIN },
530 	{ MSG_ORIG(MSG_DF_ORIGIN_ALT1),		DF_ORIGIN },
531 
532 	{ MSG_ORIG(MSG_DF_SYMBOLIC),		DF_SYMBOLIC },
533 	{ MSG_ORIG(MSG_DF_SYMBOLIC_ALT1),	DF_SYMBOLIC },
534 
535 	{ MSG_ORIG(MSG_DF_TEXTREL),		DF_TEXTREL },
536 	{ MSG_ORIG(MSG_DF_TEXTREL_ALT1),	DF_TEXTREL },
537 
538 	{ MSG_ORIG(MSG_DF_BIND_NOW),		DF_BIND_NOW },
539 	{ MSG_ORIG(MSG_DF_BIND_NOW_ALT1),	DF_BIND_NOW },
540 
541 	{ MSG_ORIG(MSG_DF_STATIC_TLS),		DF_STATIC_TLS },
542 	{ MSG_ORIG(MSG_DF_STATIC_TLS_ALT1),	DF_STATIC_TLS },
543 
544 	{ NULL }
545 };
546 
547 
548 /*
549  * ELF DT_POSFLAG_1 DF_P1_* values
550  */
551 static elfedit_atoui_sym_t sym_df_p1[] = {
552 	{ MSG_ORIG(MSG_DF_P1_LAZYLOAD),		DF_P1_LAZYLOAD },
553 	{ MSG_ORIG(MSG_DF_P1_LAZYLOAD_ALT1),	DF_P1_LAZYLOAD },
554 
555 	{ MSG_ORIG(MSG_DF_P1_GROUPPERM),	DF_P1_GROUPPERM },
556 	{ MSG_ORIG(MSG_DF_P1_GROUPPERM_ALT1),	DF_P1_GROUPPERM },
557 
558 	{ NULL }
559 };
560 
561 
562 /*
563  * ELF DT_FLAGS_1 DF_1_* values
564  */
565 static elfedit_atoui_sym_t sym_df_1[] = {
566 	{ MSG_ORIG(MSG_DF_1_NOW),		DF_1_NOW },
567 	{ MSG_ORIG(MSG_DF_1_NOW_ALT1),		DF_1_NOW },
568 
569 	{ MSG_ORIG(MSG_DF_1_GLOBAL),		DF_1_GLOBAL },
570 	{ MSG_ORIG(MSG_DF_1_GLOBAL_ALT1),	DF_1_GLOBAL },
571 
572 	{ MSG_ORIG(MSG_DF_1_GROUP),		DF_1_GROUP },
573 	{ MSG_ORIG(MSG_DF_1_GROUP_ALT1),	DF_1_GROUP },
574 
575 	{ MSG_ORIG(MSG_DF_1_NODELETE),		DF_1_NODELETE },
576 	{ MSG_ORIG(MSG_DF_1_NODELETE_ALT1),	DF_1_NODELETE },
577 
578 	{ MSG_ORIG(MSG_DF_1_LOADFLTR),		DF_1_LOADFLTR },
579 	{ MSG_ORIG(MSG_DF_1_LOADFLTR_ALT1),	DF_1_LOADFLTR },
580 
581 	{ MSG_ORIG(MSG_DF_1_INITFIRST),		DF_1_INITFIRST },
582 	{ MSG_ORIG(MSG_DF_1_INITFIRST_ALT1),	DF_1_INITFIRST },
583 
584 	{ MSG_ORIG(MSG_DF_1_NOOPEN),		DF_1_NOOPEN },
585 	{ MSG_ORIG(MSG_DF_1_NOOPEN_ALT1),	DF_1_NOOPEN },
586 
587 	{ MSG_ORIG(MSG_DF_1_ORIGIN),		DF_1_ORIGIN },
588 	{ MSG_ORIG(MSG_DF_1_ORIGIN_ALT1),	DF_1_ORIGIN },
589 
590 	{ MSG_ORIG(MSG_DF_1_DIRECT),		DF_1_DIRECT },
591 	{ MSG_ORIG(MSG_DF_1_DIRECT_ALT1),	DF_1_DIRECT },
592 
593 	{ MSG_ORIG(MSG_DF_1_TRANS),		DF_1_TRANS },
594 	{ MSG_ORIG(MSG_DF_1_TRANS_ALT1),	DF_1_TRANS },
595 
596 	{ MSG_ORIG(MSG_DF_1_INTERPOSE),		DF_1_INTERPOSE },
597 	{ MSG_ORIG(MSG_DF_1_INTERPOSE_ALT1),	DF_1_INTERPOSE },
598 
599 	{ MSG_ORIG(MSG_DF_1_NODEFLIB),		DF_1_NODEFLIB },
600 	{ MSG_ORIG(MSG_DF_1_NODEFLIB_ALT1),	DF_1_NODEFLIB },
601 
602 	{ MSG_ORIG(MSG_DF_1_NODUMP),		DF_1_NODUMP },
603 	{ MSG_ORIG(MSG_DF_1_NODUMP_ALT1),	DF_1_NODUMP },
604 
605 	{ MSG_ORIG(MSG_DF_1_CONFALT),		DF_1_CONFALT },
606 	{ MSG_ORIG(MSG_DF_1_CONFALT_ALT1),	DF_1_CONFALT },
607 
608 	{ MSG_ORIG(MSG_DF_1_ENDFILTEE),		DF_1_ENDFILTEE },
609 	{ MSG_ORIG(MSG_DF_1_ENDFILTEE_ALT1),	DF_1_ENDFILTEE },
610 
611 	{ MSG_ORIG(MSG_DF_1_DISPRELDNE),	DF_1_DISPRELDNE },
612 	{ MSG_ORIG(MSG_DF_1_DISPRELDNE_ALT1),	DF_1_DISPRELDNE },
613 
614 	{ MSG_ORIG(MSG_DF_1_DISPRELPND),	DF_1_DISPRELPND },
615 	{ MSG_ORIG(MSG_DF_1_DISPRELPND_ALT1),	DF_1_DISPRELPND },
616 
617 	{ MSG_ORIG(MSG_DF_1_NODIRECT),		DF_1_NODIRECT },
618 	{ MSG_ORIG(MSG_DF_1_NODIRECT_ALT1),	DF_1_NODIRECT },
619 
620 	{ MSG_ORIG(MSG_DF_1_IGNMULDEF),		DF_1_IGNMULDEF },
621 	{ MSG_ORIG(MSG_DF_1_IGNMULDEF_ALT1),	DF_1_IGNMULDEF },
622 
623 	{ MSG_ORIG(MSG_DF_1_NOKSYMS),		DF_1_NOKSYMS },
624 	{ MSG_ORIG(MSG_DF_1_NOKSYMS_ALT1),	DF_1_NOKSYMS },
625 
626 	{ MSG_ORIG(MSG_DF_1_NOHDR),		DF_1_NOHDR },
627 	{ MSG_ORIG(MSG_DF_1_NOHDR_ALT1),	DF_1_NOHDR },
628 
629 	{ MSG_ORIG(MSG_DF_1_EDITED),		DF_1_EDITED },
630 	{ MSG_ORIG(MSG_DF_1_EDITED_ALT1),	DF_1_EDITED },
631 
632 	{ MSG_ORIG(MSG_DF_1_NORELOC),		DF_1_NORELOC },
633 	{ MSG_ORIG(MSG_DF_1_NORELOC_ALT1),	DF_1_NORELOC },
634 
635 	{ MSG_ORIG(MSG_DF_1_SYMINTPOSE),	DF_1_SYMINTPOSE },
636 	{ MSG_ORIG(MSG_DF_1_SYMINTPOSE_ALT1),	DF_1_SYMINTPOSE },
637 
638 	{ MSG_ORIG(MSG_DF_1_GLOBAUDIT),		DF_1_GLOBAUDIT },
639 	{ MSG_ORIG(MSG_DF_1_GLOBAUDIT_ALT1),	DF_1_GLOBAUDIT },
640 
641 	{ NULL }
642 };
643 
644 
645 /*
646  * ELF DT_FEATURE_1 DTF_1_* values
647  */
648 static elfedit_atoui_sym_t sym_dtf_1[] = {
649 	{ MSG_ORIG(MSG_DTF_1_PARINIT),		DTF_1_PARINIT },
650 	{ MSG_ORIG(MSG_DTF_1_PARINIT_ALT1),	DTF_1_PARINIT },
651 
652 	{ MSG_ORIG(MSG_DTF_1_CONFEXP),		DTF_1_CONFEXP },
653 	{ MSG_ORIG(MSG_DTF_1_CONFEXP_ALT1),	DTF_1_CONFEXP },
654 
655 	{ NULL }
656 };
657 
658 /*
659  * ELF header EI_* indexes
660  */
661 static elfedit_atoui_sym_t sym_ei[] = {
662 	{ MSG_ORIG(MSG_EI_MAG0),		EI_MAG0 },
663 	{ MSG_ORIG(MSG_EI_MAG0_ALT1),		EI_MAG0 },
664 
665 	{ MSG_ORIG(MSG_EI_MAG1),		EI_MAG1 },
666 	{ MSG_ORIG(MSG_EI_MAG1_ALT1),		EI_MAG1 },
667 
668 	{ MSG_ORIG(MSG_EI_MAG2),		EI_MAG2 },
669 	{ MSG_ORIG(MSG_EI_MAG2_ALT1),		EI_MAG2 },
670 
671 	{ MSG_ORIG(MSG_EI_MAG3),		EI_MAG3 },
672 	{ MSG_ORIG(MSG_EI_MAG3_ALT1),		EI_MAG3 },
673 
674 	{ MSG_ORIG(MSG_EI_CLASS),		EI_CLASS },
675 	{ MSG_ORIG(MSG_EI_CLASS_ALT1),		EI_CLASS },
676 
677 	{ MSG_ORIG(MSG_EI_DATA),		EI_DATA },
678 	{ MSG_ORIG(MSG_EI_DATA_ALT1),		EI_DATA },
679 
680 	{ MSG_ORIG(MSG_EI_VERSION),		EI_VERSION },
681 	{ MSG_ORIG(MSG_EI_VERSION_ALT1),	EI_VERSION },
682 
683 	{ MSG_ORIG(MSG_EI_OSABI),		EI_OSABI },
684 	{ MSG_ORIG(MSG_EI_OSABI_ALT1),		EI_OSABI },
685 
686 	{ MSG_ORIG(MSG_EI_ABIVERSION),		EI_ABIVERSION },
687 	{ MSG_ORIG(MSG_EI_ABIVERSION_ALT1),	EI_ABIVERSION },
688 
689 	{ NULL }
690 };
691 
692 /*
693  * ELF header ET_* file type values
694  */
695 static elfedit_atoui_sym_t sym_et[] = {
696 	{ MSG_ORIG(MSG_ET_NONE),		ET_NONE },
697 	{ MSG_ORIG(MSG_ET_NONE_ALT1),		ET_NONE },
698 
699 	{ MSG_ORIG(MSG_ET_REL),			ET_REL },
700 	{ MSG_ORIG(MSG_ET_REL_ALT1),		ET_REL },
701 
702 	{ MSG_ORIG(MSG_ET_EXEC),		ET_EXEC },
703 	{ MSG_ORIG(MSG_ET_EXEC_ALT1),		ET_EXEC },
704 
705 	{ MSG_ORIG(MSG_ET_DYN),			ET_DYN },
706 	{ MSG_ORIG(MSG_ET_DYN_ALT1),		ET_DYN },
707 
708 	{ MSG_ORIG(MSG_ET_CORE),		ET_CORE },
709 	{ MSG_ORIG(MSG_ET_CORE_ALT1),		ET_CORE },
710 
711 	{ NULL }
712 };
713 
714 /*
715  * ELFCLASS
716  */
717 static elfedit_atoui_sym_t sym_elfclass[] = {
718 	{ MSG_ORIG(MSG_ELFCLASSNONE),		ELFCLASSNONE },
719 	{ MSG_ORIG(MSG_ELFCLASSNONE_ALT1),	ELFCLASSNONE },
720 
721 	{ MSG_ORIG(MSG_ELFCLASS32),		ELFCLASS32 },
722 	{ MSG_ORIG(MSG_ELFCLASS32_ALT1),	ELFCLASS32 },
723 
724 	{ MSG_ORIG(MSG_ELFCLASS64),		ELFCLASS64 },
725 	{ MSG_ORIG(MSG_ELFCLASS64_ALT1),	ELFCLASS64 },
726 
727 	{ NULL }
728 };
729 
730 /*
731  * ELFDATA
732  */
733 static elfedit_atoui_sym_t sym_elfdata[] = {
734 	{ MSG_ORIG(MSG_ELFDATANONE),		ELFDATANONE },
735 	{ MSG_ORIG(MSG_ELFDATANONE_ALT1),	ELFDATANONE },
736 
737 	{ MSG_ORIG(MSG_ELFDATA2LSB),		ELFDATA2LSB },
738 	{ MSG_ORIG(MSG_ELFDATA2LSB_ALT1),	ELFDATA2LSB },
739 
740 	{ MSG_ORIG(MSG_ELFDATA2MSB),		ELFDATA2MSB },
741 	{ MSG_ORIG(MSG_ELFDATA2MSB_ALT1),	ELFDATA2MSB },
742 
743 	{ NULL }
744 };
745 
746 /*
747  * ELF header EF_* flags
748  */
749 static elfedit_atoui_sym_t sym_ef[] = {
750 	{ MSG_ORIG(MSG_EF_SPARC_32PLUS),	EF_SPARC_32PLUS },
751 	{ MSG_ORIG(MSG_EF_SPARC_32PLUS_ALT1),	EF_SPARC_32PLUS },
752 
753 	{ MSG_ORIG(MSG_EF_SPARC_SUN_US1),	EF_SPARC_SUN_US1 },
754 	{ MSG_ORIG(MSG_EF_SPARC_SUN_US1_ALT1),	EF_SPARC_SUN_US1 },
755 
756 	{ MSG_ORIG(MSG_EF_SPARC_HAL_R1),	EF_SPARC_HAL_R1 },
757 	{ MSG_ORIG(MSG_EF_SPARC_HAL_R1_ALT1),	EF_SPARC_HAL_R1 },
758 
759 	{ MSG_ORIG(MSG_EF_SPARC_SUN_US3),	EF_SPARC_SUN_US3 },
760 	{ MSG_ORIG(MSG_EF_SPARC_SUN_US3_ALT1),	EF_SPARC_SUN_US3 },
761 
762 	{ MSG_ORIG(MSG_EF_SPARCV9_MM),		EF_SPARCV9_MM },
763 	{ MSG_ORIG(MSG_EF_SPARCV9_MM_ALT1),	EF_SPARCV9_MM },
764 
765 	{ MSG_ORIG(MSG_EF_SPARCV9_TSO),		EF_SPARCV9_TSO },
766 	{ MSG_ORIG(MSG_EF_SPARCV9_TSO_ALT1),	EF_SPARCV9_TSO },
767 
768 	{ MSG_ORIG(MSG_EF_SPARCV9_PSO),		EF_SPARCV9_PSO },
769 	{ MSG_ORIG(MSG_EF_SPARCV9_PSO_ALT1),	EF_SPARCV9_PSO },
770 
771 	{ MSG_ORIG(MSG_EF_SPARCV9_RMO),		EF_SPARCV9_RMO },
772 	{ MSG_ORIG(MSG_EF_SPARCV9_RMO_ALT1),	EF_SPARCV9_RMO },
773 
774 	{ NULL }
775 };
776 
777 /*
778  * ELF header EV_* versions
779  */
780 static elfedit_atoui_sym_t sym_ev[] = {
781 	{ MSG_ORIG(MSG_EV_NONE),		EV_NONE },
782 	{ MSG_ORIG(MSG_EV_NONE_ALT1),		EV_NONE },
783 
784 	{ MSG_ORIG(MSG_EV_CURRENT),		EV_CURRENT },
785 	{ MSG_ORIG(MSG_EV_CURRENT_ALT1),	EV_CURRENT },
786 
787 	{ NULL }
788 };
789 
790 /*
791  * ELF EM_* machine types
792  */
793 static elfedit_atoui_sym_t sym_em[] = {
794 	{ MSG_ORIG(MSG_EM_NONE),		EM_NONE },
795 	{ MSG_ORIG(MSG_EM_NONE_ALT1),		EM_NONE },
796 
797 	{ MSG_ORIG(MSG_EM_M32),			EM_M32 },
798 	{ MSG_ORIG(MSG_EM_M32_ALT1),		EM_M32 },
799 	{ MSG_ORIG(MSG_EM_M32_ALT2),		EM_M32 },
800 
801 	{ MSG_ORIG(MSG_EM_SPARC),		EM_SPARC },
802 	{ MSG_ORIG(MSG_EM_SPARC_ALT1),		EM_SPARC },
803 
804 	{ MSG_ORIG(MSG_EM_386),			EM_386 },
805 	{ MSG_ORIG(MSG_EM_386_ALT1),		EM_386 },
806 	{ MSG_ORIG(MSG_EM_386_ALT2),		EM_386 },
807 
808 	{ MSG_ORIG(MSG_EM_68K),			EM_68K },
809 	{ MSG_ORIG(MSG_EM_68K_ALT1),		EM_68K },
810 	{ MSG_ORIG(MSG_EM_68K_ALT2),		EM_68K },
811 
812 	{ MSG_ORIG(MSG_EM_88K),			EM_88K },
813 	{ MSG_ORIG(MSG_EM_88K_ALT1),		EM_88K },
814 	{ MSG_ORIG(MSG_EM_88K_ALT2),		EM_88K },
815 
816 	{ MSG_ORIG(MSG_EM_486),			EM_486 },
817 	{ MSG_ORIG(MSG_EM_486_ALT1),		EM_486 },
818 	{ MSG_ORIG(MSG_EM_486_ALT2),		EM_486 },
819 
820 	{ MSG_ORIG(MSG_EM_860),			EM_860 },
821 	{ MSG_ORIG(MSG_EM_860_ALT1),		EM_860 },
822 	{ MSG_ORIG(MSG_EM_860_ALT2),		EM_860 },
823 
824 	{ MSG_ORIG(MSG_EM_MIPS),		EM_MIPS },
825 	{ MSG_ORIG(MSG_EM_MIPS_ALT1),		EM_MIPS },
826 	{ MSG_ORIG(MSG_EM_MIPS_ALT2),		EM_MIPS },
827 
828 	{ MSG_ORIG(MSG_EM_S370),		EM_S370 },
829 	{ MSG_ORIG(MSG_EM_S370_ALT1),		EM_S370 },
830 
831 	{ MSG_ORIG(MSG_EM_MIPS_RS3_LE),		EM_MIPS_RS3_LE },
832 	{ MSG_ORIG(MSG_EM_MIPS_RS3_LE_ALT1),	EM_MIPS_RS3_LE },
833 	{ MSG_ORIG(MSG_EM_MIPS_RS3_LE_ALT2),	EM_MIPS_RS3_LE },
834 
835 	{ MSG_ORIG(MSG_EM_RS6000),		EM_RS6000 },
836 	{ MSG_ORIG(MSG_EM_RS6000_ALT1),		EM_RS6000 },
837 
838 	{ MSG_ORIG(MSG_EM_PA_RISC),		EM_PA_RISC },
839 	{ MSG_ORIG(MSG_EM_PA_RISC_ALT1),	EM_PA_RISC },
840 
841 	{ MSG_ORIG(MSG_EM_NCUBE),		EM_nCUBE },
842 	{ MSG_ORIG(MSG_EM_NCUBE_ALT1),		EM_nCUBE },
843 
844 	{ MSG_ORIG(MSG_EM_VPP500),		EM_VPP500 },
845 	{ MSG_ORIG(MSG_EM_VPP500_ALT1),		EM_VPP500 },
846 
847 	{ MSG_ORIG(MSG_EM_SPARC32PLUS),		EM_SPARC32PLUS },
848 	{ MSG_ORIG(MSG_EM_SPARC32PLUS_ALT1),	EM_SPARC32PLUS },
849 
850 	{ MSG_ORIG(MSG_EM_960),			EM_960 },
851 	{ MSG_ORIG(MSG_EM_960_ALT1),		EM_960 },
852 
853 	{ MSG_ORIG(MSG_EM_PPC),			EM_PPC },
854 	{ MSG_ORIG(MSG_EM_PPC_ALT1),		EM_PPC },
855 	{ MSG_ORIG(MSG_EM_PPC_ALT2),		EM_PPC },
856 
857 	{ MSG_ORIG(MSG_EM_PPC64),		EM_PPC64 },
858 	{ MSG_ORIG(MSG_EM_PPC64_ALT1),		EM_PPC64 },
859 	{ MSG_ORIG(MSG_EM_PPC64_ALT2),		EM_PPC64 },
860 
861 	{ MSG_ORIG(MSG_EM_S390),		EM_S390 },
862 	{ MSG_ORIG(MSG_EM_S390_ALT1),		EM_S390 },
863 
864 	{ MSG_ORIG(MSG_EM_V800),		EM_V800 },
865 	{ MSG_ORIG(MSG_EM_V800_ALT1),		EM_V800 },
866 
867 	{ MSG_ORIG(MSG_EM_FR20),		EM_FR20 },
868 	{ MSG_ORIG(MSG_EM_FR20_ALT1),		EM_FR20 },
869 
870 	{ MSG_ORIG(MSG_EM_RH32),		EM_RH32 },
871 	{ MSG_ORIG(MSG_EM_RH32_ALT1),		EM_RH32 },
872 
873 	{ MSG_ORIG(MSG_EM_RCE),			EM_RCE },
874 	{ MSG_ORIG(MSG_EM_RCE_ALT1),		EM_RCE },
875 
876 	{ MSG_ORIG(MSG_EM_ARM),			EM_ARM },
877 	{ MSG_ORIG(MSG_EM_ARM_ALT1),		EM_ARM },
878 
879 	{ MSG_ORIG(MSG_EM_ALPHA),		EM_ALPHA },
880 	{ MSG_ORIG(MSG_EM_ALPHA_ALT1),		EM_ALPHA },
881 
882 	{ MSG_ORIG(MSG_EM_SH),			EM_SH },
883 	{ MSG_ORIG(MSG_EM_SH_ALT1),		EM_SH },
884 
885 	{ MSG_ORIG(MSG_EM_SPARCV9),		EM_SPARCV9 },
886 	{ MSG_ORIG(MSG_EM_SPARCV9_ALT1),	EM_SPARCV9 },
887 
888 	{ MSG_ORIG(MSG_EM_TRICORE),		EM_TRICORE },
889 	{ MSG_ORIG(MSG_EM_TRICORE_ALT1),	EM_TRICORE },
890 
891 	{ MSG_ORIG(MSG_EM_ARC),			EM_ARC },
892 	{ MSG_ORIG(MSG_EM_ARC_ALT1),		EM_ARC },
893 
894 	{ MSG_ORIG(MSG_EM_H8_300),		EM_H8_300 },
895 	{ MSG_ORIG(MSG_EM_H8_300_ALT1),		EM_H8_300 },
896 
897 	{ MSG_ORIG(MSG_EM_H8_300H),		EM_H8_300H },
898 	{ MSG_ORIG(MSG_EM_H8_300H_ALT1),	EM_H8_300H },
899 
900 	{ MSG_ORIG(MSG_EM_H8S),			EM_H8S },
901 	{ MSG_ORIG(MSG_EM_H8S_ALT1),		EM_H8S },
902 
903 	{ MSG_ORIG(MSG_EM_H8_500),		EM_H8_500 },
904 	{ MSG_ORIG(MSG_EM_H8_500_ALT1),		EM_H8_500 },
905 
906 	{ MSG_ORIG(MSG_EM_IA_64),		EM_IA_64 },
907 	{ MSG_ORIG(MSG_EM_IA_64_ALT1),		EM_IA_64 },
908 
909 	{ MSG_ORIG(MSG_EM_MIPS_X),		EM_MIPS_X },
910 	{ MSG_ORIG(MSG_EM_MIPS_X_ALT1),		EM_MIPS_X },
911 
912 	{ MSG_ORIG(MSG_EM_COLDFIRE),		EM_COLDFIRE },
913 	{ MSG_ORIG(MSG_EM_COLDFIRE_ALT1),	EM_COLDFIRE },
914 
915 	{ MSG_ORIG(MSG_EM_68HC12),		EM_68HC12 },
916 	{ MSG_ORIG(MSG_EM_68HC12_ALT1),		EM_68HC12 },
917 
918 	{ MSG_ORIG(MSG_EM_MMA),			EM_MMA },
919 	{ MSG_ORIG(MSG_EM_MMA_ALT1),		EM_MMA },
920 
921 	{ MSG_ORIG(MSG_EM_PCP),			EM_PCP },
922 	{ MSG_ORIG(MSG_EM_PCP_ALT1),		EM_PCP },
923 
924 	{ MSG_ORIG(MSG_EM_NCPU),		EM_NCPU },
925 	{ MSG_ORIG(MSG_EM_NCPU_ALT1),		EM_NCPU },
926 
927 	{ MSG_ORIG(MSG_EM_NDR1),		EM_NDR1 },
928 	{ MSG_ORIG(MSG_EM_NDR1_ALT1),		EM_NDR1 },
929 
930 	{ MSG_ORIG(MSG_EM_STARCORE),		EM_STARCORE },
931 	{ MSG_ORIG(MSG_EM_STARCORE_ALT1),	EM_STARCORE },
932 
933 	{ MSG_ORIG(MSG_EM_ME16),		EM_ME16 },
934 	{ MSG_ORIG(MSG_EM_ME16_ALT1),		EM_ME16 },
935 
936 	{ MSG_ORIG(MSG_EM_ST100),		EM_ST100 },
937 	{ MSG_ORIG(MSG_EM_ST100_ALT1),		EM_ST100 },
938 
939 	{ MSG_ORIG(MSG_EM_TINYJ),		EM_TINYJ },
940 	{ MSG_ORIG(MSG_EM_TINYJ_ALT1),		EM_TINYJ },
941 
942 	{ MSG_ORIG(MSG_EM_AMD64),		EM_AMD64 },
943 	{ MSG_ORIG(MSG_EM_AMD64_ALT1),		EM_AMD64 },
944 
945 	{ MSG_ORIG(MSG_EM_PDSP),		EM_PDSP },
946 	{ MSG_ORIG(MSG_EM_PDSP_ALT1),		EM_PDSP },
947 
948 	{ MSG_ORIG(MSG_EM_FX66),		EM_FX66 },
949 	{ MSG_ORIG(MSG_EM_FX66_ALT1),		EM_FX66 },
950 
951 	{ MSG_ORIG(MSG_EM_ST9PLUS),		EM_ST9PLUS },
952 	{ MSG_ORIG(MSG_EM_ST9PLUS_ALT1),	EM_ST9PLUS },
953 
954 	{ MSG_ORIG(MSG_EM_ST7),			EM_ST7 },
955 	{ MSG_ORIG(MSG_EM_ST7_ALT1),		EM_ST7 },
956 
957 	{ MSG_ORIG(MSG_EM_68HC16),		EM_68HC16 },
958 	{ MSG_ORIG(MSG_EM_68HC16_ALT1),		EM_68HC16 },
959 
960 	{ MSG_ORIG(MSG_EM_68HC11),		EM_68HC11 },
961 	{ MSG_ORIG(MSG_EM_68HC11_ALT1),		EM_68HC11 },
962 
963 	{ MSG_ORIG(MSG_EM_68HC08),		EM_68HC08 },
964 	{ MSG_ORIG(MSG_EM_68HC08_ALT1),		EM_68HC08 },
965 
966 	{ MSG_ORIG(MSG_EM_68HC05),		EM_68HC05 },
967 	{ MSG_ORIG(MSG_EM_68HC05_ALT1),		EM_68HC05 },
968 
969 	{ MSG_ORIG(MSG_EM_SVX),			EM_SVX },
970 	{ MSG_ORIG(MSG_EM_SVX_ALT1),		EM_SVX },
971 
972 	{ MSG_ORIG(MSG_EM_ST19),		EM_ST19 },
973 	{ MSG_ORIG(MSG_EM_ST19_ALT1),		EM_ST19 },
974 
975 	{ MSG_ORIG(MSG_EM_VAX),			EM_VAX },
976 	{ MSG_ORIG(MSG_EM_VAX_ALT1),		EM_VAX },
977 
978 	{ MSG_ORIG(MSG_EM_CRIS),		EM_CRIS },
979 	{ MSG_ORIG(MSG_EM_CRIS_ALT1),		EM_CRIS },
980 
981 	{ MSG_ORIG(MSG_EM_JAVELIN),		EM_JAVELIN },
982 	{ MSG_ORIG(MSG_EM_JAVELIN_ALT1),	EM_JAVELIN },
983 
984 	{ MSG_ORIG(MSG_EM_FIREPATH),		EM_FIREPATH },
985 	{ MSG_ORIG(MSG_EM_FIREPATH_ALT1),	EM_FIREPATH },
986 
987 	{ MSG_ORIG(MSG_EM_ZSP),			EM_ZSP },
988 	{ MSG_ORIG(MSG_EM_ZSP_ALT1),		EM_ZSP },
989 
990 	{ MSG_ORIG(MSG_EM_MMIX),		EM_MMIX },
991 	{ MSG_ORIG(MSG_EM_MMIX_ALT1),		EM_MMIX },
992 
993 	{ MSG_ORIG(MSG_EM_HUANY),		EM_HUANY },
994 	{ MSG_ORIG(MSG_EM_HUANY_ALT1),		EM_HUANY },
995 
996 	{ MSG_ORIG(MSG_EM_PRISM),		EM_PRISM },
997 	{ MSG_ORIG(MSG_EM_PRISM_ALT1),		EM_PRISM },
998 
999 	{ MSG_ORIG(MSG_EM_AVR),			EM_AVR },
1000 	{ MSG_ORIG(MSG_EM_AVR_ALT1),		EM_AVR },
1001 
1002 	{ MSG_ORIG(MSG_EM_FR30),		EM_FR30 },
1003 	{ MSG_ORIG(MSG_EM_FR30_ALT1),		EM_FR30 },
1004 
1005 	{ MSG_ORIG(MSG_EM_D10V),		EM_D10V },
1006 	{ MSG_ORIG(MSG_EM_D10V_ALT1),		EM_D10V },
1007 
1008 	{ MSG_ORIG(MSG_EM_D30V),		EM_D30V },
1009 	{ MSG_ORIG(MSG_EM_D30V_ALT1),		EM_D30V },
1010 
1011 	{ MSG_ORIG(MSG_EM_V850),		EM_V850 },
1012 	{ MSG_ORIG(MSG_EM_V850_ALT1),		EM_V850 },
1013 
1014 	{ MSG_ORIG(MSG_EM_M32R),		EM_M32R },
1015 	{ MSG_ORIG(MSG_EM_M32R_ALT1),		EM_M32R },
1016 
1017 	{ MSG_ORIG(MSG_EM_MN10300),		EM_MN10300 },
1018 	{ MSG_ORIG(MSG_EM_MN10300_ALT1),	EM_MN10300 },
1019 
1020 	{ MSG_ORIG(MSG_EM_MN10200),		EM_MN10200 },
1021 	{ MSG_ORIG(MSG_EM_MN10200_ALT1),	EM_MN10200 },
1022 
1023 	{ MSG_ORIG(MSG_EM_PJ),			EM_PJ },
1024 	{ MSG_ORIG(MSG_EM_PJ_ALT1),		EM_PJ },
1025 
1026 	{ MSG_ORIG(MSG_EM_OPENRISC),		EM_OPENRISC },
1027 	{ MSG_ORIG(MSG_EM_OPENRISC_ALT1),	EM_OPENRISC },
1028 
1029 	{ MSG_ORIG(MSG_EM_ARC_A5),		EM_ARC_A5 },
1030 	{ MSG_ORIG(MSG_EM_ARC_A5_ALT1),		EM_ARC_A5 },
1031 
1032 	{ MSG_ORIG(MSG_EM_XTENSA),		EM_XTENSA },
1033 	{ MSG_ORIG(MSG_EM_XTENSA_ALT1),		EM_XTENSA },
1034 
1035 	{ NULL }
1036 };
1037 #if	(EM_NUM != (EM_XTENSA + 1))
1038 #error	"EM_NUM has grown"
1039 #endif
1040 
1041 
1042 /*
1043  * ELF header ELFOSABI_* values (and common aliases)
1044  */
1045 static elfedit_atoui_sym_t sym_elfosabi[] = {
1046 	{ MSG_ORIG(MSG_ELFOSABI_NONE),		ELFOSABI_NONE },
1047 	{ MSG_ORIG(MSG_ELFOSABI_NONE_ALT1),	ELFOSABI_NONE },
1048 
1049 	{ MSG_ORIG(MSG_ELFOSABI_SYSV),		ELFOSABI_SYSV },
1050 	{ MSG_ORIG(MSG_ELFOSABI_SYSV_ALT1),	ELFOSABI_SYSV },
1051 
1052 	{ MSG_ORIG(MSG_ELFOSABI_HPUX),		ELFOSABI_HPUX },
1053 	{ MSG_ORIG(MSG_ELFOSABI_HPUX_ALT1),	ELFOSABI_HPUX },
1054 
1055 	{ MSG_ORIG(MSG_ELFOSABI_NETBSD),	ELFOSABI_NETBSD },
1056 	{ MSG_ORIG(MSG_ELFOSABI_NETBSD_ALT1),	ELFOSABI_NETBSD },
1057 
1058 	{ MSG_ORIG(MSG_ELFOSABI_LINUX),		ELFOSABI_LINUX },
1059 	{ MSG_ORIG(MSG_ELFOSABI_LINUX_ALT1),	ELFOSABI_LINUX },
1060 
1061 	{ MSG_ORIG(MSG_ELFOSABI_SOLARIS),	ELFOSABI_SOLARIS },
1062 	{ MSG_ORIG(MSG_ELFOSABI_SOLARIS_ALT1),	ELFOSABI_SOLARIS },
1063 
1064 	{ MSG_ORIG(MSG_ELFOSABI_AIX),		ELFOSABI_AIX },
1065 	{ MSG_ORIG(MSG_ELFOSABI_AIX_ALT1),	ELFOSABI_AIX },
1066 
1067 	{ MSG_ORIG(MSG_ELFOSABI_IRIX),		ELFOSABI_IRIX },
1068 	{ MSG_ORIG(MSG_ELFOSABI_IRIX_ALT1),	ELFOSABI_IRIX },
1069 
1070 	{ MSG_ORIG(MSG_ELFOSABI_FREEBSD),	ELFOSABI_FREEBSD },
1071 	{ MSG_ORIG(MSG_ELFOSABI_FREEBSD_ALT1),	ELFOSABI_FREEBSD },
1072 
1073 	{ MSG_ORIG(MSG_ELFOSABI_TRU64),		ELFOSABI_TRU64 },
1074 	{ MSG_ORIG(MSG_ELFOSABI_TRU64_ALT1),	ELFOSABI_TRU64 },
1075 
1076 	{ MSG_ORIG(MSG_ELFOSABI_MODESTO),	ELFOSABI_MODESTO },
1077 	{ MSG_ORIG(MSG_ELFOSABI_MODESTO_ALT1),	ELFOSABI_MODESTO },
1078 
1079 	{ MSG_ORIG(MSG_ELFOSABI_OPENBSD),	ELFOSABI_OPENBSD },
1080 	{ MSG_ORIG(MSG_ELFOSABI_OPENBSD_ALT1),	ELFOSABI_OPENBSD },
1081 
1082 	{ MSG_ORIG(MSG_ELFOSABI_OPENVMS),	ELFOSABI_OPENVMS },
1083 	{ MSG_ORIG(MSG_ELFOSABI_OPENVMS_ALT1),	ELFOSABI_OPENVMS },
1084 
1085 	{ MSG_ORIG(MSG_ELFOSABI_NSK),		ELFOSABI_NSK },
1086 	{ MSG_ORIG(MSG_ELFOSABI_NSK_ALT1),	ELFOSABI_NSK },
1087 
1088 	{ MSG_ORIG(MSG_ELFOSABI_AROS),		ELFOSABI_AROS },
1089 	{ MSG_ORIG(MSG_ELFOSABI_AROS_ALT1),	ELFOSABI_AROS },
1090 
1091 	{ MSG_ORIG(MSG_ELFOSABI_ARM),		ELFOSABI_ARM },
1092 	{ MSG_ORIG(MSG_ELFOSABI_ARM_ALT1),	ELFOSABI_ARM },
1093 
1094 	{ MSG_ORIG(MSG_ELFOSABI_STANDALONE),	ELFOSABI_STANDALONE },
1095 	{ MSG_ORIG(MSG_ELFOSABI_STANDALONE_ALT1), ELFOSABI_STANDALONE },
1096 
1097 	{ NULL }
1098 };
1099 
1100 
1101 /*
1102  * Program header PT_* type values
1103  */
1104 static elfedit_atoui_sym_t sym_pt[] = {
1105 	{ MSG_ORIG(MSG_PT_NULL),		PT_NULL },
1106 	{ MSG_ORIG(MSG_PT_NULL_ALT1),		PT_NULL },
1107 
1108 	{ MSG_ORIG(MSG_PT_LOAD),		PT_LOAD },
1109 	{ MSG_ORIG(MSG_PT_LOAD_ALT1),		PT_LOAD },
1110 
1111 	{ MSG_ORIG(MSG_PT_DYNAMIC),		PT_DYNAMIC },
1112 	{ MSG_ORIG(MSG_PT_DYNAMIC_ALT1),	PT_DYNAMIC },
1113 
1114 	{ MSG_ORIG(MSG_PT_INTERP),		PT_INTERP },
1115 	{ MSG_ORIG(MSG_PT_INTERP_ALT1),		PT_INTERP },
1116 
1117 	{ MSG_ORIG(MSG_PT_NOTE),		PT_NOTE },
1118 	{ MSG_ORIG(MSG_PT_NOTE_ALT1),		PT_NOTE },
1119 
1120 	{ MSG_ORIG(MSG_PT_SHLIB),		PT_SHLIB },
1121 	{ MSG_ORIG(MSG_PT_SHLIB_ALT1),		PT_SHLIB },
1122 
1123 	{ MSG_ORIG(MSG_PT_PHDR),		PT_PHDR },
1124 	{ MSG_ORIG(MSG_PT_PHDR_ALT1),		PT_PHDR },
1125 
1126 	{ MSG_ORIG(MSG_PT_TLS),			PT_TLS },
1127 	{ MSG_ORIG(MSG_PT_TLS_ALT1),		PT_TLS },
1128 
1129 	{ MSG_ORIG(MSG_PT_SUNW_UNWIND),		PT_SUNW_UNWIND },
1130 	{ MSG_ORIG(MSG_PT_SUNW_UNWIND_ALT1),	PT_SUNW_UNWIND },
1131 
1132 	{ MSG_ORIG(MSG_PT_SUNWBSS),		PT_SUNWBSS },
1133 	{ MSG_ORIG(MSG_PT_SUNWBSS_ALT1),	PT_SUNWBSS },
1134 
1135 	{ MSG_ORIG(MSG_PT_SUNWSTACK),		PT_SUNWSTACK },
1136 	{ MSG_ORIG(MSG_PT_SUNWSTACK_ALT1),	PT_SUNWSTACK },
1137 
1138 	{ MSG_ORIG(MSG_PT_SUNWDTRACE),		PT_SUNWDTRACE },
1139 	{ MSG_ORIG(MSG_PT_SUNWDTRACE_ALT1),	PT_SUNWDTRACE },
1140 
1141 	{ MSG_ORIG(MSG_PT_SUNWCAP),		PT_SUNWCAP },
1142 	{ MSG_ORIG(MSG_PT_SUNWCAP_ALT1),	PT_SUNWCAP },
1143 
1144 	{ NULL }
1145 };
1146 
1147 
1148 /*
1149  * Program header PF_* flag values
1150  */
1151 static elfedit_atoui_sym_t sym_pf[] = {
1152 	{ MSG_ORIG(MSG_PF_X),			PF_X },
1153 	{ MSG_ORIG(MSG_PF_X_ALT1),		PF_X },
1154 
1155 	{ MSG_ORIG(MSG_PF_W),			PF_W },
1156 	{ MSG_ORIG(MSG_PF_W_ALT1),		PF_W },
1157 
1158 	{ MSG_ORIG(MSG_PF_R),			PF_R },
1159 	{ MSG_ORIG(MSG_PF_R_ALT1),		PF_R },
1160 
1161 	{ NULL }
1162 };
1163 
1164 
1165 /*
1166  * Section header SHF_* flag values
1167  */
1168 static elfedit_atoui_sym_t sym_shf[] = {
1169 	{ MSG_ORIG(MSG_SHF_WRITE),		SHF_WRITE },
1170 	{ MSG_ORIG(MSG_SHF_WRITE_ALT1),		SHF_WRITE },
1171 
1172 	{ MSG_ORIG(MSG_SHF_ALLOC),		SHF_ALLOC },
1173 	{ MSG_ORIG(MSG_SHF_ALLOC_ALT1),		SHF_ALLOC },
1174 
1175 	{ MSG_ORIG(MSG_SHF_EXECINSTR),		SHF_EXECINSTR },
1176 	{ MSG_ORIG(MSG_SHF_EXECINSTR_ALT1),	SHF_EXECINSTR },
1177 
1178 	{ MSG_ORIG(MSG_SHF_MERGE),		SHF_MERGE },
1179 	{ MSG_ORIG(MSG_SHF_MERGE_ALT1),		SHF_MERGE },
1180 
1181 	{ MSG_ORIG(MSG_SHF_STRINGS),		SHF_STRINGS },
1182 	{ MSG_ORIG(MSG_SHF_STRINGS_ALT1),	SHF_STRINGS },
1183 
1184 	{ MSG_ORIG(MSG_SHF_INFO_LINK),		SHF_INFO_LINK },
1185 	{ MSG_ORIG(MSG_SHF_INFO_LINK_ALT1),	SHF_INFO_LINK },
1186 
1187 	{ MSG_ORIG(MSG_SHF_LINK_ORDER),		SHF_LINK_ORDER },
1188 	{ MSG_ORIG(MSG_SHF_LINK_ORDER_ALT1),	SHF_LINK_ORDER },
1189 
1190 	{ MSG_ORIG(MSG_SHF_OS_NONCONFORMING),	SHF_OS_NONCONFORMING },
1191 	{ MSG_ORIG(MSG_SHF_OS_NONCONFORMING_ALT1), SHF_OS_NONCONFORMING },
1192 
1193 	{ MSG_ORIG(MSG_SHF_GROUP),		SHF_GROUP },
1194 	{ MSG_ORIG(MSG_SHF_GROUP_ALT1),		SHF_GROUP },
1195 
1196 	{ MSG_ORIG(MSG_SHF_TLS),		SHF_TLS },
1197 	{ MSG_ORIG(MSG_SHF_TLS_ALT1),		SHF_TLS },
1198 
1199 	{ NULL }
1200 };
1201 
1202 /*
1203  * ELF symbol bindings (st_info ELF_ST_BIND)
1204  */
1205 static elfedit_atoui_sym_t sym_stb[] = {
1206 	{ MSG_ORIG(MSG_STB_LOCAL),		STB_LOCAL },
1207 	{ MSG_ORIG(MSG_STB_LOCAL_ALT1),		STB_LOCAL },
1208 
1209 	{ MSG_ORIG(MSG_STB_GLOBAL),		STB_GLOBAL },
1210 	{ MSG_ORIG(MSG_STB_GLOBAL_ALT1),	STB_GLOBAL },
1211 
1212 	{ MSG_ORIG(MSG_STB_WEAK),		STB_WEAK },
1213 	{ MSG_ORIG(MSG_STB_WEAK_ALT1),		STB_WEAK },
1214 
1215 	{ NULL }
1216 };
1217 
1218 /*
1219  * ELF symbol types (st_info ELF_ST_TYPE)
1220  */
1221 static elfedit_atoui_sym_t sym_stt[] = {
1222 	{ MSG_ORIG(MSG_STT_NOTYPE),		STT_NOTYPE },
1223 	{ MSG_ORIG(MSG_STT_NOTYPE_ALT1),	STT_NOTYPE },
1224 
1225 	{ MSG_ORIG(MSG_STT_OBJECT),		STT_OBJECT },
1226 	{ MSG_ORIG(MSG_STT_OBJECT_ALT1),	STT_OBJECT },
1227 
1228 	{ MSG_ORIG(MSG_STT_FUNC),		STT_FUNC },
1229 	{ MSG_ORIG(MSG_STT_FUNC_ALT1),		STT_FUNC },
1230 
1231 	{ MSG_ORIG(MSG_STT_SECTION),		STT_SECTION },
1232 	{ MSG_ORIG(MSG_STT_SECTION_ALT1),	STT_SECTION },
1233 
1234 	{ MSG_ORIG(MSG_STT_FILE),		STT_FILE },
1235 	{ MSG_ORIG(MSG_STT_FILE_ALT1),		STT_FILE },
1236 
1237 	{ MSG_ORIG(MSG_STT_COMMON),		STT_COMMON },
1238 	{ MSG_ORIG(MSG_STT_COMMON_ALT1),	STT_COMMON },
1239 
1240 	{ MSG_ORIG(MSG_STT_TLS),		STT_TLS },
1241 	{ MSG_ORIG(MSG_STT_TLS_ALT1),		STT_TLS },
1242 
1243 	{ NULL }
1244 };
1245 
1246 /*
1247  * ELF symbol visibility (st_other ELF_ST_VISIBILITY)
1248  */
1249 static elfedit_atoui_sym_t sym_stv[] = {
1250 	{ MSG_ORIG(MSG_STV_DEFAULT),		STV_DEFAULT },
1251 	{ MSG_ORIG(MSG_STV_DEFAULT_ALT1),	STV_DEFAULT },
1252 
1253 	{ MSG_ORIG(MSG_STV_INTERNAL),		STV_INTERNAL },
1254 	{ MSG_ORIG(MSG_STV_INTERNAL_ALT1),	STV_INTERNAL },
1255 
1256 	{ MSG_ORIG(MSG_STV_HIDDEN),		STV_HIDDEN },
1257 	{ MSG_ORIG(MSG_STV_HIDDEN_ALT1),	STV_HIDDEN },
1258 
1259 	{ MSG_ORIG(MSG_STV_PROTECTED),		STV_PROTECTED },
1260 	{ MSG_ORIG(MSG_STV_PROTECTED_ALT1),	STV_PROTECTED },
1261 
1262 	{ NULL }
1263 };
1264 
1265 /*
1266  * ELF syminfo SYMINFO_BT_ special boundto values
1267  */
1268 static elfedit_atoui_sym_t sym_syminfo_bt[] = {
1269 	{ MSG_ORIG(MSG_SYMINFO_BT_SELF),	SYMINFO_BT_SELF },
1270 	{ MSG_ORIG(MSG_SYMINFO_BT_SELF_ALT1),	SYMINFO_BT_SELF },
1271 
1272 	{ MSG_ORIG(MSG_SYMINFO_BT_PARENT),	SYMINFO_BT_PARENT },
1273 	{ MSG_ORIG(MSG_SYMINFO_BT_PARENT_ALT1),	SYMINFO_BT_PARENT },
1274 
1275 	{ MSG_ORIG(MSG_SYMINFO_BT_NONE),	SYMINFO_BT_NONE },
1276 	{ MSG_ORIG(MSG_SYMINFO_BT_NONE_ALT1),	SYMINFO_BT_NONE },
1277 
1278 	{ NULL }
1279 };
1280 
1281 
1282 /*
1283  * ELF syminfo SYMINFO_FLG_ flags
1284  */
1285 static elfedit_atoui_sym_t sym_syminfo_flg[] = {
1286 	{ MSG_ORIG(MSG_SYMINFO_FLG_DIRECT),	SYMINFO_FLG_DIRECT },
1287 	{ MSG_ORIG(MSG_SYMINFO_FLG_DIRECT_ALT1), SYMINFO_FLG_DIRECT },
1288 
1289 	{ MSG_ORIG(MSG_SYMINFO_FLG_COPY),	SYMINFO_FLG_COPY },
1290 	{ MSG_ORIG(MSG_SYMINFO_FLG_COPY_ALT1),	SYMINFO_FLG_COPY },
1291 
1292 	{ MSG_ORIG(MSG_SYMINFO_FLG_LAZYLOAD),	SYMINFO_FLG_LAZYLOAD },
1293 	{ MSG_ORIG(MSG_SYMINFO_FLG_LAZYLOAD_ALT1), SYMINFO_FLG_LAZYLOAD },
1294 
1295 	{ MSG_ORIG(MSG_SYMINFO_FLG_DIRECTBIND),	SYMINFO_FLG_DIRECTBIND },
1296 	{ MSG_ORIG(MSG_SYMINFO_FLG_DIRECTBIND_ALT1), SYMINFO_FLG_DIRECTBIND },
1297 
1298 	{ MSG_ORIG(MSG_SYMINFO_FLG_NOEXTDIRECT), SYMINFO_FLG_NOEXTDIRECT },
1299 	{ MSG_ORIG(MSG_SYMINFO_FLG_NOEXTDIRECT_ALT1), SYMINFO_FLG_NOEXTDIRECT },
1300 
1301 	{ NULL }
1302 };
1303 
1304 
1305 /*
1306  * ELF capabilities tag CA_ values
1307  */
1308 static elfedit_atoui_sym_t sym_ca[] = {
1309 	{ MSG_ORIG(MSG_CA_SUNW_NULL),		CA_SUNW_NULL },
1310 	{ MSG_ORIG(MSG_CA_SUNW_NULL_ALT1),	CA_SUNW_NULL },
1311 
1312 	{ MSG_ORIG(MSG_CA_SUNW_HW_1),		CA_SUNW_HW_1 },
1313 	{ MSG_ORIG(MSG_CA_SUNW_HW_1_ALT1),	CA_SUNW_HW_1 },
1314 
1315 	{ MSG_ORIG(MSG_CA_SUNW_SF_1),		CA_SUNW_SF_1 },
1316 	{ MSG_ORIG(MSG_CA_SUNW_SF_1_ALT1),	CA_SUNW_SF_1 },
1317 
1318 	{ NULL }
1319 };
1320 
1321 /*
1322  * AV_386 flags used for CA_SUNW_HW_1 capabilities
1323  */
1324 static elfedit_atoui_sym_t sym_av_386[] = {
1325 	{ MSG_ORIG(MSG_AV_386_FPU),		AV_386_FPU },
1326 	{ MSG_ORIG(MSG_AV_386_FPU_ALT1),	AV_386_FPU },
1327 
1328 	{ MSG_ORIG(MSG_AV_386_TSC),		AV_386_TSC },
1329 	{ MSG_ORIG(MSG_AV_386_TSC_ALT1),	AV_386_TSC },
1330 
1331 	{ MSG_ORIG(MSG_AV_386_CX8),		AV_386_CX8 },
1332 	{ MSG_ORIG(MSG_AV_386_CX8_ALT1),	AV_386_CX8 },
1333 
1334 	{ MSG_ORIG(MSG_AV_386_SEP),		AV_386_SEP },
1335 	{ MSG_ORIG(MSG_AV_386_SEP_ALT1),	AV_386_SEP },
1336 
1337 	{ MSG_ORIG(MSG_AV_386_AMD_SYSC),	AV_386_AMD_SYSC },
1338 	{ MSG_ORIG(MSG_AV_386_AMD_SYSC_ALT1),	AV_386_AMD_SYSC },
1339 
1340 	{ MSG_ORIG(MSG_AV_386_CMOV),		AV_386_CMOV },
1341 	{ MSG_ORIG(MSG_AV_386_CMOV_ALT1),	AV_386_CMOV },
1342 
1343 	{ MSG_ORIG(MSG_AV_386_MMX),		AV_386_MMX },
1344 	{ MSG_ORIG(MSG_AV_386_MMX_ALT1),	AV_386_MMX },
1345 
1346 	{ MSG_ORIG(MSG_AV_386_AMD_MMX),		AV_386_AMD_MMX },
1347 	{ MSG_ORIG(MSG_AV_386_AMD_MMX_ALT1),	AV_386_AMD_MMX },
1348 
1349 	{ MSG_ORIG(MSG_AV_386_AMD_3DNOW),	AV_386_AMD_3DNow },
1350 	{ MSG_ORIG(MSG_AV_386_AMD_3DNOW_ALT1),	AV_386_AMD_3DNow },
1351 
1352 	{ MSG_ORIG(MSG_AV_386_AMD_3DNOWX),	AV_386_AMD_3DNowx },
1353 	{ MSG_ORIG(MSG_AV_386_AMD_3DNOWX_ALT1),	AV_386_AMD_3DNowx },
1354 
1355 	{ MSG_ORIG(MSG_AV_386_FXSR),		AV_386_FXSR },
1356 	{ MSG_ORIG(MSG_AV_386_FXSR_ALT1),	AV_386_FXSR },
1357 
1358 	{ MSG_ORIG(MSG_AV_386_SSE),		AV_386_SSE },
1359 	{ MSG_ORIG(MSG_AV_386_SSE_ALT1),	AV_386_SSE },
1360 
1361 	{ MSG_ORIG(MSG_AV_386_SSE2),		AV_386_SSE2 },
1362 	{ MSG_ORIG(MSG_AV_386_SSE2_ALT1),	AV_386_SSE2 },
1363 
1364 	{ MSG_ORIG(MSG_AV_386_PAUSE),		AV_386_PAUSE },
1365 	{ MSG_ORIG(MSG_AV_386_PAUSE_ALT1),	AV_386_PAUSE },
1366 
1367 	{ MSG_ORIG(MSG_AV_386_SSE3),		AV_386_SSE3 },
1368 	{ MSG_ORIG(MSG_AV_386_SSE3_ALT1),	AV_386_SSE3 },
1369 
1370 	{ MSG_ORIG(MSG_AV_386_MON),		AV_386_MON },
1371 	{ MSG_ORIG(MSG_AV_386_MON_ALT1),	AV_386_MON },
1372 
1373 	{ MSG_ORIG(MSG_AV_386_CX16),		AV_386_CX16 },
1374 	{ MSG_ORIG(MSG_AV_386_CX16_ALT1),	AV_386_CX16 },
1375 
1376 	{ MSG_ORIG(MSG_AV_386_AHF),		AV_386_AHF },
1377 	{ MSG_ORIG(MSG_AV_386_AHF_ALT1),	AV_386_AHF },
1378 
1379 	{ MSG_ORIG(MSG_AV_386_TSCP),		AV_386_TSCP },
1380 	{ MSG_ORIG(MSG_AV_386_TSCP_ALT1),	AV_386_TSCP },
1381 
1382 	{ MSG_ORIG(MSG_AV_386_AMD_SSE4A),	AV_386_AMD_SSE4A },
1383 	{ MSG_ORIG(MSG_AV_386_AMD_SSE4A_ALT1),	AV_386_AMD_SSE4A },
1384 
1385 	{ MSG_ORIG(MSG_AV_386_POPCNT),		AV_386_POPCNT },
1386 	{ MSG_ORIG(MSG_AV_386_POPCNT_ALT1),	AV_386_POPCNT },
1387 
1388 	{ MSG_ORIG(MSG_AV_386_AMD_LZCNT),	AV_386_AMD_LZCNT },
1389 	{ MSG_ORIG(MSG_AV_386_AMD_LZCNT_ALT1),	AV_386_AMD_LZCNT },
1390 
1391 	{ NULL }
1392 };
1393 
1394 
1395 /*
1396  * AV_SPARC flags used for CA_SUNW_HW_1 capabilities
1397  */
1398 static elfedit_atoui_sym_t sym_av_sparc[] = {
1399 	{ MSG_ORIG(MSG_AV_SPARC_MUL32),		AV_SPARC_MUL32 },
1400 	{ MSG_ORIG(MSG_AV_SPARC_MUL32_ALT1),	AV_SPARC_MUL32 },
1401 
1402 	{ MSG_ORIG(MSG_AV_SPARC_DIV32),		AV_SPARC_DIV32 },
1403 	{ MSG_ORIG(MSG_AV_SPARC_DIV32_ALT1),	AV_SPARC_DIV32 },
1404 
1405 	{ MSG_ORIG(MSG_AV_SPARC_FSMULD),	AV_SPARC_FSMULD },
1406 	{ MSG_ORIG(MSG_AV_SPARC_FSMULD_ALT1),	AV_SPARC_FSMULD },
1407 
1408 	{ MSG_ORIG(MSG_AV_SPARC_V8PLUS),	AV_SPARC_V8PLUS },
1409 	{ MSG_ORIG(MSG_AV_SPARC_V8PLUS_ALT1),	AV_SPARC_V8PLUS },
1410 
1411 	{ MSG_ORIG(MSG_AV_SPARC_POPC),		AV_SPARC_POPC },
1412 	{ MSG_ORIG(MSG_AV_SPARC_POPC_ALT1),	AV_SPARC_POPC },
1413 
1414 	{ MSG_ORIG(MSG_AV_SPARC_VIS),		AV_SPARC_VIS },
1415 	{ MSG_ORIG(MSG_AV_SPARC_VIS_ALT1),	AV_SPARC_VIS },
1416 
1417 	{ MSG_ORIG(MSG_AV_SPARC_VIS2),		AV_SPARC_VIS2 },
1418 	{ MSG_ORIG(MSG_AV_SPARC_VIS2_ALT1),	AV_SPARC_VIS2 },
1419 
1420 	{ MSG_ORIG(MSG_AV_SPARC_ASI_BLK_INIT),	AV_SPARC_ASI_BLK_INIT },
1421 	{ MSG_ORIG(MSG_AV_SPARC_ASI_BLK_INIT_ALT1), AV_SPARC_ASI_BLK_INIT },
1422 
1423 	{ MSG_ORIG(MSG_AV_SPARC_FMAF),		AV_SPARC_FMAF },
1424 	{ MSG_ORIG(MSG_AV_SPARC_FMAF_ALT1),	AV_SPARC_FMAF },
1425 
1426 	{ MSG_ORIG(MSG_AV_SPARC_FJFMAU),	AV_SPARC_FJFMAU },
1427 	{ MSG_ORIG(MSG_AV_SPARC_FJFMAU_ALT1),	AV_SPARC_FJFMAU },
1428 
1429 	{ NULL }
1430 };
1431 
1432 
1433 /*
1434  * SF1_SUNW flags used for CA_SUNW_SF_1 capabilities
1435  */
1436 static elfedit_atoui_sym_t sym_sf1_sunw[] = {
1437 	{ MSG_ORIG(MSG_SF1_SUNW_FPKNWN),	SF1_SUNW_FPKNWN },
1438 	{ MSG_ORIG(MSG_SF1_SUNW_FPKNWN_ALT1),	SF1_SUNW_FPKNWN },
1439 
1440 	{ MSG_ORIG(MSG_SF1_SUNW_FPUSED),	SF1_SUNW_FPUSED },
1441 	{ MSG_ORIG(MSG_SF1_SUNW_FPUSED_ALT1),	SF1_SUNW_FPUSED },
1442 
1443 	{ NULL }
1444 };
1445 
1446 
1447 
1448 
1449 
1450 
1451 
1452 /*
1453  * Array of pointers to atoui arrays for each constant type, indexed
1454  * by elfedit_const_t value. The number and order of entries in this
1455  * table must agree with the definition of elfedit_const_t in elfedit.h.
1456  */
1457 static elfedit_atoui_sym_t *sym_table[] = {
1458 	sym_outstyle,		/* 0: ELFEDIT_CONST_OUTSTYLE */
1459 	sym_minus_o_outstyle,	/* 1: ELFEDIT_CONST_OUTSTYLE_MO */
1460 	sym_bool,		/* 2: ELFEDIT_CONST_BOOL */
1461 	sym_shn,		/* 3: ELFEDIT_CONST_SHN */
1462 	sym_sht,		/* 4: ELFEDIT_CONST_SHT */
1463 	sym_sht_strtab,		/* 5: ELFEDIT_CONST_SHT_STRTAB */
1464 	sym_sht_allsymtab,	/* 6: ELFEDIT_CONST_SHT_ALLSYMTAB */
1465 	sym_sht_symtab,		/* 7: ELFEDIT_CONST_SHT_SYMTAB */
1466 	sym_sht_dynsym,		/* 8: ELFEDIT_CONST_SHT_DYNSYM */
1467 	sym_sht_ldynsym,	/* 9: ELFEDIT_CONST_SHT_LDYNSYM */
1468 	sym_dt,			/* 10: ELFEDIT_CONST_DT: Dynamic tags */
1469 	sym_df,			/* 11: ELFEDIT_CONST_DF: DT_FLAGS */
1470 	sym_df_p1,		/* 12: ELFEDIT_CONST_DF_P1: DF_POSFLAG_1 */
1471 	sym_df_1,		/* 13: ELFEDIT_CONST_DF_1: DT_FLAGS_1 */
1472 	sym_dtf_1,		/* 14: ELFEDIT_CONST_DTF_1: DT_FEATURE_1 */
1473 	sym_ei,			/* 15: ELFEDIT_CONST_EI: Ehdr e_ident indexes */
1474 	sym_et,			/* 16: ELFEDIT_CONST_ET: Ehdr obj type */
1475 	sym_elfclass,		/* 17: ELFEDIT_CONST_ELFCLASS: Ehdr class */
1476 	sym_elfdata,		/* 18: ELFEDIT_CONST_ELFDATA: Ehdr endian */
1477 	sym_ef,			/* 19: ELFEDIT_CONST_EF: Ehdr flags */
1478 	sym_ev,			/* 20: ELFEDIT_CONST_EV: Ehdr version */
1479 	sym_em,			/* 21: ELFEDIT_CONST_EM: Ehdr machine */
1480 	sym_elfosabi,		/* 22: ELFEDIT_CONST_ELFOSABI: Ehdr ABI */
1481 	sym_pt,			/* 23: ELFEDIT_CONST_PT: Phdr type */
1482 	sym_pf,			/* 24: ELFEDIT_CONST_PF: Phdr flags */
1483 	sym_shf,		/* 25: ELFEDIT_CONST_SHF: Shdr flags */
1484 	sym_stb,		/* 26: ELFEDIT_CONST_STB: Sym binding */
1485 	sym_stt,		/* 27: ELFEDIT_CONST_STT: Sym type */
1486 	sym_stv,		/* 28: ELFEDIT_CONST_STV: Sym visibility */
1487 	sym_syminfo_bt,		/* 29: ELFEDIT_CONST_SYMINFO_BT:Syminfo bndto */
1488 	sym_syminfo_flg,	/* 30: ELFEDIT_CONST_SYMINFO_FLG:Syminfo flag */
1489 	sym_ca,			/* 31: ELFEDIT_CONST_CA: Capabilities tags */
1490 	sym_av_386,		/* 32: ELFEDIT_CONST_AV_386: X86 HW caps */
1491 	sym_av_sparc,		/* 33: ELFEDIT_CONST_AV_SPARC: sparc HW caps */
1492 	sym_sf1_sunw,		/* 34: ELFEDIT_CONST_SF1_SUNW: software caps */
1493 };
1494 
1495 
1496 
1497 
1498 
1499 
1500 
1501 /*
1502  * Given an elfedit_const_t value, return the array of elfedit_atoui_sym_t
1503  * entries that it represents.
1504  */
1505 elfedit_atoui_sym_t *
1506 elfedit_const_to_atoui(elfedit_const_t const_type)
1507 {
1508 	if ((const_type < 0) ||
1509 	    (const_type >= (sizeof (sym_table) / sizeof (sym_table[0]))))
1510 		elfedit_msg(ELFEDIT_MSG_ERR, MSG_INTL(MSG_ERR_BADCONST));
1511 
1512 	return (sym_table[const_type]);
1513 }
1514 
1515 
1516 
1517 /*
1518  * Return the elfedit_atoui_t array that corresponds to the
1519  * CA_SUNW_HW_1 hardware capabiliies field for a given
1520  * machine type.
1521  *
1522  * This routine will return NULL if there is no definition for the
1523  * machine specified.
1524  */
1525 elfedit_atoui_sym_t *
1526 elfedit_mach_sunw_hw1_to_atoui(int mach)
1527 {
1528 	switch (mach) {
1529 	case EM_386:
1530 	case EM_486:
1531 	case EM_AMD64:
1532 		return (elfedit_const_to_atoui(ELFEDIT_CONST_AV_386));
1533 
1534 	case EM_SPARC:
1535 	case EM_SPARC32PLUS:
1536 	case EM_SPARCV9:
1537 		return (elfedit_const_to_atoui(ELFEDIT_CONST_AV_SPARC));
1538 	}
1539 
1540 	/* A machine we don't know about */
1541 	return (NULL);
1542 }
1543