~ubuntu-branches/ubuntu/intrepid/xserver-xgl/intrepid

« back to all changes in this revision

Viewing changes to hw/xfree86/x86emu/x86emu/debug.h

  • Committer: Bazaar Package Importer
  • Author(s): Matthew Garrett
  • Date: 2006-02-13 14:21:43 UTC
  • Revision ID: james.westby@ubuntu.com-20060213142143-mad6z9xzem7hzxz9
Tags: upstream-7.0.0
ImportĀ upstreamĀ versionĀ 7.0.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/****************************************************************************
 
2
*
 
3
*                                               Realmode X86 Emulator Library
 
4
*
 
5
*               Copyright (C) 1996-1999 SciTech Software, Inc.
 
6
*                                    Copyright (C) David Mosberger-Tang
 
7
*                                          Copyright (C) 1999 Egbert Eich
 
8
*
 
9
*  ========================================================================
 
10
*
 
11
*  Permission to use, copy, modify, distribute, and sell this software and
 
12
*  its documentation for any purpose is hereby granted without fee,
 
13
*  provided that the above copyright notice appear in all copies and that
 
14
*  both that copyright notice and this permission notice appear in
 
15
*  supporting documentation, and that the name of the authors not be used
 
16
*  in advertising or publicity pertaining to distribution of the software
 
17
*  without specific, written prior permission.  The authors makes no
 
18
*  representations about the suitability of this software for any purpose.
 
19
*  It is provided "as is" without express or implied warranty.
 
20
*
 
21
*  THE AUTHORS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
 
22
*  INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
 
23
*  EVENT SHALL THE AUTHORS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
 
24
*  CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
 
25
*  USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
 
26
*  OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
 
27
*  PERFORMANCE OF THIS SOFTWARE.
 
28
*
 
29
*  ========================================================================
 
30
*
 
31
* Language:             ANSI C
 
32
* Environment:  Any
 
33
* Developer:    Kendall Bennett
 
34
*
 
35
* Description:  Header file for debug definitions.
 
36
*
 
37
****************************************************************************/
 
38
 
 
39
#ifndef __X86EMU_DEBUG_H
 
40
#define __X86EMU_DEBUG_H
 
41
 
 
42
/*---------------------- Macros and type definitions ----------------------*/
 
43
 
 
44
/* checks to be enabled for "runtime" */
 
45
 
 
46
#define CHECK_IP_FETCH_F                0x1
 
47
#define CHECK_SP_ACCESS_F               0x2
 
48
#define CHECK_MEM_ACCESS_F              0x4 /*using regular linear pointer */
 
49
#define CHECK_DATA_ACCESS_F             0x8 /*using segment:offset*/
 
50
 
 
51
#ifdef DEBUG
 
52
# define CHECK_IP_FETCH()               (M.x86.check & CHECK_IP_FETCH_F)
 
53
# define CHECK_SP_ACCESS()              (M.x86.check & CHECK_SP_ACCESS_F)
 
54
# define CHECK_MEM_ACCESS()             (M.x86.check & CHECK_MEM_ACCESS_F)
 
55
# define CHECK_DATA_ACCESS()            (M.x86.check & CHECK_DATA_ACCESS_F)
 
56
#else
 
57
# define CHECK_IP_FETCH()
 
58
# define CHECK_SP_ACCESS()
 
59
# define CHECK_MEM_ACCESS()
 
60
# define CHECK_DATA_ACCESS()
 
61
#endif
 
62
 
 
63
#ifdef DEBUG
 
64
# define DEBUG_INSTRUMENT()     (M.x86.debug & DEBUG_INSTRUMENT_F)
 
65
# define DEBUG_DECODE()         (M.x86.debug & DEBUG_DECODE_F)
 
66
# define DEBUG_TRACE()          (M.x86.debug & DEBUG_TRACE_F)
 
67
# define DEBUG_STEP()           (M.x86.debug & DEBUG_STEP_F)
 
