diff options
author | Bin Lu <bin.lu@arm.com> | 2020-02-20 01:12:03 -0500 |
---|---|---|
committer | Bin Lu <bin.lu@arm.com> | 2020-02-20 06:43:27 +0000 |
commit | de68e1d8c437e6234f5e413d7cad6f892a4452d3 (patch) | |
tree | 6405221512939b3868cb2d512365cf3a86306cb6 /pkg/sentry/platform/kvm/bluepill_amd64_unsafe.go | |
parent | ec5630527bc4473081048d2d13d1dcfadc6c7cdd (diff) |
Code Clean:Move getUserRegisters into dieArchSetup() and other small changes.
Consistent with QEMU, getUserRegisters() should be an arch-specific
function. So, it should be called in dieArchSetup().
With this patch and the pagetable/pcid patch, the kvm modules on Arm64 can be
built successfully.
Signed-off-by: Bin Lu <bin.lu@arm.com>
Diffstat (limited to 'pkg/sentry/platform/kvm/bluepill_amd64_unsafe.go')
-rw-r--r-- | pkg/sentry/platform/kvm/bluepill_amd64_unsafe.go | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/pkg/sentry/platform/kvm/bluepill_amd64_unsafe.go b/pkg/sentry/platform/kvm/bluepill_amd64_unsafe.go index a63a6a071..99cac665d 100644 --- a/pkg/sentry/platform/kvm/bluepill_amd64_unsafe.go +++ b/pkg/sentry/platform/kvm/bluepill_amd64_unsafe.go @@ -31,6 +31,12 @@ import ( // //go:nosplit func dieArchSetup(c *vCPU, context *arch.SignalContext64, guestRegs *userRegs) { + // Reload all registers to have an accurate stack trace when we return + // to host mode. This means that the stack should be unwound correctly. + if errno := c.getUserRegisters(&c.dieState.guestRegs); errno != 0 { + throw(c.dieState.message) + } + // If the vCPU is in user mode, we set the stack to the stored stack // value in the vCPU itself. We don't want to unwind the user stack. if guestRegs.RFLAGS&ring0.UserFlagsSet == ring0.UserFlagsSet { |