@@ -73,6 +73,43 @@ bool is_deterministic = false;
7373bool power_on = false ;
7474Po_Cause power_off_reason = po_enter_debugger;
7575
76+ const char * get_po_name (Po_Cause reason) {
77+ #define onename (x ) case x: return #x;
78+ switch (reason) {
79+ onename (po_none)
80+ onename (po_starting_up)
81+ onename (po_quit)
82+ onename (po_quitting)
83+ onename (po_shut_down)
84+ onename (po_shutting_down)
85+ onename (po_restart)
86+ onename (po_restarting)
87+ onename (po_disassemble_on)
88+ onename (po_disassemble_off)
89+ onename (po_enter_debugger)
90+ onename (po_entered_debugger)
91+ onename (po_signal_interrupt)
92+ onename (po_benchmark_exception)
93+ onename (po_endian_switch)
94+ default : return " unknown" ;
95+ }
96+ #undef onename
97+ }
98+
99+ void p_set_power_off_reason (const char * file, int line, Po_Cause new_reason) {
100+ if (new_reason != power_off_reason) {
101+ power_off_reason = new_reason;
102+ #if 1
103+ LOG_F (INFO , " power_off_reason changed to %s at \" %s\" :%d" , get_po_name (new_reason), file, line);
104+ #endif
105+ }
106+ }
107+
108+ void p_power_off (const char * file, int line, Po_Cause new_reason) {
109+ power_on = false ;
110+ p_set_power_off_reason (file, line, new_reason);
111+ }
112+
76113SetPRS ppc_state;
77114#ifdef LOG_INSTRUCTIONS
78115uint32_t pcp;
@@ -224,8 +261,7 @@ void ppc_msr_did_change(uint32_t old_msr_val, uint32_t new_msr_val, bool set_nex
224261 ppc_next_instruction_address = ppc_state.pc + 4 ;
225262 }
226263#else
227- power_on = false;
228- power_off_reason = po_endian_switch;
264+ power_off(po_endian_switch);
229265 #endif
230266 }
231267}
@@ -235,14 +271,12 @@ void ppc_change_endian(bool newLE) {
235271 if (ppc_state.is_LE != newLE) {
236272 LOG_F (INFO , " changed endian to %s" , newLE ? " LE" : " BE" );
237273 ppc_state.is_LE = newLE;
238- power_on = false ;
239- power_off_reason = po_endian_switch;
274+ power_off (po_endian_switch);
240275 }
241276#else
242277 if (newLE) {
243278 LOG_F (ERROR , " unsupported endian %s" , newLE ? " LE" : " BE" );
244- power_on = false ;
245- power_off_reason = po_enter_debugger;
279+ power_off (po_enter_debugger);
246280 }
247281#endif
248282}
0 commit comments