1 /*
2  * Copyright 2014, General Dynamics C4 Systems
3  *
4  * SPDX-License-Identifier: GPL-2.0-only
5  */
6 
7 #include <assert.h>
8 #include <config.h>
9 #include <sel4/arch/constants.h>
10 #include <arch/machine/registerset.h>
11 #include <machine/fpu.h>
12 #include <arch/object/structures.h>
13 #include <machine/debug.h>
14 
15 const register_t msgRegisters[] = {
16     EDI,
17 #ifndef CONFIG_KERNEL_MCS
18     EBP
19 #endif
20 };
21 compile_assert(
22     consistent_message_registers,
23     sizeof(msgRegisters) / sizeof(msgRegisters[0]) == n_msgRegisters
24 );
25 
26 const register_t frameRegisters[] = {
27     FaultIP, ESP, FLAGS, EAX, EBX, ECX, EDX, ESI, EDI, EBP
28 };
29 compile_assert(
30     consistent_frame_registers,
31     sizeof(frameRegisters) / sizeof(frameRegisters[0]) == n_frameRegisters
32 );
33 
34 const register_t gpRegisters[] = {
35     FS_BASE, GS_BASE
36 };
37 compile_assert(
38     consistent_gp_registers,
39     sizeof(gpRegisters) / sizeof(gpRegisters[0]) == n_gpRegisters
40 );
41 
Mode_initContext(user_context_t * context)42 void Mode_initContext(user_context_t *context)
43 {
44     context->registers[EAX] = 0;
45     context->registers[EBX] = 0;
46     context->registers[ECX] = 0;
47     context->registers[EDX] = 0;
48     context->registers[ESI] = 0;
49     context->registers[EDI] = 0;
50     context->registers[EBP] = 0;
51     context->registers[ESP] = 0;
52 }
53 
Mode_sanitiseRegister(register_t reg,word_t v)54 word_t Mode_sanitiseRegister(register_t reg, word_t v)
55 {
56     return v;
57 }
58 
59 #ifdef CONFIG_KERNEL_MCS
getNBSendRecvDest(void)60 word_t getNBSendRecvDest(void)
61 {
62     seL4_IPCBuffer *buffer = (seL4_IPCBuffer *) lookupIPCBuffer(false, NODE_STATE(ksCurThread));
63     if (buffer != NULL) {
64         return buffer->userData;
65     } else {
66         return 0;
67     }
68 }
69 #endif
70