diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/core/hle/kernel/kernel.cpp | 12 | ||||
| -rw-r--r-- | src/core/hle/kernel/svc.cpp | 4 |
2 files changed, 13 insertions, 3 deletions
diff --git a/src/core/hle/kernel/kernel.cpp b/src/core/hle/kernel/kernel.cpp index 739205eca..1f230fc4a 100644 --- a/src/core/hle/kernel/kernel.cpp +++ b/src/core/hle/kernel/kernel.cpp | |||
| @@ -545,7 +545,17 @@ const Core::ExclusiveMonitor& KernelCore::GetExclusiveMonitor() const { | |||
| 545 | } | 545 | } |
| 546 | 546 | ||
| 547 | void KernelCore::InvalidateAllInstructionCaches() { | 547 | void KernelCore::InvalidateAllInstructionCaches() { |
| 548 | //TODO: Reimplement, this | 548 | if (!IsMulticore()) { |
| 549 | auto& threads = GlobalScheduler().GetThreadList(); | ||
| 550 | for (auto& thread : threads) { | ||
| 551 | if (!thread->IsHLEThread()) { | ||
| 552 | auto& arm_interface = thread->ArmInterface(); | ||
| 553 | arm_interface.ClearInstructionCache(); | ||
| 554 | } | ||
| 555 | } | ||
| 556 | } else { | ||
| 557 | UNIMPLEMENTED_MSG("Cache Invalidation unimplemented for multicore"); | ||
| 558 | } | ||
| 549 | } | 559 | } |
| 550 | 560 | ||
| 551 | void KernelCore::PrepareReschedule(std::size_t id) { | 561 | void KernelCore::PrepareReschedule(std::size_t id) { |
diff --git a/src/core/hle/kernel/svc.cpp b/src/core/hle/kernel/svc.cpp index 37e893c84..dbd35580e 100644 --- a/src/core/hle/kernel/svc.cpp +++ b/src/core/hle/kernel/svc.cpp | |||
| @@ -622,6 +622,7 @@ static void Break(Core::System& system, u32 reason, u64 info1, u64 info2) { | |||
| 622 | info2, has_dumped_buffer ? std::make_optional(debug_buffer) : std::nullopt); | 622 | info2, has_dumped_buffer ? std::make_optional(debug_buffer) : std::nullopt); |
| 623 | 623 | ||
| 624 | if (!break_reason.signal_debugger) { | 624 | if (!break_reason.signal_debugger) { |
| 625 | SchedulerLock lock(system.Kernel()); | ||
| 625 | LOG_CRITICAL( | 626 | LOG_CRITICAL( |
| 626 | Debug_Emulated, | 627 | Debug_Emulated, |
| 627 | "Emulated program broke execution! reason=0x{:016X}, info1=0x{:016X}, info2=0x{:016X}", | 628 | "Emulated program broke execution! reason=0x{:016X}, info1=0x{:016X}, info2=0x{:016X}", |
| @@ -633,9 +634,8 @@ static void Break(Core::System& system, u32 reason, u64 info1, u64 info2) { | |||
| 633 | const auto thread_processor_id = current_thread->GetProcessorID(); | 634 | const auto thread_processor_id = current_thread->GetProcessorID(); |
| 634 | system.ArmInterface(static_cast<std::size_t>(thread_processor_id)).LogBacktrace(); | 635 | system.ArmInterface(static_cast<std::size_t>(thread_processor_id)).LogBacktrace(); |
| 635 | 636 | ||
| 636 | system.Kernel().CurrentProcess()->PrepareForTermination(); | ||
| 637 | |||
| 638 | // Kill the current thread | 637 | // Kill the current thread |
| 638 | system.Kernel().ExceptionalExit(); | ||
| 639 | current_thread->Stop(); | 639 | current_thread->Stop(); |
| 640 | } | 640 | } |
| 641 | } | 641 | } |