thermosphere: propagate changes

This commit is contained in:
TuxSH 2020-02-26 01:54:12 +00:00
parent e8435784a7
commit ea830bb5ab
3 changed files with 19 additions and 13 deletions

View file

@ -19,6 +19,12 @@
#include "hvisor_fpu_register_cache.hpp" #include "hvisor_fpu_register_cache.hpp"
#include "hvisor_guest_timers.hpp" #include "hvisor_guest_timers.hpp"
#include "traps/hvisor_traps_data_abort.hpp"
#include "traps/hvisor_traps_hvc.hpp"
#include "traps/hvisor_traps_single_step.hpp"
#include "traps/hvisor_traps_smc.hpp"
#include "traps/hvisor_traps_sysreg.hpp"
#include "debug_manager.h" #include "debug_manager.h"
namespace ams::hvisor { namespace ams::hvisor {
@ -69,7 +75,7 @@ void DumpStackFrame(ExceptionStackFrame *frame, bool sameEl)
DEBUG("cntv_ctl_el0\t%016llx\n", frame->cntv_ctl_el0); DEBUG("cntv_ctl_el0\t%016llx\n", frame->cntv_ctl_el0);
} else if ((frame->sp_el2 & ~0xFFFul) + 0x1000 == stackTop) { } else if ((frame->sp_el2 & ~0xFFFul) + 0x1000 == stackTop) {
// Try to dump the stack (comment if this crashes) // Try to dump the stack (comment if this crashes)
u64 *sp = (u64 *)frame->sp_el2; u64 *sp = reinterpret_cast<u64 *>(frame->sp_el2);
u64 *spEnd = sp + 0x20; u64 *spEnd = sp + 0x20;
u64 *spMax = reinterpret_cast<u64 *>((frame->sp_el2 + 0xFFF) & ~0xFFFul); u64 *spMax = reinterpret_cast<u64 *>((frame->sp_el2 + 0xFFF) & ~0xFFFul);
DEBUG("Stack trace:\n"); DEBUG("Stack trace:\n");
@ -119,32 +125,32 @@ void DumpStackFrame(ExceptionStackFrame *frame, bool sameEl)
auto esr = frame->esr_el2; auto esr = frame->esr_el2;
switch (esr.ec) { switch (esr.ec) {
case cpu::ExceptionSyndromeRegister::CP15RTTrap: case cpu::ExceptionSyndromeRegister::CP15RTTrap:
handleMcrMrcCP15Trap(frame, esr); traps::HandleMcrMrcCP15Trap(frame, esr);
break; break;
case cpu::ExceptionSyndromeRegister::CP15RRTTrap: case cpu::ExceptionSyndromeRegister::CP15RRTTrap:
handleMcrrMrrcCP15Trap(frame, esr); traps::HandleMcrrMrrcCP15Trap(frame, esr);
break; break;
case cpu::ExceptionSyndromeRegister::CP14RTTrap: case cpu::ExceptionSyndromeRegister::CP14RTTrap:
case cpu::ExceptionSyndromeRegister::CP14DTTrap: case cpu::ExceptionSyndromeRegister::CP14DTTrap:
case cpu::ExceptionSyndromeRegister::CP14RRTTrap: case cpu::ExceptionSyndromeRegister::CP14RRTTrap:
// A32 stub: Skip instruction, read 0 if necessary (there are debug regs at EL0) // A32 stub: Skip instruction, read 0 if necessary (there are debug regs at EL0)
handleA32CP14Trap(frame, esr); traps::HandleA32CP14Trap(frame, esr);
break; break;
case cpu::ExceptionSyndromeRegister::HypervisorCallA64: case cpu::ExceptionSyndromeRegister::HypervisorCallA64:
handleHypercall(frame, esr); traps::HandleHvc(frame, esr);
break; break;
case cpu::ExceptionSyndromeRegister::MonitorCallA64: case cpu::ExceptionSyndromeRegister::MonitorCallA64:
handleSmcTrap(frame, esr); traps::HandleSmc(frame, esr);
break; break;
case cpu::ExceptionSyndromeRegister::SystemRegisterTrap: case cpu::ExceptionSyndromeRegister::SystemRegisterTrap:
handleMsrMrsTrap(frame, esr); traps::HandleMsrMrsTrap(frame, esr);
break; break;
case cpu::ExceptionSyndromeRegister::DataAbortLowerEl: case cpu::ExceptionSyndromeRegister::DataAbortLowerEl:
// Basically, stage2 translation faults // Basically, stage2 translation faults
handleLowerElDataAbortException(frame, esr); traps::HandleLowerElDataAbort(frame, esr);
break; break;
case cpu::ExceptionSyndromeRegister::SoftwareStepLowerEl: case cpu::ExceptionSyndromeRegister::SoftwareStepLowerEl:
handleSingleStep(frame, esr); traps::HandleSingleStep(frame, esr);
break; break;
case cpu::ExceptionSyndromeRegister::BreakpointLowerEl: case cpu::ExceptionSyndromeRegister::BreakpointLowerEl:
case cpu::ExceptionSyndromeRegister::WatchpointLowerEl: case cpu::ExceptionSyndromeRegister::WatchpointLowerEl:

View file

@ -19,7 +19,7 @@
namespace ams::hvisor::traps { namespace ams::hvisor::traps {
void HandleHypercall(ExceptionStackFrame *frame, cpu::ExceptionSyndromeRegister esr) void HandleHvc(ExceptionStackFrame *frame, cpu::ExceptionSyndromeRegister esr)
{ {
u32 id = esr.iss; u32 id = esr.iss;
switch (id) { switch (id) {

View file

@ -20,6 +20,6 @@
namespace ams::hvisor::traps { namespace ams::hvisor::traps {
void HandleHypercall(ExceptionStackFrame *frame, cpu::ExceptionSyndromeRegister esr); void HandleHvc(ExceptionStackFrame *frame, cpu::ExceptionSyndromeRegister esr);
} }