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