blob: e2427f38a258a46a3b4ffd3a613a1f70f74b38e5 [file] [log] [blame]
stevel@tonic-gate7c478bd2005-06-14 00:00:00 -07001/*
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 * Copyright (c) 1998-2000 by Sun Microsystems, Inc.
24 * All rights reserved.
25 */
26
27#ifndef _APPTRACE_H
28#define _APPTRACE_H
29
30#pragma ident "%Z%%M% %I% %E% SMI"
31
32#include <stdio.h>
33#include <string.h>
34#include <stdarg.h>
35#include <dlfcn.h>
36#include <link.h>
37#include <signal.h>
38#include <synch.h>
39#include <wchar.h>
40#include <thread.h>
41#include <apptrace_impl.h>
42
43#ifdef __cplusplus
44extern "C" {
45#endif
46
47/*
48 * Extract the verbosity flag.
49 */
50#define ABI_VFLAG(lib, symbol) \
51 __abi_ ## lib ## _ ## symbol ## _sym.a_vflag
52
53/*
54 * Extract the function pointer to the real ABI function.
55 */
56#define ABI_REAL(lib, symbol) \
57 __abi_ ## lib ## _ ## symbol ## _sym.a_real
58
59/*
60 * Macro to create the part of a function call prior
61 * to the arg list.
62 * cast is a full cast expression for a _pointer_ to
63 * the ABI function being called.
64 *
65 * e.g. ABI_CALL_REAL(libc, getpid, (pid_t (*)(void))) ();
66 */
67#define ABI_CALL_REAL(lib, sym, cast) \
68 (cast __abi_ ## lib ## _ ## sym ## _sym.a_real)
69
70#define ABISTREAM __abi_outfile
71#define ABIPUTS(x) (void) fputs((x), ABISTREAM)
72
73/*
74 * The following declarations and macros are needed for
75 * anybody needing the vprintf family of calls where they
76 * MUST come from the BASE link map instead of the auditing
77 * link map.
78 */
79#define ABI_VSNPRINTF __abi_real_vsnprintf
80#define ABI_VSWPRINTF __abi_real_vswprintf
81#define ABI_VWPRINTF __abi_real_vwprintf
82#define ABI_VFPRINTF __abi_real_vfprintf
83#define ABI_VFWPRINTF __abi_real_vfwprintf
84#define ABI_VPRINTF __abi_real_vprintf
85#define ABI_VSPRINTF __abi_real_vsprintf
86#define ABI_ERRNO (*(__abi_real_errno()))
87
88/* From libstabspf */
89typedef enum {
90 STAB_SUCCESS = 0, /* All is well. */
91 STAB_FAIL = -1, /* Parsing error. */
92 STAB_NA = -2, /* Information is Not Applicable. */
93 STAB_NOMEM = -3 /* Out of Memory! */
94} stabsret_t;
95
96extern int (*ABI_VFPRINTF)(FILE *, const char *, va_list);
97extern int (*ABI_VFWPRINTF)(FILE *, const wchar_t *, va_list);
98extern int (*ABI_VPRINTF)(const char *, va_list);
99extern int (*ABI_VSNPRINTF)(char *, size_t, const char *, va_list);
100extern int (*ABI_VSPRINTF)(char *, const char *, va_list);
101extern int (*ABI_VSWPRINTF)(wchar_t *, size_t, const wchar_t *, va_list);
102extern int (*ABI_VWPRINTF)(const wchar_t *, va_list);
103extern int *(*__abi_real_errno)(void);
104
105extern void *abi_malloc(size_t);
106extern void *abi_calloc(size_t, size_t);
107extern void *abi_realloc(void *, size_t);
108extern int abi_putc(int, FILE *);
109extern int abi_fputs(const char *, FILE *);
110extern void abi_free(void *);
111
112/* From libstabspf */
113extern stabsret_t spf_load_stabs(const char *);
114extern int spf_prtype(FILE *, char const *, int, void const *);
115
116extern int abi_strpsz; /* size constraint for string printing */
117
118#ifdef __cplusplus
119}
120#endif
121
122#endif /* _APPTRACE_H */