~pmdj/ubuntu/trusty/qemu/2.9+applesmc+fadtv3

« back to all changes in this revision

Viewing changes to roms/u-boot/drivers/bios_emulator/include/x86emu/debug.h

  • Committer: Phil Dennis-Jordan
  • Date: 2017-07-21 08:03:43 UTC
  • mfrom: (1.1.1)
  • Revision ID: phil@philjordan.eu-20170721080343-2yr2vdj7713czahv
New upstream release 2.9.0.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/****************************************************************************
 
2
*
 
3
*                       Realmode X86 Emulator Library
 
4
*
 
5
*               Copyright (C) 1991-2004 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_CS_IP)
 
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
#endif                          /* __X86EMU_DEBUG_H */