genode/base-foc/src/base/ipc/x86_64/pager.cc
Christian Prochaska 9090311a06 base-foc: enable CPU state modification
With this patch, the register contents of a paused thread (which is not
currently executing a syscall) can get modified by the
'Cpu_session::state()' function.

Fixes #896.
2013-10-17 11:03:40 +02:00

69 lines
1.6 KiB
C++

/*
* \brief Fiasco.OC pager framework
* \author Stefan Kalkowski
* \date 2011-09-08
*
* X86_64 specific parts, when handling cpu-exceptions.
*/
/*
* Copyright (C) 2011-2013 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU General Public License version 2.
*/
/* Genode includes */
#include <base/ipc_pager.h>
void Genode::Ipc_pager::get_regs(Thread_state *state)
{
state->ip = _regs.ip;
state->sp = _regs.sp;
state->r8 = _regs.r8;
state->r9 = _regs.r9;
state->r10 = _regs.r10;
state->r11 = _regs.r11;
state->r12 = _regs.r12;
state->r13 = _regs.r13;
state->r14 = _regs.r14;
state->r15 = _regs.r15;
state->rax = _regs.rax;
state->rbx = _regs.rbx;
state->rcx = _regs.rcx;
state->rdx = _regs.rdx;
state->rdi = _regs.rdi;
state->rsi = _regs.rsi;
state->rbp = _regs.rbp;
state->ss = _regs.ss;
state->eflags = _regs.flags;
state->trapno = _regs.trapno;
}
void Genode::Ipc_pager::set_regs(Thread_state state)
{
_regs.ip = state.ip;
_regs.sp = state.sp;
_regs.r8 = state.r8;
_regs.r9 = state.r9;
_regs.r10 = state.r10;
_regs.r11 = state.r11;
_regs.r12 = state.r12;
_regs.r13 = state.r13;
_regs.r14 = state.r14;
_regs.r15 = state.r15;
_regs.rax = state.rax;
_regs.rbx = state.rbx;
_regs.rcx = state.rcx;
_regs.rdx = state.rdx;
_regs.rdi = state.rdi;
_regs.rsi = state.rsi;
_regs.rbp = state.rbp;
_regs.ss = state.ss;
_regs.flags = state.eflags;
_regs.trapno = state.trapno;
}