xref: /titanic_50/usr/src/lib/libdisasm/common/libdisasm.c (revision dc0093f44ee4fac928e006850f8ed53f68277af5)
1*dc0093f4Seschrock /*
2*dc0093f4Seschrock  * CDDL HEADER START
3*dc0093f4Seschrock  *
4*dc0093f4Seschrock  * The contents of this file are subject to the terms of the
5*dc0093f4Seschrock  * Common Development and Distribution License (the "License").
6*dc0093f4Seschrock  * You may not use this file except in compliance with the License.
7*dc0093f4Seschrock  *
8*dc0093f4Seschrock  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9*dc0093f4Seschrock  * or http://www.opensolaris.org/os/licensing.
10*dc0093f4Seschrock  * See the License for the specific language governing permissions
11*dc0093f4Seschrock  * and limitations under the License.
12*dc0093f4Seschrock  *
13*dc0093f4Seschrock  * When distributing Covered Code, include this CDDL HEADER in each
14*dc0093f4Seschrock  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15*dc0093f4Seschrock  * If applicable, add the following below this CDDL HEADER, with the
16*dc0093f4Seschrock  * fields enclosed by brackets "[]" replaced with your own identifying
17*dc0093f4Seschrock  * information: Portions Copyright [yyyy] [name of copyright owner]
18*dc0093f4Seschrock  *
19*dc0093f4Seschrock  * CDDL HEADER END
20*dc0093f4Seschrock  */
21*dc0093f4Seschrock 
22*dc0093f4Seschrock /*
23*dc0093f4Seschrock  * Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
24*dc0093f4Seschrock  * Use is subject to license terms.
25*dc0093f4Seschrock  */
26*dc0093f4Seschrock 
27*dc0093f4Seschrock #pragma ident	"%Z%%M%	%I%	%E% SMI"
28*dc0093f4Seschrock 
29*dc0093f4Seschrock #include <libdisasm.h>
30*dc0093f4Seschrock #include <stdlib.h>
31*dc0093f4Seschrock #ifdef DIS_STANDALONE
32*dc0093f4Seschrock #include <mdb/mdb_modapi.h>
33*dc0093f4Seschrock #endif
34*dc0093f4Seschrock 
35*dc0093f4Seschrock static int _dis_errno;
36*dc0093f4Seschrock 
37*dc0093f4Seschrock /*
38*dc0093f4Seschrock  * For the standalone library, we need to link against mdb's malloc/free.
39*dc0093f4Seschrock  * Otherwise, use the standard malloc/free.
40*dc0093f4Seschrock  */
41*dc0093f4Seschrock #ifdef DIS_STANDALONE
42*dc0093f4Seschrock void *
43*dc0093f4Seschrock dis_zalloc(size_t bytes)
44*dc0093f4Seschrock {
45*dc0093f4Seschrock 	return (mdb_zalloc(bytes, UM_SLEEP));
46*dc0093f4Seschrock }
47*dc0093f4Seschrock 
48*dc0093f4Seschrock void
49*dc0093f4Seschrock dis_free(void *ptr, size_t bytes)
50*dc0093f4Seschrock {
51*dc0093f4Seschrock 	mdb_free(ptr, bytes);
52*dc0093f4Seschrock }
53*dc0093f4Seschrock #else
54*dc0093f4Seschrock void *
55*dc0093f4Seschrock dis_zalloc(size_t bytes)
56*dc0093f4Seschrock {
57*dc0093f4Seschrock 	return (calloc(1, bytes));
58*dc0093f4Seschrock }
59*dc0093f4Seschrock 
60*dc0093f4Seschrock /*ARGSUSED*/
61*dc0093f4Seschrock void
62*dc0093f4Seschrock dis_free(void *ptr, size_t bytes)
63*dc0093f4Seschrock {
64*dc0093f4Seschrock 	free(ptr);
65*dc0093f4Seschrock }
66*dc0093f4Seschrock #endif
67*dc0093f4Seschrock 
68*dc0093f4Seschrock int
69*dc0093f4Seschrock dis_seterrno(int error)
70*dc0093f4Seschrock {
71*dc0093f4Seschrock 	_dis_errno = error;
72*dc0093f4Seschrock 	return (-1);
73*dc0093f4Seschrock }
74*dc0093f4Seschrock 
75*dc0093f4Seschrock int
76*dc0093f4Seschrock dis_errno(void)
77*dc0093f4Seschrock {
78*dc0093f4Seschrock 	return (_dis_errno);
79*dc0093f4Seschrock }
80*dc0093f4Seschrock 
81*dc0093f4Seschrock const char *
82*dc0093f4Seschrock dis_strerror(int error)
83*dc0093f4Seschrock {
84*dc0093f4Seschrock 	switch (error) {
85*dc0093f4Seschrock 	case E_DIS_NOMEM:
86*dc0093f4Seschrock 		return ("out of memory");
87*dc0093f4Seschrock 	case E_DIS_INVALFLAG:
88*dc0093f4Seschrock 		return ("invalid flags for this architecture");
89*dc0093f4Seschrock 	default:
90*dc0093f4Seschrock 		return ("unknown error");
91*dc0093f4Seschrock 	}
92*dc0093f4Seschrock }
93