2 * Debugger register handling
4 * Copyright 1995 Alexandre Julliard
11 struct sigcontext_struct
*DEBUG_context
;
15 /***********************************************************************
18 * Set a register value.
20 void DEBUG_SetRegister( enum debug_regs reg
, int val
)
24 case REG_EAX
: EAX_reg(DEBUG_context
) = val
; break;
25 case REG_EBX
: EBX_reg(DEBUG_context
) = val
; break;
26 case REG_ECX
: ECX_reg(DEBUG_context
) = val
; break;
27 case REG_EDX
: EDX_reg(DEBUG_context
) = val
; break;
28 case REG_ESI
: ESI_reg(DEBUG_context
) = val
; break;
29 case REG_EDI
: EDI_reg(DEBUG_context
) = val
; break;
30 case REG_EBP
: EBP_reg(DEBUG_context
) = val
; break;
31 case REG_EFL
: EFL_reg(DEBUG_context
) = val
; break;
32 case REG_EIP
: EIP_reg(DEBUG_context
) = val
; break;
33 case REG_ESP
: ESP_reg(DEBUG_context
) = val
; break;
34 case REG_AX
: AX_reg(DEBUG_context
) = val
; break;
35 case REG_BX
: BX_reg(DEBUG_context
) = val
; break;
36 case REG_CX
: CX_reg(DEBUG_context
) = val
; break;
37 case REG_DX
: DX_reg(DEBUG_context
) = val
; break;
38 case REG_SI
: SI_reg(DEBUG_context
) = val
; break;
39 case REG_DI
: DI_reg(DEBUG_context
) = val
; break;
40 case REG_BP
: BP_reg(DEBUG_context
) = val
; break;
41 case REG_FL
: FL_reg(DEBUG_context
) = val
; break;
42 case REG_IP
: IP_reg(DEBUG_context
) = val
; break;
43 case REG_SP
: SP_reg(DEBUG_context
) = val
; break;
44 case REG_CS
: CS_reg(DEBUG_context
) = val
; break;
45 case REG_DS
: DS_reg(DEBUG_context
) = val
; break;
46 case REG_ES
: ES_reg(DEBUG_context
) = val
; break;
47 case REG_SS
: SS_reg(DEBUG_context
) = val
; break;
52 /***********************************************************************
55 * Get a register value.
57 int DEBUG_GetRegister( enum debug_regs reg
)
61 case REG_EAX
: return EAX_reg(DEBUG_context
);
62 case REG_EBX
: return EBX_reg(DEBUG_context
);
63 case REG_ECX
: return ECX_reg(DEBUG_context
);
64 case REG_EDX
: return EDX_reg(DEBUG_context
);
65 case REG_ESI
: return ESI_reg(DEBUG_context
);
66 case REG_EDI
: return EDI_reg(DEBUG_context
);
67 case REG_EBP
: return EBP_reg(DEBUG_context
);
68 case REG_EFL
: return EFL_reg(DEBUG_context
);
69 case REG_EIP
: return EIP_reg(DEBUG_context
);
70 case REG_ESP
: return ESP_reg(DEBUG_context
);
71 case REG_AX
: return AX_reg(DEBUG_context
);
72 case REG_BX
: return BX_reg(DEBUG_context
);
73 case REG_CX
: return CX_reg(DEBUG_context
);
74 case REG_DX
: return DX_reg(DEBUG_context
);
75 case REG_SI
: return SI_reg(DEBUG_context
);
76 case REG_DI
: return DI_reg(DEBUG_context
);
77 case REG_BP
: return BP_reg(DEBUG_context
);
78 case REG_FL
: return FL_reg(DEBUG_context
);
79 case REG_IP
: return IP_reg(DEBUG_context
);
80 case REG_SP
: return SP_reg(DEBUG_context
);
81 case REG_CS
: return CS_reg(DEBUG_context
);
82 case REG_DS
: return DS_reg(DEBUG_context
);
83 case REG_ES
: return ES_reg(DEBUG_context
);
84 case REG_SS
: return SS_reg(DEBUG_context
);
86 return 0; /* should not happen */
91 /***********************************************************************
94 * Display registers information.
96 void DEBUG_InfoRegisters(void)
98 fprintf(stderr
,"Register dump:\n");
100 /* First get the segment registers out of the way */
101 fprintf( stderr
," CS:%04x SS:%04x DS:%04x ES:%04x\n",
102 CS_reg(DEBUG_context
), SS_reg(DEBUG_context
),
103 DS_reg(DEBUG_context
), ES_reg(DEBUG_context
) );
107 fprintf( stderr
," IP:%04x SP:%04x BP:%04x FLAGS:%04x\n",
108 IP_reg(DEBUG_context
), SP_reg(DEBUG_context
),
109 BP_reg(DEBUG_context
), FL_reg(DEBUG_context
) );
110 fprintf( stderr
," AX:%04x BX:%04x CX:%04x DX:%04x SI:%04x DI:%04x\n",
111 AX_reg(DEBUG_context
), BX_reg(DEBUG_context
),
112 CX_reg(DEBUG_context
), DX_reg(DEBUG_context
),
113 SI_reg(DEBUG_context
), DI_reg(DEBUG_context
) );
115 else /* 32-bit mode */
117 fprintf( stderr
, " EIP:%08lx ESP:%08lx EBP:%08lx EFLAGS:%08lx\n",
118 EIP_reg(DEBUG_context
), ESP_reg(DEBUG_context
),
119 EBP_reg(DEBUG_context
), EFL_reg(DEBUG_context
) );
120 fprintf( stderr
, " EAX:%08lx EBX:%08lx ECX:%08lx EDX:%08lx\n",
121 EAX_reg(DEBUG_context
), EBX_reg(DEBUG_context
),
122 ECX_reg(DEBUG_context
), EDX_reg(DEBUG_context
) );
123 fprintf( stderr
, " ESI:%08lx EDI:%08lx\n",
124 ESI_reg(DEBUG_context
), EDI_reg(DEBUG_context
) );