diff --git a/src/xenia/kernel/xboxkrnl_debug.cc b/src/xenia/kernel/xboxkrnl_debug.cc index 9db006604..e5ae66591 100644 --- a/src/xenia/kernel/xboxkrnl_debug.cc +++ b/src/xenia/kernel/xboxkrnl_debug.cc @@ -303,6 +303,30 @@ SHIM_CALL RtlRaiseException_shim( } +void xeKeBugCheckEx(uint32_t code, uint32_t param1, uint32_t param2, uint32_t param3, uint32_t param4) { + XELOGD("*** STOP: 0x%.8X (0x%.8X, 0x%.8X, 0x%.8X, 0x%.8X)", code, param1, param2, param3, param4); + fflush(stdout); + DebugBreak(); + assert_always(); +} + +SHIM_CALL KeBugCheck_shim( + PPCContext* ppc_state, KernelState* state) { + uint32_t code = SHIM_GET_ARG_32(0); + xeKeBugCheckEx(code, 0, 0, 0, 0); +} + +SHIM_CALL KeBugCheckEx_shim( + PPCContext* ppc_state, KernelState* state) { + uint32_t code = SHIM_GET_ARG_32(0); + uint32_t param1 = SHIM_GET_ARG_32(1); + uint32_t param2 = SHIM_GET_ARG_32(2); + uint32_t param3 = SHIM_GET_ARG_32(3); + uint32_t param4 = SHIM_GET_ARG_32(4); + xeKeBugCheckEx(code, param1, param2, param3, param4); +} + + } // namespace kernel } // namespace xe @@ -312,4 +336,6 @@ void xe::kernel::xboxkrnl::RegisterDebugExports( SHIM_SET_MAPPING("xboxkrnl.exe", DbgPrint, state); SHIM_SET_MAPPING("xboxkrnl.exe", DbgBreakPoint, state); SHIM_SET_MAPPING("xboxkrnl.exe", RtlRaiseException, state); + SHIM_SET_MAPPING("xboxkrnl.exe", KeBugCheck, state); + SHIM_SET_MAPPING("xboxkrnl.exe", KeBugCheckEx, state); } diff --git a/src/xenia/kernel/xboxkrnl_misc.cc b/src/xenia/kernel/xboxkrnl_misc.cc index 1354d4806..f08664eab 100644 --- a/src/xenia/kernel/xboxkrnl_misc.cc +++ b/src/xenia/kernel/xboxkrnl_misc.cc @@ -24,27 +24,11 @@ namespace xe { namespace kernel { -void xeKeBugCheckEx(uint32_t code, uint32_t param1, uint32_t param2, uint32_t param3, uint32_t param4) { - XELOGD("*** STOP: 0x%.8X (0x%.8X, 0x%.8X, 0x%.8X, 0x%.8X)", code, param1, param2, param3, param4); - fflush(stdout); - DebugBreak(); - assert_always(); -} - -SHIM_CALL KeBugCheck_shim( +SHIM_CALL KeEnableFpuExceptions_shim( PPCContext* ppc_state, KernelState* state) { - uint32_t code = SHIM_GET_ARG_32(0); - xeKeBugCheckEx(code, 0, 0, 0, 0); -} - -SHIM_CALL KeBugCheckEx_shim( - PPCContext* ppc_state, KernelState* state) { - uint32_t code = SHIM_GET_ARG_32(0); - uint32_t param1 = SHIM_GET_ARG_32(1); - uint32_t param2 = SHIM_GET_ARG_32(2); - uint32_t param3 = SHIM_GET_ARG_32(3); - uint32_t param4 = SHIM_GET_ARG_32(4); - xeKeBugCheckEx(code, param1, param2, param3, param4); + uint32_t enabled = SHIM_GET_ARG_32(0); + XELOGD("KeEnableFpuExceptions(%d)", enabled); + // TODO(benvanik): can we do anything about exceptions? } @@ -54,6 +38,5 @@ SHIM_CALL KeBugCheckEx_shim( void xe::kernel::xboxkrnl::RegisterMiscExports( ExportResolver* export_resolver, KernelState* state) { - SHIM_SET_MAPPING("xboxkrnl.exe", KeBugCheck, state); - SHIM_SET_MAPPING("xboxkrnl.exe", KeBugCheckEx, state); + SHIM_SET_MAPPING("xboxkrnl.exe", KeEnableFpuExceptions, state); }