wut v1.8.0
Wii U Toolchain
Loading...
Searching...
No Matches
context.h
Go to the documentation of this file.
1#pragma once
2#include <wut.h>
3
11#ifdef __cplusplus
12extern "C" {
13#endif
14
16typedef uint16_t OSContextState;
17
22
23typedef struct OSContext OSContext;
24
25#define OS_CONTEXT_TAG 0x4F53436F6E747874ull
26
27struct WUT_ALIGNAS(8) OSContext
28{
30 uint64_t tag;
31
32 uint32_t gpr[32];
33 uint32_t cr;
34 uint32_t lr;
35 uint32_t ctr;
36 uint32_t xer;
37 uint32_t srr0;
38 uint32_t srr1;
39 uint32_t dsisr;
40 uint32_t dar;
41 WUT_UNKNOWN_BYTES(0xC);
42 uint32_t fpscr;
43 double fpr[32];
44 uint16_t spinLockCount;
46 uint32_t gqr[8];
48 uint32_t upir;
49 double psf[32];
50 uint64_t coretime[3];
51 uint64_t starttime;
52 uint32_t error;
53 WUT_UNKNOWN_BYTES(4);
54 uint32_t pmc1;
55 uint32_t pmc2;
56 uint32_t pmc3;
57 uint32_t pmc4;
58 uint32_t mmcr0;
59 uint32_t mmcr1;
60};
61WUT_CHECK_OFFSET(OSContext, 0x00, tag);
62WUT_CHECK_OFFSET(OSContext, 0x08, gpr);
63WUT_CHECK_OFFSET(OSContext, 0x88, cr);
64WUT_CHECK_OFFSET(OSContext, 0x8c, lr);
65WUT_CHECK_OFFSET(OSContext, 0x90, ctr);
66WUT_CHECK_OFFSET(OSContext, 0x94, xer);
67WUT_CHECK_OFFSET(OSContext, 0x98, srr0);
68WUT_CHECK_OFFSET(OSContext, 0x9c, srr1);
69WUT_CHECK_OFFSET(OSContext, 0xa0, dsisr);
70WUT_CHECK_OFFSET(OSContext, 0xa4, dar);
71WUT_CHECK_OFFSET(OSContext, 0xb4, fpscr);
72WUT_CHECK_OFFSET(OSContext, 0xb8, fpr);
73WUT_CHECK_OFFSET(OSContext, 0x1b8, spinLockCount);
74WUT_CHECK_OFFSET(OSContext, 0x1ba, state);
75WUT_CHECK_OFFSET(OSContext, 0x1bc, gqr);
76WUT_CHECK_OFFSET(OSContext, 0x1dc, upir);
77WUT_CHECK_OFFSET(OSContext, 0x1e0, psf);
78WUT_CHECK_OFFSET(OSContext, 0x2e0, coretime);
79WUT_CHECK_OFFSET(OSContext, 0x2f8, starttime);
80WUT_CHECK_OFFSET(OSContext, 0x300, error);
81WUT_CHECK_OFFSET(OSContext, 0x308, pmc1);
82WUT_CHECK_OFFSET(OSContext, 0x30c, pmc2);
83WUT_CHECK_OFFSET(OSContext, 0x310, pmc3);
84WUT_CHECK_OFFSET(OSContext, 0x314, pmc4);
85WUT_CHECK_OFFSET(OSContext, 0x318, mmcr0);
86WUT_CHECK_OFFSET(OSContext, 0x31c, mmcr1);
87WUT_CHECK_SIZE(OSContext, 0x320);
88
89void
91 void *entry,
92 void *stack);
93
94void
96
97void
99
100uint32_t
102
103void
105
106void
108
109OSContext *
111
112void
114
115void *
116OSSwitchStack(void *stack);
117
118void
120
121void
123
124#ifdef __cplusplus
125}
126#endif
127
uint32_t upir
Current core index.
Definition context.h:48
uint32_t dar
Definition context.h:40
uint32_t pmc4
Definition context.h:57
uint32_t fpscr
Definition context.h:42
uint64_t tag
Should always be set to the value OS_CONTEXT_TAG.
Definition context.h:30
uint32_t pmc1
Definition context.h:54
uint32_t srr0
Definition context.h:37
uint32_t lr
Definition context.h:34
OSContextState state
Definition context.h:45
uint32_t cr
Definition context.h:33
uint32_t srr1
Definition context.h:38
uint32_t error
Definition context.h:52
uint32_t mmcr1
Definition context.h:59
uint32_t xer
Definition context.h:36
uint32_t ctr
Definition context.h:35
uint16_t spinLockCount
Definition context.h:44
uint32_t pmc3
Definition context.h:56
uint32_t pmc2
Definition context.h:55
uint32_t dsisr
Definition context.h:39
uint64_t starttime
Definition context.h:51
uint32_t mmcr0
Definition context.h:58
void OSSetCurrentContext(OSContext *context)
OSContext * OSGetCurrentContext()
uint16_t OSContextState
A bitfield of enum OS_CONTEXT_STATE.
Definition context.h:16
void __OSSetCurrentUserContext(OSContext *context)
void OSLoadContext(OSContext *context)
void OSSaveFPUContext(OSContext *context)
void __OSSetAndLoadContext(OSContext *context)
void * OSSwitchStack(void *stack)
uint32_t OSSaveContext(OSContext *context)
OS_CONTEXT_STATE
Definition context.h:18
void OSDumpContext(OSContext *context)
void OSInitContext(OSContext *context, void *entry, void *stack)
void OSLoadFPUContext(OSContext *context)
@ OS_CONTEXT_STATE_OSCALLBACK
Definition context.h:19
@ OS_CONTEXT_STATE_USERMODE_SAVED
Definition context.h:20