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, Version 1.0 only 6 * (the "License"). You may not use this file except in compliance 7 * with the License. 8 * 9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10 * or http://www.opensolaris.org/os/licensing. 11 * See the License for the specific language governing permissions 12 * and limitations under the License. 13 * 14 * When distributing Covered Code, include this CDDL HEADER in each 15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16 * If applicable, add the following below this CDDL HEADER, with the 17 * fields enclosed by brackets "[]" replaced with your own identifying 18 * information: Portions Copyright [yyyy] [name of copyright owner] 19 * 20 * CDDL HEADER END 21 */ 22 /* 23 * 24 * priv.h 25 * 26 * Internal header file for the mdbug package. 27 * 28 */ 29 30 #pragma ident "%Z%%M% %I% %E% SMI" 31 /* Copyright (c) 1994 by Sun Microsystems, Inc. */ 32 33 /* 34 * .LIBRARY base 35 * .NAME dbug_state - used by dbug_routine to maintain state 36 * 37 * .SECTION Description 38 * The dbug_state class is used by the dbug_routine class to maintain 39 * state established by the dbug_push() macro. 40 * The priv.h include file is also used to store constructs used internally 41 * by the mdbug package. 42 */ 43 44 #ifndef PRIV_H 45 #define PRIV_H 46 47 /* DBUG_DOS or DBUG_UNIX should be defined in the makefile to 1 */ 48 49 /* Define various shorthand notations. */ 50 #define boolean int 51 #define TRUE 1 52 #define FALSE 0 53 #define NOT ! 54 #define XOR ^ 55 #define MAX(x, y) (((x) > (y)) ? (x) : (y)) 56 #define MIN(x, y) (((x) > (y)) ? (y) : (x)) 57 58 /* Determine which way the stack grows */ 59 #if DBUG_DOS || DBUG_UNIX 60 const int GROWDOWN = TRUE; 61 #else 62 const int GROWDOWN = FALSE; 63 #endif 64 65 /* Manifest constants which may be "tuned" if desired. */ 66 #define PRINTBUF 1024 /* Print buffer size */ 67 #define INDENT 4 /* Indentation per trace level */ 68 #define MAXDEPTH 200 /* Maximum trace depth default */ 69 70 boolean file_exists(const char *pathname); 71 boolean file_writable(const char *pathname); 72 73 /* 74 * This class is used to maintain the state established by the 75 * push call. 76 */ 77 typedef struct dbug_state_object { 78 79 boolean sf_trace:1; /* TRUE if tracing is on */ 80 boolean sf_debug:1; /* TRUE if debugging is on */ 81 boolean sf_file:1; /* TRUE if file name print enabled */ 82 boolean sf_line:1; /* TRUE if line number print enabled */ 83 boolean sf_depth:1; /* TRUE if function nest level print enabled */ 84 boolean sf_process:1; /* TRUE if process name print enabled */ 85 boolean sf_number:1; /* TRUE if number each line */ 86 boolean sf_pid:1; /* TRUE if identify each line with pid */ 87 boolean sf_stack:1; /* TRUE if should print stack depth */ 88 boolean sf_time:1; /* TRUE if should print time information */ 89 boolean sf_didopen:1; /* TRUE if opened the log file */ 90 boolean sf_thread:1; /* TRUE if should print thread information */ 91 int s_maxdepth; /* Current maximum trace depth */ 92 int s_delay; /* Delay amount after each output line */ 93 u_int s_level; /* Current function nesting level */ 94 time_t s_starttime; /* Time push was done */ 95 FILE *s_out_file; /* Current output stream */ 96 flist_object_t *s_functions; /* List of functions */ 97 flist_object_t *s_pfunctions; /* List of profiled functions */ 98 flist_object_t *s_keywords; /* List of debug keywords */ 99 flist_object_t *s_processes; /* List of process names */ 100 101 struct dbug_state_object *s_next; /* pointer to next pushed state */ 102 }dbug_state_object_t; 103 104 dbug_state_object_t *dbug_state_create(int); 105 void dbug_state_destroy(dbug_state_object_t *); 106 107 #ifdef _REENTRANT 108 #define LOCK_THREAD_DATA() mutex_lock(&mdt_lock) 109 #define ALLOC_THREAD_DATA_PTR(TDP) db_alloc_thread_data(TDP) 110 #define GET_THREAD_DATA_PTR(TDP) thr_getspecific(mdt_key, (void **)TDP) 111 #define UNLOCK_THREAD_DATA() mutex_unlock(&mdt_lock) 112 #define FREE_THREAD_DATA(PTR) free(PTR) 113 #else 114 #define LOCK_THREAD_DATA() 115 #define ALLOC_THREAD_DATA_PTR(TDP) *TDP = &mdt_data 116 #define GET_THREAD_DATA_PTR(TDP) *TDP = &mdt_data 117 #define UNLOCK_THREAD_DATA() 118 #define FREE_THREAD_DATA(PTR) 119 #endif 120 #endif /* PRIV_H */