1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
|
/*
* include/asm-arm/processor.h
*
* Copyright (C) 1995 Russell King
*/
#ifndef __ASM_ARM_PROCESSOR_H
#define __ASM_ARM_PROCESSOR_H
/*
* Default implementation of macro that returns current
* instruction pointer ("program counter").
*/
#define current_text_addr() ({ __label__ _l; _l: &&_l;})
#define FP_SIZE 35
struct fp_hard_struct {
unsigned int save[FP_SIZE]; /* as yet undefined */
};
struct fp_soft_struct {
unsigned int save[FP_SIZE]; /* undefined information */
};
union fp_state {
struct fp_hard_struct hard;
struct fp_soft_struct soft;
};
typedef unsigned long mm_segment_t; /* domain register */
#ifdef __KERNEL__
#include <asm/assembler.h>
#define NR_DEBUGS 5
#include <asm/arch/processor.h>
#include <asm/proc/processor.h>
struct thread_struct {
unsigned long address; /* Address of fault */
unsigned long trap_no; /* Trap number */
unsigned long error_code; /* Error code of trap */
union fp_state fpstate; /* FPE save state */
unsigned long debug[NR_DEBUGS]; /* Debug/ptrace */
struct context_save_struct *save; /* context save */
unsigned long memmap; /* page tables */
EXTRA_THREAD_STRUCT
};
#define INIT_MMAP \
{ &init_mm, 0, 0, NULL, PAGE_SHARED, VM_READ | VM_WRITE | VM_EXEC, 1, NULL, NULL }
#define INIT_TSS { \
0, \
0, \
0, \
{ { { 0, }, }, }, \
{ 0, }, \
(struct context_save_struct *)0, \
SWAPPER_PG_DIR \
EXTRA_THREAD_STRUCT_INIT \
}
/*
* Return saved PC of a blocked thread.
*/
extern __inline__ unsigned long thread_saved_pc(struct thread_struct *t)
{
return t->save ? t->save->pc & ~PCMASK : 0;
}
extern __inline__ unsigned long get_css_fp(struct thread_struct *t)
{
return t->save ? t->save->fp : 0;
}
asmlinkage void ret_from_sys_call(void) __asm__("ret_from_sys_call");
extern __inline__ void init_thread_css(struct context_save_struct *save)
{
*save = INIT_CSS;
save->pc |= (unsigned long)ret_from_sys_call;
}
/* Forward declaration, a strange C thing */
struct mm_struct;
/* Free all resources held by a thread. */
extern void release_thread(struct task_struct *);
/* Copy and release all segment info associated with a VM */
#define copy_segments(nr, tsk, mm) do { } while (0)
#define release_segments(mm) do { } while (0)
#define forget_segments() do { } while (0)
extern struct task_struct *alloc_task_struct(void);
extern void free_task_struct(struct task_struct *);
#define init_task (init_task_union.task)
#define init_stack (init_task_union.stack)
#endif
#endif /* __ASM_ARM_PROCESSOR_H */
|