Subversion Repositories Kolibri OS

Rev

Rev 897 | Rev 996 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
854 serge 1
 
890 serge 2
#define IMAGE_BASE  0xE0100000
3
#define LOAD_BASE   0x00100000
4
854 serge 5
 
897 serge 6
 
928 serge 7
897 serge 8
 
928 serge 9
897 serge 10
 
928 serge 11
897 serge 12
 
928 serge 13
#define sel_os_code     0x18
14
15
 
16
#define sel_app_data    0x2B
17
18
 
19
#define sel_srv_stack   0x39
20
21
 
22
 
854 serge 23
24
 
25
26
 
27
28
 
29
30
 
31
		panic_printf("Kernel panic in %s() at %s:%u: " format, __func__, \
32
		__FILE__, __LINE__, ##__VA_ARGS__);
33
34
 
35
		if (!(expr)) { \
36
			panic("assertion failed (%s), caller=%p\n", #expr, CALLER); \
37
		}
38
862 serge 39
 
40
41
 
854 serge 42
862 serge 43
 
854 serge 44
		panic_printf("Kernel panic: " format, ##__VA_ARGS__);
45
46
 
47
862 serge 48
 
49
50
 
888 serge 51
      if (!(expr)) {   \
52
         panic_printf("Kernel panic in %s() at %s:%u: " \
53
                      "assertion failed (%s)",__func__ ,__FILE__,__LINE__, \
54
                       #expr); \
55
      };
56
57
 
854 serge 58
59
 
60
 
61
{
62
  eflags_t tmp;
63
	asm volatile (
64
    "pushfl\n\t"
886 serge 65
    "popl %0\n\t"
66
		"cli\n"
854 serge 67
    : "=r" (tmp));
928 serge 68
  return tmp;
854 serge 69
}
70
71
 
72
{
73
	asm volatile (
74
    "pushl %0\n\t"
886 serge 75
    "popfl\n"
76
    : : "r" (efl)
854 serge 77
	);
78
}
79
859 serge 80
 
81
{
82
  count_t n;
83
    asm volatile (
928 serge 84
    "xorl %0, %0 \n\t"
85
                "bsr %1, %0"
886 serge 86
    :"=&r"(n) :"r"(arg) );
928 serge 87
	return n;
859 serge 88
}
89
90
 
91
{
92
  count_t n;
93
    asm volatile (
928 serge 94
    "xorl %0, %0 \n\t"
95
                "bsf %1, %0"
886 serge 96
    :"=&r" (n) :"r"(arg));
928 serge 97
	return n;
859 serge 98
}
99
100
 
101
{
102
    asm volatile (
928 serge 103
    "bts %0, %1 \n\t"
104
    ::"g"(data), "r"(val):"cc");
105
}
859 serge 106
107
 
889 serge 108
{
859 serge 109
    asm volatile (
928 serge 110
    "btr %0, %1 \n\t"
111
    ::"g"(data), "r"(val):"cc");
112
}
859 serge 113
889 serge 114
 
115
{
116
     void* retval;
117
     size_t tmp;
118
119
 
120
     "pushl %%eax           \n\t"
121
     "call _load_file@4     \n\t"
122
     :"=eax" (retval), "=ebx"(tmp)
123
     :"a" (path) );
124
125
 
126
        *size = tmp;
127
     return retval;
128
};
129
130
 
131
 
928 serge 132
  saved_box       BOX
133
  ipc_start       dd ?
134
  ipc_size    dd ?
135
  event_mask      dd ?
136
  debugger_slot   dd ?
137
          dd ?
138
  keyboard_mode   db ?
139
          db 3   dup(?)
140
  dir_table       dd ?
141
  dbg_event_mem   dd ?
142
  dbg_regs:
143
  dbg_regs.dr0    dd ?
144
  dbg_regs.dr1    dd ?
145
  dbg_regs.dr2    dd ?
146
  dbg_regs.dr3    dd ?
147
  dbg_regs.dr7    dd ?
148
  wnd_caption     dd ?
149
  wnd_clientbox   BOX
150
*/
151
152
 
889 serge 153
928 serge 154
 
155
 
156
{
157
    u32_t    edi;
158
    u32_t    esi;
159
    u32_t    ebp;
160
    u32_t    tmp;                    // esp
161
    u32_t    ebx;
162
    u32_t    edx;
163
    u32_t    ecx;
164
    u32_t    eax;
165
    addr_t   retaddr;
166
    addr_t   eip;
167
    u32_t    cs;
168
    u32_t    eflags;
169
    addr_t   esp;
170
    u32_t    ss;                    // 14*4
171
172
 
173
    u32_t    slot;                  // thread slot
174
175
 
176
177
 
178
179
 
180
    int      quantum_size;          // quantum size in ticks */
181
182
 
183
    u32_t    sys_time;              // sys time in ticks
184
185
 
186
187
 
188
#define EFL_IOPL1   0x1000
189
#define EFL_IOPL2   0x2000
190
#define EFL_IOPL3   0x3000
191