68
# define DEBUG_DISASSEMBLE()    (M.x86.debug & DEBUG_DISASSEMBLE_F)
 
69
# define DEBUG_BREAK()          (M.x86.debug & DEBUG_BREAK_F)
 
70
# define DEBUG_SVC()            (M.x86.debug & DEBUG_SVC_F)
 
71
# define DEBUG_SAVE_IP_CS()     (M.x86.debug & DEBUG_SAVE_IP_CS_F)
 
72
 
 
73
# define DEBUG_FS()             (M.x86.debug & DEBUG_FS_F)
 
74
# define DEBUG_PROC()           (M.x86.debug & DEBUG_PROC_F)
 
75
# define DEBUG_SYSINT()         (M.x86.debug & DEBUG_SYSINT_F)
 
76
# define DEBUG_TRACECALL()      (M.x86.debug & DEBUG_TRACECALL_F)
 
77
# define DEBUG_TRACECALLREGS()  (M.x86.debug & DEBUG_TRACECALL_REGS_F)
 
78
# define DEBUG_SYS()            (M.x86.debug & DEBUG_SYS_F)
 
79
# define DEBUG_MEM_TRACE()      (M.x86.debug & DEBUG_MEM_TRACE_F)
 
80
# define DEBUG_IO_TRACE()       (M.x86.debug & DEBUG_IO_TRACE_F)
 
81
# define DEBUG_DECODE_NOPRINT() (M.x86.debug & DEBUG_DECODE_NOPRINT_F)
 
82
#else
 
83
# define DEBUG_INSTRUMENT()     0
 
84
# define DEBUG_DECODE()         0
 
85
# define DEBUG_TRACE()          0
 
86
# define DEBUG_STEP()           0
 
87
# define DEBUG_DISASSEMBLE()    0
 
88
# define DEBUG_BREAK()          0
 
89
# define DEBUG_SVC()            0
 
90
# define DEBUG_SAVE_IP_CS()     0
 
91
# define DEBUG_FS()             0
 
92
# define DEBUG_PROC()           0
 
93
# define DEBUG_SYSINT()         0
 
94
# define DEBUG_TRACECALL()      0
 
95
# define DEBUG_TRACECALLREGS()  0
 
96
# define DEBUG_SYS()            0
 
97
# define DEBUG_MEM_TRACE()      0
 
98
# define DEBUG_IO_TRACE()       0
 
99
# define DEBUG_DECODE_NOPRINT() 0
 
100
#endif
 
101
 
 
102
#ifdef DEBUG
 
103
 
 
104
# define DECODE_PRINTF(x)       if (DEBUG_DECODE()) \
 
105
                                                                        x86emu_decode_printf(x)
 
106
# define DECODE_PRINTF2(x,y)    if (DEBUG_DECODE()) \
 
107
                                                                        x86emu_decode_printf2(x,y)
 
108
 
 
109
/*
 
110
 * The following allow us to look at the bytes of an instruction.  The
 
111
 * first INCR_INSTRN_LEN, is called everytime bytes are consumed in
 
112
 * the decoding process.  The SAVE_IP_CS is called initially when the
 
113
 * major opcode of the instruction is accessed.
 
114
 */
 
115
#define INC_DECODED_INST_LEN(x)                         \
 
116
        if (DEBUG_DECODE())                             \
 
117
                x86emu_inc_decoded_inst_len(x)
 
118
 
 
119
#define SAVE_IP_CS(x,y)                                                 \
 
120
        if (DEBUG_DECODE() | DEBUG_TRACECALL() | DEBUG_BREAK() \
 
121
              | DEBUG_IO_TRACE() | DEBUG_SAVE_IP_CS()) { \
 
122
                M.x86.saved_cs = x;                                             \
 
123
                M.x86.saved_ip = y;                                             \
 
124
        }
 
125
#else
 
126
# define INC_DECODED_INST_LEN(x)
 
