Release 950727
[wine] / debugger / registers.c
1 /*
2  * Debugger register handling
3  *
4  * Copyright 1995 Alexandre Julliard
5  */
6
7 #include <stdio.h>
8 #include "debugger.h"
9
10
11 struct sigcontext_struct *context;
12
13
14
15 /***********************************************************************
16  *           DEBUG_SetRegister
17  *
18  * Set a register value.
19  */
20 void DEBUG_SetRegister( enum debug_regs reg, int val )
21 {
22     switch(reg)
23     {
24         case REG_EAX: EAX = val; break;
25         case REG_EBX: EBX = val; break;
26         case REG_ECX: ECX = val; break;
27         case REG_EDX: EDX = val; break;
28         case REG_ESI: ESI = val; break;
29         case REG_EDI: EDI = val; break;
30         case REG_EBP: EBP = val; break;
31         case REG_EFL: EFL = val; break;
32         case REG_EIP: EIP = val; break;
33         case REG_ESP: ESP = val; break;
34         case REG_AX:  AX  = val; break;
35         case REG_BX:  BX  = val; break;
36         case REG_CX:  CX  = val; break;
37         case REG_DX:  DX  = val; break;
38         case REG_SI:  SI  = val; break;
39         case REG_DI:  DI  = val; break;
40         case REG_BP:  BP  = val; break;
41         case REG_FL:  FL  = val; break;
42         case REG_IP:  IP  = val; break;
43         case REG_SP:  SP  = val; break;
44         case REG_CS:  CS  = val; break;
45         case REG_DS:  DS  = val; break;
46         case REG_ES:  ES  = val; break;
47         case REG_SS:  SS  = val; break;
48     }
49 }
50
51
52 /***********************************************************************
53  *           DEBUG_GetRegister
54  *
55  * Get a register value.
56  */
57 int DEBUG_GetRegister( enum debug_regs reg )
58 {
59     switch(reg)
60     {
61         case REG_EAX: return EAX;
62         case REG_EBX: return EBX;
63         case REG_ECX: return ECX;
64         case REG_EDX: return EDX;
65         case REG_ESI: return ESI;
66         case REG_EDI: return EDI;
67         case REG_EBP: return EBP;
68         case REG_EFL: return EFL;
69         case REG_EIP: return EIP;
70         case REG_ESP: return ESP;
71         case REG_AX:  return AX;
72         case REG_BX:  return BX;
73         case REG_CX:  return CX;
74         case REG_DX:  return DX;
75         case REG_SI:  return SI;
76         case REG_DI:  return DI;
77         case REG_BP:  return BP;
78         case REG_FL:  return FL;
79         case REG_IP:  return IP;
80         case REG_SP:  return SP;
81         case REG_CS:  return CS;
82         case REG_DS:  return DS;
83         case REG_ES:  return ES;
84         case REG_SS:  return SS;
85     }
86     return 0;  /* should not happen */
87 }
88
89
90
91 /***********************************************************************
92  *           DEBUG_InfoRegisters
93  *
94  * Display registers information. 
95  */
96 void DEBUG_InfoRegisters(void)
97 {
98     fprintf(stderr,"Register dump:\n");
99
100     /* First get the segment registers out of the way */
101     fprintf( stderr," CS:%04x SS:%04x DS:%04x ES:%04x\n", CS, SS, DS, ES );
102
103     if (dbg_mode == 16)
104     {
105         fprintf( stderr," IP:%04x SP:%04x BP:%04x FLAGS:%04x\n",
106                  IP, SP, BP, FL );
107         fprintf( stderr," AX:%04x BX:%04x CX:%04x DX:%04x SI:%04x DI:%04x\n",
108                  AX, BX, CX, DX, SI, DI );
109     }
110     else  /* 32-bit mode */
111     {
112         fprintf( stderr, " EIP:%08lx ESP:%08lx EBP:%08lx EFLAGS:%08lx\n", 
113                  EIP, ESP, EBP, EFL );
114         fprintf( stderr, " EAX:%08lx EBX:%08lx ECX:%08lx EDX:%08lx\n", 
115                  EAX, EBX, ECX, EDX);
116         fprintf( stderr, " ESI:%08lx EDI:%08lx\n", ESI, EDI);
117     }
118 }
119