2 Commits

Author SHA1 Message Date
Alexander Weidinger
20bf1fdf07 Set state via seL4_TCB_WriteRegisters 2019-05-11 23:42:51 +02:00
Alexander Weidinger
e53249f6ce Add Platform_thread::state() for seL4 2019-05-07 19:03:11 +02:00

View File

@@ -198,10 +198,35 @@ void Platform_thread::resume()
}
void Platform_thread::state(Thread_state)
void Platform_thread::state(Thread_state s)
{
warning(__PRETTY_FUNCTION__, " not implemented");
throw Cpu_thread::State_access_failed();
seL4_TCB const thread = _info.tcb_sel.value();
seL4_Bool const suspend_source = false;
seL4_Uint8 const arch_flags = 0;
seL4_UserContext registers;
seL4_Word const register_count = sizeof(registers) / sizeof(registers.pc);
registers.r0 = s.r0;
registers.r1 = s.r1;
registers.r2 = s.r2;
registers.r3 = s.r3;
registers.r4 = s.r4;
registers.r5 = s.r5;
registers.r6 = s.r6;
registers.r7 = s.r7;
registers.r8 = s.r8;
registers.r9 = s.r9;
registers.r10 = s.r10;
registers.r11 = s.r11;
registers.r12 = s.r12;
registers.sp = s.sp;
registers.r14 = s.lr;
registers.pc = s.ip;
registers.cpsr = s.cpsr;
long const ret = seL4_TCB_WriteRegisters(thread, suspend_source, arch_flags, register_count, &registers);
ASSERT(ret == 0);
}