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);