4 /* Parser for command lines in the Wine debugger
16 unsigned int * regval
= NULL
;
17 unsigned int dbg_mask
= 0;
18 unsigned int dbg_mode
= 0;
42 | input line
{ issue_prompt
(); }
46 |
error '\n' {yyerrok; }
47 | QUIT
'\n' { exit
(0); };
48 | HELP
'\n' { dbg_help
(); };
49 | CONT
'\n' { return
; };
50 | SYMBOLFILE IDENTIFIER
'\n' { read_symboltable
($2); };
51 | DEFINE IDENTIFIER expr
'\n' { add_hash
($2, $3); };
57 SET REG
'=' expr
'\n' { regval
[$2] = $4; }
58 | SET
'*' expr
'=' expr
'\n' { *((unsigned int *) $3) = $5; }
59 | SET symbol
'=' expr
'\n' { *((unsigned int *) $2) = $4; }
63 'x' expr
'\n' { examine_memory
($2, 1, 'x'); };
64 |
'x' '/' fmt expr
'\n' { examine_memory
($4, 1, $3); };
65 |
'x' '/' NUM fmt expr
'\n' { examine_memory
($5, $3, $4); };
68 PRINT expr
'\n' { examine_memory
(((unsigned int) &$2 ), 1, 'x'); };
70 fmt
: 'x' { $$
= 'x'; }
78 symbol
: IDENTIFIER
{ $$
= find_hash
($1);
79 if
($$
== 0xffffffff) {
80 fprintf
(stderr
,"Symbol %s not found\n", $1);
85 expr
: NUM
{ $$
= $1; }
86 | REG
{ $$
= regval
[$1]; }
87 | symbol
{ $$
= *((unsigned int *) $1); }
88 | expr
'+' NUM
{ $$
= $1 + $3; }
89 | expr
'-' NUM
{ $$
= $1 - $3; };
90 |
'(' expr
')' { $$
= $2; };
91 |
'*' expr
{ $$
= *((unsigned int *) $2); };
93 infocmd
: INFO REGS
{ info_reg
(); }
94 | INFO STACK
{ info_stack
(); };
102 fprintf
(stderr
,"Wine-dbg>");
106 static int loaded_symbols
= 0;
109 wine_debug
(int * regs
)
119 if
((SC_CS
& 7) != 7) {
120 dbg_mask
= 0xffffffff;
129 dbg_mask
= 0xffffffff;
137 /* This is intended to read the entry points from the Windows image, and
138 insert them in the hash table. It does not work yet, so it is commented out. */
146 /* Show where we crashed */
147 examine_memory
(SC_EIP
(dbg_mask
), 1, 'i');
153 fprintf
(stderr
,"Returning to Wine...\n");
159 fprintf
(stderr
,"%s\n", s
);