GadgetSeed
0.9.6
emu_task.c
[詳解]
1
/** @file
2
@brief エミュレータ疑似タスク制御
3
4
@date 2012.12.08
5
@author Takashi SHUDO
6
*/
7
8
#include "
asm-emu.h
"
9
#include "
task/task.h
"
10
#include "
tprintf.h
"
11
12
#include <stdio.h>
13
14
//#define DEBUG
15
#ifdef DEBUG
16
#define PCPRINTF printf
17
#else
18
#define PCPRINTF(x, ...)
19
#endif
20
21
static
ucontext_t uctx;
22
23
void
setup_task(
void
*sp,
int
stack_size,
void
(* task)(
void
),
24
struct
st_tcb
*tcb)
25
{
26
PCPRINTF(
"setup_task sp=%p, stack_size=%d, task=%p,"
27
" tcb=%p\r\n"
, sp, stack_size,
28
task, tcb);
29
30
if
(getcontext(&(tcb->
ctx
.uc)) == -1) {
31
fprintf(stderr,
"getcontext error"
);
32
}
33
tcb->
ctx
.uc.uc_stack.ss_sp = sp;
34
tcb->
ctx
.uc.uc_stack.ss_size = stack_size;
35
tcb->
ctx
.uc.uc_link = &uctx;
36
makecontext(&(tcb->
ctx
.uc), (
void
*)task, 0);
37
}
38
39
void
disp_regs(
void
*sp)
40
{
41
// EMUはレジスタは表示できない
42
}
task.h
タスク制御
st_tcb::ctx
struct st_context ctx
CPUコンテキスト(CPUアーキテクチャ依存)
Definition:
tcb.h:43
st_tcb
タスクコンテキスト
Definition:
tcb.h:32
tprintf.h
機能限定printf
asm-emu.h
エミュレータ用制御
arch
emu
emu_task.c
構築:
1.8.13