127
# define DECODE_PRINTF(x)
 
128
# define DECODE_PRINTF2(x,y)
 
129
# define SAVE_IP_CS(x,y)
 
130
#endif
 
131
 
 
132
#ifdef DEBUG
 
133
#define TRACE_REGS()                                            \
 
134
        if (DEBUG_DISASSEMBLE()) {                                      \
 
135
                x86emu_just_disassemble();                              \
 
136
                goto EndOfTheInstructionProcedure;                      \
 
137
        }                                                       \
 
138
        if (DEBUG_TRACE() || DEBUG_DECODE()) X86EMU_trace_regs()
 
139
#else
 
140
# define TRACE_REGS()
 
141
#endif
 
142
 
 
143
#ifdef DEBUG
 
144
# define SINGLE_STEP()          if (DEBUG_STEP()) x86emu_single_step()
 
145
#else
 
146
# define SINGLE_STEP()
 
147
#endif
 
148
 
 
149
#define TRACE_AND_STEP()        \
 
150
        TRACE_REGS();                   \
 
151
        SINGLE_STEP()
 
152
 
 
153
#ifdef DEBUG
 
154
# define START_OF_INSTR()
 
155
# define END_OF_INSTR()         EndOfTheInstructionProcedure: x86emu_end_instr();
 
156
# define END_OF_INSTR_NO_TRACE()        x86emu_end_instr();
 
157
#else
 
158
# define START_OF_INSTR()
 
159
# define END_OF_INSTR()
 
160
# define END_OF_INSTR_NO_TRACE()
 
161
#endif
 
162
 
 
163
#ifdef DEBUG
 
164
# define  CALL_TRACE(u,v,w,x,s)                                 \
 
165
        if (DEBUG_TRACECALLREGS())                                                                      \
 
166
                x86emu_dump_regs();                                     \
 
167
        if (DEBUG_TRACECALL())                                          \
 
168
                printk("%04x:%04x: CALL %s%04x:%04x\n", u , v, s, w, x);
 
169
# define RETURN_TRACE(n,u,v)                                    \
 
170
        if (DEBUG_TRACECALLREGS())                                                                      \
 
171
                x86emu_dump_regs();                                     \
 
172
        if (DEBUG_TRACECALL())                                          \
 
173
                printk("%04x:%04x: %s\n",u,v,n);
 
174
#else
 
175
# define CALL_TRACE(u,v,w,x,s)
 
176
# define RETURN_TRACE(n,u,v)
 
177
#endif
 
178
 
 
179
#ifdef DEBUG
 
180
#define DB(x)   x
 
181
#else
 
182
#define DB(x)
 
183
#endif
 
184
 
 
185
/*-------------------------- Function Prototypes --------------------------*/
 
186
 
 
187
#ifdef  __cplusplus
 
188
extern "C" {                                    /* Use "C" linkage when in C++ mode */
 
189
#endif
 
190
 
 
191
extern void x86emu_inc_decoded_inst_len (int x);
 
192
extern void x86emu_decode_printf (char *x);
 
193
extern void x86emu_decode_printf2 (char *x, int y);
 
194
extern void x86emu_just_disassemble (void);
 
195
extern void x86emu_single_step (void);
 
196
extern void x86emu_end_instr (void);
 
197
extern void x86emu_dump_regs (void);
 
198
extern void x86emu_dump_xregs (void);
 
199
extern void x86emu_print_int_vect (u16 iv);
 
200
extern void x86emu_instrument_instruction (void);
 
201
extern void x86emu_check_ip_access (void);
 
202
extern void x86emu_check_sp_access (void);
 
203
extern void x86emu_check_mem_access (u32 p);
 
204
extern void x86emu_check_data_access (uint s, uint o);
 
205
 
 
206
#ifdef  __cplusplus
 
207
}                                               /* End of "C" linkage for C++           */
 
208
#endif
 
209
 
 
210
#endif /* __X86EMU_DEBUG_H */