target/ppc: Restrict powerpc_checkstop() to TCG
Expose powerpc_checkstop() prototype, and move it to tcg-excp_helper.c, only built when TCG is available. Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> Reviewed-by: Harsh Prateek Bora <harshpb@linux.ibm.com> Message-ID: <20250127102620.39159-8-philmd@linaro.org> Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
This commit is contained in:
parent
30de74bda7
commit
2f96c00b61
@ -400,32 +400,6 @@ static void powerpc_set_excp_state(PowerPCCPU *cpu, target_ulong vector,
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_TCG
|
#ifdef CONFIG_TCG
|
||||||
/*
|
|
||||||
* This stops the machine and logs CPU state without killing QEMU (like
|
|
||||||
* cpu_abort()) because it is often a guest error as opposed to a QEMU error,
|
|
||||||
* so the machine can still be debugged.
|
|
||||||
*/
|
|
||||||
static G_NORETURN void powerpc_checkstop(CPUPPCState *env, const char *reason)
|
|
||||||
{
|
|
||||||
CPUState *cs = env_cpu(env);
|
|
||||||
FILE *f;
|
|
||||||
|
|
||||||
f = qemu_log_trylock();
|
|
||||||
if (f) {
|
|
||||||
fprintf(f, "Entering checkstop state: %s\n", reason);
|
|
||||||
cpu_dump_state(cs, f, CPU_DUMP_FPU | CPU_DUMP_CCOP);
|
|
||||||
qemu_log_unlock(f);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This stops the machine and logs CPU state without killing QEMU
|
|
||||||
* (like cpu_abort()) so the machine can still be debugged (because
|
|
||||||
* it is often a guest error).
|
|
||||||
*/
|
|
||||||
qemu_system_guest_panicked(NULL);
|
|
||||||
cpu_loop_exit_noexc(cs);
|
|
||||||
}
|
|
||||||
|
|
||||||
#if defined(TARGET_PPC64) && !defined(CONFIG_USER_ONLY)
|
#if defined(TARGET_PPC64) && !defined(CONFIG_USER_ONLY)
|
||||||
void helper_attn(CPUPPCState *env)
|
void helper_attn(CPUPPCState *env)
|
||||||
{
|
{
|
||||||
|
@ -289,7 +289,9 @@ void ppc_cpu_do_transaction_failed(CPUState *cs, hwaddr physaddr,
|
|||||||
void ppc_cpu_debug_excp_handler(CPUState *cs);
|
void ppc_cpu_debug_excp_handler(CPUState *cs);
|
||||||
bool ppc_cpu_debug_check_breakpoint(CPUState *cs);
|
bool ppc_cpu_debug_check_breakpoint(CPUState *cs);
|
||||||
bool ppc_cpu_debug_check_watchpoint(CPUState *cs, CPUWatchpoint *wp);
|
bool ppc_cpu_debug_check_watchpoint(CPUState *cs, CPUWatchpoint *wp);
|
||||||
#endif
|
|
||||||
|
G_NORETURN void powerpc_checkstop(CPUPPCState *env, const char *reason);
|
||||||
|
#endif /* !CONFIG_USER_ONLY */
|
||||||
|
|
||||||
FIELD(GER_MSK, XMSK, 0, 4)
|
FIELD(GER_MSK, XMSK, 0, 4)
|
||||||
FIELD(GER_MSK, YMSK, 4, 4)
|
FIELD(GER_MSK, YMSK, 4, 4)
|
||||||
|
@ -17,7 +17,9 @@
|
|||||||
* License along with this library; if not, see <http://www.gnu.org/licenses/>.
|
* License along with this library; if not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
#include "qemu/osdep.h"
|
#include "qemu/osdep.h"
|
||||||
|
#include "qemu/log.h"
|
||||||
#include "exec/cpu_ldst.h"
|
#include "exec/cpu_ldst.h"
|
||||||
|
#include "system/runstate.h"
|
||||||
|
|
||||||
#include "hw/ppc/ppc.h"
|
#include "hw/ppc/ppc.h"
|
||||||
#include "internal.h"
|
#include "internal.h"
|
||||||
@ -199,6 +201,32 @@ bool ppc_cpu_debug_check_watchpoint(CPUState *cs, CPUWatchpoint *wp)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This stops the machine and logs CPU state without killing QEMU (like
|
||||||
|
* cpu_abort()) because it is often a guest error as opposed to a QEMU error,
|
||||||
|
* so the machine can still be debugged.
|
||||||
|
*/
|
||||||
|
G_NORETURN void powerpc_checkstop(CPUPPCState *env, const char *reason)
|
||||||
|
{
|
||||||
|
CPUState *cs = env_cpu(env);
|
||||||
|
FILE *f;
|
||||||
|
|
||||||
|
f = qemu_log_trylock();
|
||||||
|
if (f) {
|
||||||
|
fprintf(f, "Entering checkstop state: %s\n", reason);
|
||||||
|
cpu_dump_state(cs, f, CPU_DUMP_FPU | CPU_DUMP_CCOP);
|
||||||
|
qemu_log_unlock(f);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This stops the machine and logs CPU state without killing QEMU
|
||||||
|
* (like cpu_abort()) so the machine can still be debugged (because
|
||||||
|
* it is often a guest error).
|
||||||
|
*/
|
||||||
|
qemu_system_guest_panicked(NULL);
|
||||||
|
cpu_loop_exit_noexc(cs);
|
||||||
|
}
|
||||||
|
|
||||||
/* Return true iff byteswap is needed to load instruction */
|
/* Return true iff byteswap is needed to load instruction */
|
||||||
static inline bool insn_need_byteswap(CPUArchState *env)
|
static inline bool insn_need_byteswap(CPUArchState *env)
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user