1*0Sstevel@tonic-gate /*
2*0Sstevel@tonic-gate  * CDDL HEADER START
3*0Sstevel@tonic-gate  *
4*0Sstevel@tonic-gate  * The contents of this file are subject to the terms of the
5*0Sstevel@tonic-gate  * Common Development and Distribution License, Version 1.0 only
6*0Sstevel@tonic-gate  * (the "License").  You may not use this file except in compliance
7*0Sstevel@tonic-gate  * with the License.
8*0Sstevel@tonic-gate  *
9*0Sstevel@tonic-gate  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10*0Sstevel@tonic-gate  * or http://www.opensolaris.org/os/licensing.
11*0Sstevel@tonic-gate  * See the License for the specific language governing permissions
12*0Sstevel@tonic-gate  * and limitations under the License.
13*0Sstevel@tonic-gate  *
14*0Sstevel@tonic-gate  * When distributing Covered Code, include this CDDL HEADER in each
15*0Sstevel@tonic-gate  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16*0Sstevel@tonic-gate  * If applicable, add the following below this CDDL HEADER, with the
17*0Sstevel@tonic-gate  * fields enclosed by brackets "[]" replaced with your own identifying
18*0Sstevel@tonic-gate  * information: Portions Copyright [yyyy] [name of copyright owner]
19*0Sstevel@tonic-gate  *
20*0Sstevel@tonic-gate  * CDDL HEADER END
21*0Sstevel@tonic-gate  */
22*0Sstevel@tonic-gate /*
23*0Sstevel@tonic-gate  * Copyright 2005 Sun Microsystems, Inc.  All rights reserved.
24*0Sstevel@tonic-gate  * Use is subject to license terms.
25*0Sstevel@tonic-gate  */
26*0Sstevel@tonic-gate #pragma ident	"%Z%%M%	%I%	%E% SMI"
27*0Sstevel@tonic-gate 
28*0Sstevel@tonic-gate /*
29*0Sstevel@tonic-gate  * String conversion routine for .dynamic tag entries.
30*0Sstevel@tonic-gate  */
31*0Sstevel@tonic-gate #include	<stdio.h>
32*0Sstevel@tonic-gate #include	<string.h>
33*0Sstevel@tonic-gate #include	<sys/elf_SPARC.h>
34*0Sstevel@tonic-gate #include	"_conv.h"
35*0Sstevel@tonic-gate #include	"dynamic_msg.h"
36*0Sstevel@tonic-gate 
37*0Sstevel@tonic-gate #define	POSSZ	MSG_GBL_OSQBRKT_SIZE + \
38*0Sstevel@tonic-gate 		MSG_DFP_LAZYLOAD_SIZE + \
39*0Sstevel@tonic-gate 		MSG_DFP_GROUPPERM_SIZE + \
40*0Sstevel@tonic-gate 		MSG_GBL_CSQBRKT_SIZE
41*0Sstevel@tonic-gate 
42*0Sstevel@tonic-gate const char *
43*0Sstevel@tonic-gate conv_dynposflag_1_str(uint_t flags)
44*0Sstevel@tonic-gate {
45*0Sstevel@tonic-gate 	static char	string[POSSZ] = { '\0' };
46*0Sstevel@tonic-gate 	if (flags == 0)
47*0Sstevel@tonic-gate 		return (MSG_ORIG(MSG_GBL_ZERO));
48*0Sstevel@tonic-gate 
49*0Sstevel@tonic-gate 	(void) strcpy(string, MSG_ORIG(MSG_GBL_OSQBRKT));
50*0Sstevel@tonic-gate 
51*0Sstevel@tonic-gate 	if (flags & DF_P1_LAZYLOAD)
52*0Sstevel@tonic-gate 		(void) strcat(string, MSG_ORIG(MSG_DFP_LAZYLOAD));
53*0Sstevel@tonic-gate 	if (flags & DF_P1_GROUPPERM)
54*0Sstevel@tonic-gate 		(void) strcat(string, MSG_ORIG(MSG_DFP_GROUPPERM));
55*0Sstevel@tonic-gate 
56*0Sstevel@tonic-gate 	(void) strcat(string, MSG_ORIG(MSG_GBL_CSQBRKT));
57*0Sstevel@tonic-gate 
58*0Sstevel@tonic-gate 	return ((const char *)string);
59*0Sstevel@tonic-gate }
60*0Sstevel@tonic-gate 
61*0Sstevel@tonic-gate #define	FLAGSZ	MSG_DF_ORIGIN_SIZE + \
62*0Sstevel@tonic-gate 		MSG_DF_SYMBOLIC_SIZE + \
63*0Sstevel@tonic-gate 		MSG_DF_TEXTREL_SIZE + \
64*0Sstevel@tonic-gate 		MSG_DF_BIND_NOW_SIZE + \
65*0Sstevel@tonic-gate 		MSG_DF_STATIC_TLS_SIZE
66*0Sstevel@tonic-gate 
67*0Sstevel@tonic-gate const char *
68*0Sstevel@tonic-gate conv_dynflag_str(uint_t flags)
69*0Sstevel@tonic-gate {
70*0Sstevel@tonic-gate 	static char	string[FLAGSZ] = { '\0' };
71*0Sstevel@tonic-gate 	if (flags == 0)
72*0Sstevel@tonic-gate 		return (MSG_ORIG(MSG_GBL_ZERO));
73*0Sstevel@tonic-gate 	else {
74*0Sstevel@tonic-gate 		(void) strcpy(string, MSG_ORIG(MSG_GBL_OSQBRKT));
75*0Sstevel@tonic-gate 		if (flags & DF_ORIGIN)
76*0Sstevel@tonic-gate 			(void) strcat(string, MSG_ORIG(MSG_DF_ORIGIN));
77*0Sstevel@tonic-gate 		if (flags & DF_SYMBOLIC)
78*0Sstevel@tonic-gate 			(void) strcat(string, MSG_ORIG(MSG_DF_SYMBOLIC));
79*0Sstevel@tonic-gate 		if (flags & DF_TEXTREL)
80*0Sstevel@tonic-gate 			(void) strcat(string, MSG_ORIG(MSG_DF_TEXTREL));
81*0Sstevel@tonic-gate 		if (flags & DF_BIND_NOW)
82*0Sstevel@tonic-gate 			(void) strcat(string, MSG_ORIG(MSG_DF_BIND_NOW));
83*0Sstevel@tonic-gate 		if (flags & DF_STATIC_TLS)
84*0Sstevel@tonic-gate 			(void) strcat(string, MSG_ORIG(MSG_DF_STATIC_TLS));
85*0Sstevel@tonic-gate 
86*0Sstevel@tonic-gate 		(void) strcat(string, MSG_ORIG(MSG_GBL_CSQBRKT));
87*0Sstevel@tonic-gate 
88*0Sstevel@tonic-gate 		return ((const char *)string);
89*0Sstevel@tonic-gate 	}
90*0Sstevel@tonic-gate }
91*0Sstevel@tonic-gate 
92*0Sstevel@tonic-gate #define	FLAG1SZ	MSG_GBL_OSQBRKT_SIZE + \
93*0Sstevel@tonic-gate 		MSG_DF1_NOW_SIZE + \
94*0Sstevel@tonic-gate 		MSG_DF1_GROUP_SIZE + \
95*0Sstevel@tonic-gate 		MSG_DF1_NODELETE_SIZE + \
96*0Sstevel@tonic-gate 		MSG_DF1_LOADFLTR_SIZE + \
97*0Sstevel@tonic-gate 		MSG_DF1_INITFIRST_SIZE + \
98*0Sstevel@tonic-gate 		MSG_DF1_NOOPEN_SIZE + \
99*0Sstevel@tonic-gate 		MSG_DF1_ORIGIN_SIZE + \
100*0Sstevel@tonic-gate 		MSG_DF1_DIRECT_SIZE + \
101*0Sstevel@tonic-gate 		MSG_DF1_TRANS_SIZE + \
102*0Sstevel@tonic-gate 		MSG_DF1_INTERPOSE_SIZE + \
103*0Sstevel@tonic-gate 		MSG_DF1_NODEFLIB_SIZE + \
104*0Sstevel@tonic-gate 		MSG_DF1_NODUMP_SIZE + \
105*0Sstevel@tonic-gate 		MSG_DF1_CONFALT_SIZE + \
106*0Sstevel@tonic-gate 		MSG_DF1_ENDFILTEE_SIZE + \
107*0Sstevel@tonic-gate 		MSG_DF1_DISPRELPND_SIZE + \
108*0Sstevel@tonic-gate 		MSG_DF1_DISPRELDNE_SIZE + \
109*0Sstevel@tonic-gate 		MSG_DF1_NODIRECT_SIZE + \
110*0Sstevel@tonic-gate 		MSG_DF1_IGNMULDEF_SIZE + \
111*0Sstevel@tonic-gate 		MSG_DF1_NOKSYMS_SIZE + \
112*0Sstevel@tonic-gate 		MSG_DF1_NORELOC_SIZE + \
113*0Sstevel@tonic-gate 		MSG_GBL_CSQBRKT_SIZE
114*0Sstevel@tonic-gate 
115*0Sstevel@tonic-gate const char *
116*0Sstevel@tonic-gate conv_dynflag_1_str(uint_t flags)
117*0Sstevel@tonic-gate {
118*0Sstevel@tonic-gate 	static char	string[FLAG1SZ] = { '\0' };
119*0Sstevel@tonic-gate 
120*0Sstevel@tonic-gate 	if (flags == 0)
121*0Sstevel@tonic-gate 		return (MSG_ORIG(MSG_GBL_ZERO));
122*0Sstevel@tonic-gate 	else {
123*0Sstevel@tonic-gate 		(void) strcpy(string, MSG_ORIG(MSG_GBL_OSQBRKT));
124*0Sstevel@tonic-gate 
125*0Sstevel@tonic-gate 		if (flags & DF_1_NOW)
126*0Sstevel@tonic-gate 			(void) strcat(string, MSG_ORIG(MSG_DF1_NOW));
127*0Sstevel@tonic-gate 		if (flags & DF_1_GROUP)
128*0Sstevel@tonic-gate 			(void) strcat(string, MSG_ORIG(MSG_DF1_GROUP));
129*0Sstevel@tonic-gate 		if (flags & DF_1_NODELETE)
130*0Sstevel@tonic-gate 			(void) strcat(string, MSG_ORIG(MSG_DF1_NODELETE));
131*0Sstevel@tonic-gate 		if (flags & DF_1_LOADFLTR)
132*0Sstevel@tonic-gate 			(void) strcat(string, MSG_ORIG(MSG_DF1_LOADFLTR));
133*0Sstevel@tonic-gate 		if (flags & DF_1_INITFIRST)
134*0Sstevel@tonic-gate 			(void) strcat(string, MSG_ORIG(MSG_DF1_INITFIRST));
135*0Sstevel@tonic-gate 		if (flags & DF_1_NOOPEN)
136*0Sstevel@tonic-gate 			(void) strcat(string, MSG_ORIG(MSG_DF1_NOOPEN));
137*0Sstevel@tonic-gate 		if (flags & DF_1_ORIGIN)
138*0Sstevel@tonic-gate 			(void) strcat(string, MSG_ORIG(MSG_DF1_ORIGIN));
139*0Sstevel@tonic-gate 		if (flags & DF_1_DIRECT)
140*0Sstevel@tonic-gate 			(void) strcat(string, MSG_ORIG(MSG_DF1_DIRECT));
141*0Sstevel@tonic-gate 		if (flags & DF_1_TRANS)
142*0Sstevel@tonic-gate 			(void) strcat(string, MSG_ORIG(MSG_DF1_TRANS));
143*0Sstevel@tonic-gate 		if (flags & DF_1_INTERPOSE)
144*0Sstevel@tonic-gate 			(void) strcat(string, MSG_ORIG(MSG_DF1_INTERPOSE));
145*0Sstevel@tonic-gate 		if (flags & DF_1_NODEFLIB)
146*0Sstevel@tonic-gate 			(void) strcat(string, MSG_ORIG(MSG_DF1_NODEFLIB));
147*0Sstevel@tonic-gate 		if (flags & DF_1_NODUMP)
148*0Sstevel@tonic-gate 			(void) strcat(string, MSG_ORIG(MSG_DF1_NODUMP));
149*0Sstevel@tonic-gate 		if (flags & DF_1_CONFALT)
150*0Sstevel@tonic-gate 			(void) strcat(string, MSG_ORIG(MSG_DF1_CONFALT));
151*0Sstevel@tonic-gate 		if (flags & DF_1_ENDFILTEE)
152*0Sstevel@tonic-gate 			(void) strcat(string, MSG_ORIG(MSG_DF1_ENDFILTEE));
153*0Sstevel@tonic-gate 		if (flags & DF_1_DISPRELPND)
154*0Sstevel@tonic-gate 			(void) strcat(string, MSG_ORIG(MSG_DF1_DISPRELPND));
155*0Sstevel@tonic-gate 		if (flags & DF_1_DISPRELDNE)
156*0Sstevel@tonic-gate 			(void) strcat(string, MSG_ORIG(MSG_DF1_DISPRELDNE));
157*0Sstevel@tonic-gate 		if (flags & DF_1_NODIRECT)
158*0Sstevel@tonic-gate 			(void) strcat(string, MSG_ORIG(MSG_DF1_NODIRECT));
159*0Sstevel@tonic-gate 		if (flags & DF_1_IGNMULDEF)
160*0Sstevel@tonic-gate 			(void) strcat(string, MSG_ORIG(MSG_DF1_IGNMULDEF));
161*0Sstevel@tonic-gate 		if (flags & DF_1_NOKSYMS)
162*0Sstevel@tonic-gate 			(void) strcat(string, MSG_ORIG(MSG_DF1_NOKSYMS));
163*0Sstevel@tonic-gate 		if (flags & DF_1_NORELOC)
164*0Sstevel@tonic-gate 			(void) strcat(string, MSG_ORIG(MSG_DF1_NORELOC));
165*0Sstevel@tonic-gate 
166*0Sstevel@tonic-gate 		(void) strcat(string, MSG_ORIG(MSG_GBL_CSQBRKT));
167*0Sstevel@tonic-gate 
168*0Sstevel@tonic-gate 		return ((const char *)string);
169*0Sstevel@tonic-gate 	}
170*0Sstevel@tonic-gate }
171*0Sstevel@tonic-gate 
172*0Sstevel@tonic-gate #define	FEATSZ	MSG_GBL_OSQBRKT_SIZE + \
173*0Sstevel@tonic-gate 		MSG_DTF_PARINIT_SIZE + \
174*0Sstevel@tonic-gate 		MSG_DTF_CONFEXP_SIZE + \
175*0Sstevel@tonic-gate 		MSG_GBL_CSQBRKT_SIZE
176*0Sstevel@tonic-gate 
177*0Sstevel@tonic-gate const char *
178*0Sstevel@tonic-gate conv_dynfeature_1_str(uint_t flags)
179*0Sstevel@tonic-gate {
180*0Sstevel@tonic-gate 	static char	string[FEATSZ] = { '\0' };
181*0Sstevel@tonic-gate 
182*0Sstevel@tonic-gate 	if (flags == 0)
183*0Sstevel@tonic-gate 		return (MSG_ORIG(MSG_GBL_ZERO));
184*0Sstevel@tonic-gate 	else {
185*0Sstevel@tonic-gate 		(void) strcpy(string, MSG_ORIG(MSG_GBL_OSQBRKT));
186*0Sstevel@tonic-gate 
187*0Sstevel@tonic-gate 		if (flags & DTF_1_PARINIT)
188*0Sstevel@tonic-gate 			(void) strcat(string, MSG_ORIG(MSG_DTF_PARINIT));
189*0Sstevel@tonic-gate 		if (flags & DTF_1_CONFEXP)
190*0Sstevel@tonic-gate 			(void) strcat(string, MSG_ORIG(MSG_DTF_CONFEXP));
191*0Sstevel@tonic-gate 
192*0Sstevel@tonic-gate 		(void) strcat(string, MSG_ORIG(MSG_GBL_CSQBRKT));
193*0Sstevel@tonic-gate 
194*0Sstevel@tonic-gate 		return ((const char *)string);
195*0Sstevel@tonic-gate 	}
196*0Sstevel@tonic-gate }
197*0Sstevel@tonic-gate 
198*0Sstevel@tonic-gate const Msg _dyntag_tags[DT_MAXPOSTAGS] = {
199*0Sstevel@tonic-gate 	MSG_DYN_NULL,		MSG_DYN_NEEDED,		MSG_DYN_PLTRELSZ,
200*0Sstevel@tonic-gate 	MSG_DYN_PLTGOT,		MSG_DYN_HASH,		MSG_DYN_STRTAB,
201*0Sstevel@tonic-gate 	MSG_DYN_SYMTAB,		MSG_DYN_RELA,		MSG_DYN_RELASZ,
202*0Sstevel@tonic-gate 	MSG_DYN_RELAENT,	MSG_DYN_STRSZ,		MSG_DYN_SYMENT,
203*0Sstevel@tonic-gate 	MSG_DYN_INIT,		MSG_DYN_FINI,		MSG_DYN_SONAME,
204*0Sstevel@tonic-gate 	MSG_DYN_RPATH,		MSG_DYN_SYMBOLIC,	MSG_DYN_REL,
205*0Sstevel@tonic-gate 	MSG_DYN_RELSZ,		MSG_DYN_RELENT,		MSG_DYN_PLTREL,
206*0Sstevel@tonic-gate 	MSG_DYN_DEBUG,		MSG_DYN_TEXTREL,	MSG_DYN_JMPREL,
207*0Sstevel@tonic-gate 	MSG_DYN_BIND_NOW,	MSG_DYN_INIT_ARRAY,	MSG_DYN_FINI_ARRAY,
208*0Sstevel@tonic-gate 	MSG_DYN_INIT_ARRAYSZ,	MSG_DYN_FINI_ARRAYSZ,	MSG_DYN_RUNPATH,
209*0Sstevel@tonic-gate 	MSG_DYN_FLAGS,		MSG_DYN_NULL,		MSG_DYN_PREINIT_ARRAY,
210*0Sstevel@tonic-gate 	MSG_DYN_PREINIT_ARRAYSZ
211*0Sstevel@tonic-gate };
212*0Sstevel@tonic-gate 
213*0Sstevel@tonic-gate const char *
214*0Sstevel@tonic-gate conv_dyntag_str(uint64_t tag, ushort_t mach)
215*0Sstevel@tonic-gate {
216*0Sstevel@tonic-gate 	static char	string[STRSIZE] = { '\0' };
217*0Sstevel@tonic-gate 
218*0Sstevel@tonic-gate 	if (tag < DT_MAXPOSTAGS) {
219*0Sstevel@tonic-gate 		/*
220*0Sstevel@tonic-gate 		 * Generic dynamic tags.
221*0Sstevel@tonic-gate 		 */
222*0Sstevel@tonic-gate 		return (MSG_ORIG(_dyntag_tags[tag]));
223*0Sstevel@tonic-gate 	} else {
224*0Sstevel@tonic-gate 		/*
225*0Sstevel@tonic-gate 		 * SUNW: DT_LOOS -> DT_HIOS range.
226*0Sstevel@tonic-gate 		 */
227*0Sstevel@tonic-gate 		if (tag == DT_SUNW_AUXILIARY)
228*0Sstevel@tonic-gate 			return (MSG_ORIG(MSG_DYN_SUNW_AUXILIARY));
229*0Sstevel@tonic-gate 		else if (tag == DT_SUNW_RTLDINF)
230*0Sstevel@tonic-gate 			return (MSG_ORIG(MSG_DYN_SUNW_RTLDINF));
231*0Sstevel@tonic-gate 		else if (tag == DT_SUNW_FILTER)
232*0Sstevel@tonic-gate 			return (MSG_ORIG(MSG_DYN_SUNW_FILTER));
233*0Sstevel@tonic-gate 		else if (tag == DT_SUNW_CAP)
234*0Sstevel@tonic-gate 			return (MSG_ORIG(MSG_DYN_SUNW_CAP));
235*0Sstevel@tonic-gate 
236*0Sstevel@tonic-gate 		/*
237*0Sstevel@tonic-gate 		 * SUNW: DT_VALRNGLO - DT_VALRNGHI range.
238*0Sstevel@tonic-gate 		 */
239*0Sstevel@tonic-gate 		else if (tag == DT_CHECKSUM)
240*0Sstevel@tonic-gate 			return (MSG_ORIG(MSG_DYN_CHECKSUM));
241*0Sstevel@tonic-gate 		else if (tag == DT_PLTPADSZ)
242*0Sstevel@tonic-gate 			return (MSG_ORIG(MSG_DYN_PLTPADSZ));
243*0Sstevel@tonic-gate 		else if (tag == DT_MOVEENT)
244*0Sstevel@tonic-gate 			return (MSG_ORIG(MSG_DYN_MOVEENT));
245*0Sstevel@tonic-gate 		else if (tag == DT_MOVESZ)
246*0Sstevel@tonic-gate 			return (MSG_ORIG(MSG_DYN_MOVESZ));
247*0Sstevel@tonic-gate 		else if (tag == DT_FEATURE_1)
248*0Sstevel@tonic-gate 			return (MSG_ORIG(MSG_DYN_FEATURE_1));
249*0Sstevel@tonic-gate 		else if (tag == DT_POSFLAG_1)
250*0Sstevel@tonic-gate 			return (MSG_ORIG(MSG_DYN_POSFLAG_1));
251*0Sstevel@tonic-gate 		else if (tag == DT_SYMINSZ)
252*0Sstevel@tonic-gate 			return (MSG_ORIG(MSG_DYN_SYMINSZ));
253*0Sstevel@tonic-gate 		else if (tag == DT_SYMINENT)
254*0Sstevel@tonic-gate 			return (MSG_ORIG(MSG_DYN_SYMINENT));
255*0Sstevel@tonic-gate 
256*0Sstevel@tonic-gate 		/*
257*0Sstevel@tonic-gate 		 * SUNW: DT_ADDRRNGLO - DT_ADDRRNGHI range.
258*0Sstevel@tonic-gate 		 */
259*0Sstevel@tonic-gate 		else if (tag == DT_CONFIG)
260*0Sstevel@tonic-gate 			return (MSG_ORIG(MSG_DYN_CONFIG));
261*0Sstevel@tonic-gate 		else if (tag == DT_DEPAUDIT)
262*0Sstevel@tonic-gate 			return (MSG_ORIG(MSG_DYN_DEPAUDIT));
263*0Sstevel@tonic-gate 		else if (tag == DT_AUDIT)
264*0Sstevel@tonic-gate 			return (MSG_ORIG(MSG_DYN_AUDIT));
265*0Sstevel@tonic-gate 		else if (tag == DT_PLTPAD)
266*0Sstevel@tonic-gate 			return (MSG_ORIG(MSG_DYN_PLTPAD));
267*0Sstevel@tonic-gate 		else if (tag == DT_MOVETAB)
268*0Sstevel@tonic-gate 			return (MSG_ORIG(MSG_DYN_MOVETAB));
269*0Sstevel@tonic-gate 		else if (tag == DT_SYMINFO)
270*0Sstevel@tonic-gate 			return (MSG_ORIG(MSG_DYN_SYMINFO));
271*0Sstevel@tonic-gate 
272*0Sstevel@tonic-gate 		/*
273*0Sstevel@tonic-gate 		 * SUNW: generic range.
274*0Sstevel@tonic-gate 		 */
275*0Sstevel@tonic-gate 		else if (tag == DT_VERSYM)
276*0Sstevel@tonic-gate 			return (MSG_ORIG(MSG_DYN_VERSYM));
277*0Sstevel@tonic-gate 		else if (tag == DT_RELACOUNT)
278*0Sstevel@tonic-gate 			return (MSG_ORIG(MSG_DYN_RELACOUNT));
279*0Sstevel@tonic-gate 		else if (tag == DT_RELCOUNT)
280*0Sstevel@tonic-gate 			return (MSG_ORIG(MSG_DYN_RELCOUNT));
281*0Sstevel@tonic-gate 		else if (tag == DT_FLAGS_1)
282*0Sstevel@tonic-gate 			return (MSG_ORIG(MSG_DYN_FLAGS_1));
283*0Sstevel@tonic-gate 		else if (tag == DT_VERDEF)
284*0Sstevel@tonic-gate 			return (MSG_ORIG(MSG_DYN_VERDEF));
285*0Sstevel@tonic-gate 		else if (tag == DT_VERDEFNUM)
286*0Sstevel@tonic-gate 			return (MSG_ORIG(MSG_DYN_VERDEFNUM));
287*0Sstevel@tonic-gate 		else if (tag == DT_VERNEED)
288*0Sstevel@tonic-gate 			return (MSG_ORIG(MSG_DYN_VERNEED));
289*0Sstevel@tonic-gate 		else if (tag == DT_VERNEEDNUM)
290*0Sstevel@tonic-gate 			return (MSG_ORIG(MSG_DYN_VERNEEDNUM));
291*0Sstevel@tonic-gate 		else if (tag == DT_AUXILIARY)
292*0Sstevel@tonic-gate 			return (MSG_ORIG(MSG_DYN_AUXILIARY));
293*0Sstevel@tonic-gate 		else if (tag == DT_USED)
294*0Sstevel@tonic-gate 			return (MSG_ORIG(MSG_DYN_USED));
295*0Sstevel@tonic-gate 		else if (tag == DT_FILTER)
296*0Sstevel@tonic-gate 			return (MSG_ORIG(MSG_DYN_FILTER));
297*0Sstevel@tonic-gate 
298*0Sstevel@tonic-gate 		/*
299*0Sstevel@tonic-gate 		 * SUNW: machine specific range.
300*0Sstevel@tonic-gate 		 */
301*0Sstevel@tonic-gate 		else if (((mach == EM_SPARC) || (mach == EM_SPARCV9) ||
302*0Sstevel@tonic-gate 		    (mach == EM_SPARC32PLUS)) && (tag == DT_SPARC_REGISTER))
303*0Sstevel@tonic-gate 			/* this is so x86 can display a sparc binary */
304*0Sstevel@tonic-gate 			return (MSG_ORIG(MSG_DYN_REGISTER));
305*0Sstevel@tonic-gate 		else if (tag == DT_DEPRECATED_SPARC_REGISTER)
306*0Sstevel@tonic-gate 			return (MSG_ORIG(MSG_DYN_REGISTER));
307*0Sstevel@tonic-gate 		else
308*0Sstevel@tonic-gate 			return (conv_invalid_str(string, STRSIZE, tag, 0));
309*0Sstevel@tonic-gate 	}
310*0Sstevel@tonic-gate }
311