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 (the "License").
6 * You may not use this file except in compliance with the License.
7 *
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
12 *
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 *
19 * CDDL HEADER END
20 */
21/*
22 * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
23 * Use is subject to license terms.
24 */
25
26#ifndef	_MDB_WHATIS_IMPL_H
27#define	_MDB_WHATIS_IMPL_H
28
29#include <mdb/mdb_module.h>
30
31#ifdef	__cplusplus
32extern "C" {
33#endif
34
35#define	WHATIS_MS(c, s) (((uint64_t)(c)) << (s))
36
37#define	WHATIS_MAGIC 	/* whatis 0x2009 */ \
38	(WHATIS_MS('w', 56) | WHATIS_MS('h', 48) | WHATIS_MS('a', 40) | \
39	    WHATIS_MS('t', 32) | WHATIS_MS('i', 24) | WHATIS_MS('s', 16) | \
40	    WHATIS_MS(0x2009, 0))
41
42struct mdb_whatis {
43	uint64_t w_magic;	/* just for sanity */
44	uintptr_t *w_addrs;	/* w_naddr sorted addresses */
45	char *w_addrfound;	/* array of w_naddr "found" flags */
46	size_t w_naddrs;
47	size_t w_match_next;	/* next match offset, or 0 if no active match */
48	uintptr_t w_match_base;	/* base of current match */
49	size_t w_match_size;	/* size of current match */
50	size_t w_found;		/* count of set entries in w_addrfound */
51	uint_t w_flags;		/* see WHATIS_* for details */
52	uint8_t w_done;		/* set when no more processing is needed */
53};
54
55#define	WHATIS_PUBLIC		0x0ffff
56
57/* flags which aren't part of the public interface */
58#define	WHATIS_ALL		0x10000	/* -a, report all matches */
59
60#define	WHATIS_PRIO_MIN		99
61
62extern int cmd_whatis(uintptr_t, uint_t, int, const mdb_arg_t *);
63extern void whatis_help(void);
64
65/* built-in callbacks */
66extern int whatis_run_mappings(struct mdb_whatis *, void *);
67
68/* callback at module unload time */
69extern void mdb_whatis_unregister_module(mdb_module_t *);
70
71#ifdef	__cplusplus
72}
73#endif
74
75#endif	/* _MDB_WHATIS_IMPL_H */
76