xref: /onnv-gate/usr/src/lib/libdisasm/sparc/dis_sparc.h (revision 5198:a4512bf4070e)
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 /*
23  * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
24  * Use is subject to license terms.
25  */
26 
27 /*
28  * Copyright 2007 Jason King.  All rights reserved.
29  * Use is subject to license terms.
30  */
31 
32 
33 #ifndef _DIS_SPARC_H
34 #define	_DIS_SPARC_H
35 
36 #pragma ident	"%Z%%M%	%I%	%E% SMI"
37 
38 #ifdef	__cplusplus
39 extern "C" {
40 #endif
41 
42 #include <sys/types.h>
43 
44 #define	DIS_DEBUG_NONE		0x00L
45 #define	DIS_DEBUG_COMPAT	0x01L
46 #define	DIS_DEBUG_SYN_ALL	0x02L
47 #define	DIS_DEBUG_PRTBIN	0x04L
48 #define	DIS_DEBUG_PRTFMT	0x08L
49 
50 #define	DIS_DEBUG_ALL DIS_DEBUG_SYN_ALL|DIS_DEBUG_PRTBIN|DIS_DEBUG_PRTFMT
51 
52 struct dis_handle {
53 	void		*dh_data;
54 	dis_lookup_f	dh_lookup;
55 	dis_read_f	dh_read;
56 	int		dh_flags;
57 
58 	char		*dh_buf;
59 	size_t		dh_buflen;
60 	uint64_t	dh_addr;
61 	int		dh_debug;
62 };
63 
64 /* different types of things we can have in inst_t */
65 #define	INST_NONE	0x00
66 #define	INST_DEF	0x01
67 #define	INST_TBL	0x02
68 
69 struct inst;
70 struct overlay;
71 
72 typedef struct inst inst_t;
73 typedef struct overlay overlay_t;
74 
75 typedef int (*format_fcn)(dis_handle_t *, uint32_t, const inst_t *, int);
76 
77 typedef struct table {
78 	const struct inst	*tbl_inp;
79 	const struct overlay	*tbl_ovp;
80 	format_fcn		tbl_fmt;
81 	uint32_t		tbl_field;
82 	uint32_t		tbl_len;
83 } table_t;
84 
85 struct inst {
86 	int in_type;
87 	int in_arch;
88 	union {
89 		struct {
90 			const char	*in_name;
91 			uint32_t	in_flags;
92 		} in_def;
93 		const table_t *in_tbl;
94 	} in_data;
95 };
96 
97 struct overlay {
98 	int	ov_idx;
99 	inst_t	ov_inst;
100 };
101 
102 extern const table_t initial_table;
103 
104 void prt_binary(uint32_t, int);
105 #ifdef	__cplusplus
106 }
107 #endif
108 
109 #endif	/* _DIS_SPARC_H */
110