5
5
// http://opensource.org/licenses/MIT>, at your option. This file may not be
6
6
// copied, modified, or distributed except according to those terms.
7
7
8
- mod gdt;
8
+ pub mod gdt;
9
9
pub mod irq;
10
10
mod pit;
11
11
pub mod processor;
@@ -17,8 +17,8 @@ pub mod task;
17
17
pub use crate :: arch:: x86_64:: kernel:: syscall:: syscall_handler;
18
18
use core:: ptr:: read_volatile;
19
19
20
- global_asm ! ( include_str!( "user_land.s" ) ) ;
21
- global_asm ! ( include_str!( "switch.s" ) ) ;
20
+ global_asm ! ( include_str!( "user_land.s" ) , options ( att_syntax ) ) ;
21
+ global_asm ! ( include_str!( "switch.s" ) , options ( att_syntax ) ) ;
22
22
23
23
#[ repr( C ) ]
24
24
struct KernelHeader {
@@ -61,7 +61,7 @@ pub fn register_task() {
61
61
let sel: u16 = 6u16 << 3 ;
62
62
63
63
unsafe {
64
- asm ! ( "ltr ax" , in( "ax" ) sel, options( nostack) ) ;
64
+ asm ! ( "ltr ax" , in( "ax" ) sel, options( nostack, nomem ) ) ;
65
65
}
66
66
}
67
67
@@ -140,7 +140,12 @@ macro_rules! syscall {
140
140
pub fn syscall0 ( arg0 : u64 ) -> u64 {
141
141
let mut ret: u64 ;
142
142
unsafe {
143
- asm ! ( "syscall" , lateout( "rax" ) ret, in( "rax" ) arg0, lateout( "rcx" ) _, lateout( "r11" ) _) ;
143
+ asm ! ( "syscall" ,
144
+ inlateout( "rax" ) arg0 => ret,
145
+ lateout( "rcx" ) _,
146
+ lateout( "r11" ) _,
147
+ options( preserves_flags, nostack)
148
+ ) ;
144
149
}
145
150
ret
146
151
}
@@ -150,7 +155,13 @@ pub fn syscall0(arg0: u64) -> u64 {
150
155
pub fn syscall1 ( arg0 : u64 , arg1 : u64 ) -> u64 {
151
156
let mut ret: u64 ;
152
157
unsafe {
153
- asm ! ( "syscall" , lateout( "rax" ) ret, in( "rax" ) arg0, in( "rdi" ) arg1, lateout( "rcx" ) _, lateout( "r11" ) _) ;
158
+ asm ! ( "syscall" ,
159
+ inlateout( "rax" ) arg0 => ret,
160
+ in( "rdi" ) arg1,
161
+ lateout( "rcx" ) _,
162
+ lateout( "r11" ) _,
163
+ options( preserves_flags, nostack)
164
+ ) ;
154
165
}
155
166
ret
156
167
}
@@ -160,7 +171,14 @@ pub fn syscall1(arg0: u64, arg1: u64) -> u64 {
160
171
pub fn syscall2 ( arg0 : u64 , arg1 : u64 , arg2 : u64 ) -> u64 {
161
172
let mut ret: u64 ;
162
173
unsafe {
163
- asm ! ( "syscall" , lateout( "rax" ) ret, in( "rax" ) arg0, in( "rdi" ) arg1, in( "rsi" ) arg2, lateout( "rcx" ) _, lateout( "r11" ) _) ;
174
+ asm ! ( "syscall" ,
175
+ inlateout( "rax" ) arg0 => ret,
176
+ in( "rdi" ) arg1,
177
+ in( "rsi" ) arg2,
178
+ lateout( "rcx" ) _,
179
+ lateout( "r11" ) _,
180
+ options( preserves_flags, nostack)
181
+ ) ;
164
182
}
165
183
ret
166
184
}
@@ -170,7 +188,15 @@ pub fn syscall2(arg0: u64, arg1: u64, arg2: u64) -> u64 {
170
188
pub fn syscall3 ( arg0 : u64 , arg1 : u64 , arg2 : u64 , arg3 : u64 ) -> u64 {
171
189
let mut ret: u64 ;
172
190
unsafe {
173
- asm ! ( "syscall" , lateout( "rax" ) ret, in( "rax" ) arg0, in( "rdi" ) arg1, in( "rsi" ) arg2, in( "rdx" ) arg3, lateout( "rcx" ) _, lateout( "r11" ) _) ;
191
+ asm ! ( "syscall" ,
192
+ inlateout( "rax" ) arg0 => ret,
193
+ in( "rdi" ) arg1,
194
+ in( "rsi" ) arg2,
195
+ in( "rdx" ) arg3,
196
+ lateout( "rcx" ) _,
197
+ lateout( "r11" ) _,
198
+ options( preserves_flags, nostack)
199
+ ) ;
174
200
}
175
201
ret
176
202
}
@@ -180,7 +206,16 @@ pub fn syscall3(arg0: u64, arg1: u64, arg2: u64, arg3: u64) -> u64 {
180
206
pub fn syscall4 ( arg0 : u64 , arg1 : u64 , arg2 : u64 , arg3 : u64 , arg4 : u64 ) -> u64 {
181
207
let mut ret: u64 ;
182
208
unsafe {
183
- asm ! ( "syscall" , lateout( "rax" ) ret, in( "rax" ) arg0, in( "rdi" ) arg1, in( "rsi" ) arg2, in( "rdx" ) arg3, in( "r10" ) arg4, lateout( "rcx" ) _, lateout( "r11" ) _) ;
209
+ asm ! ( "syscall" ,
210
+ inlateout( "rax" ) arg0 => ret,
211
+ in( "rdi" ) arg1,
212
+ in( "rsi" ) arg2,
213
+ in( "rdx" ) arg3,
214
+ in( "r10" ) arg4,
215
+ lateout( "rcx" ) _,
216
+ lateout( "r11" ) _,
217
+ options( preserves_flags, nostack)
218
+ ) ;
184
219
}
185
220
ret
186
221
}
@@ -190,7 +225,17 @@ pub fn syscall4(arg0: u64, arg1: u64, arg2: u64, arg3: u64, arg4: u64) -> u64 {
190
225
pub fn syscall5 ( arg0 : u64 , arg1 : u64 , arg2 : u64 , arg3 : u64 , arg4 : u64 , arg5 : u64 ) -> u64 {
191
226
let mut ret: u64 ;
192
227
unsafe {
193
- asm ! ( "syscall" , lateout( "rax" ) ret, in( "rax" ) arg0, in( "rdi" ) arg1, in( "rsi" ) arg2, in( "rdx" ) arg3, in( "r10" ) arg4, in( "r8" ) arg5, lateout( "rcx" ) _, lateout( "r11" ) _) ;
228
+ asm ! ( "syscall" ,
229
+ inlateout( "rax" ) arg0 => ret,
230
+ in( "rdi" ) arg1,
231
+ in( "rsi" ) arg2,
232
+ in( "rdx" ) arg3,
233
+ in( "r10" ) arg4,
234
+ in( "r8" ) arg5,
235
+ lateout( "rcx" ) _,
236
+ lateout( "r11" ) _,
237
+ options( preserves_flags, nostack)
238
+ ) ;
194
239
}
195
240
ret
196
241
}
@@ -208,7 +253,18 @@ pub fn syscall6(
208
253
) -> u64 {
209
254
let mut ret: u64 ;
210
255
unsafe {
211
- asm ! ( "syscall" , lateout( "rax" ) ret, in( "rax" ) arg0, in( "rdi" ) arg1, in( "rsi" ) arg2, in( "rdx" ) arg3, in( "r10" ) arg4, in( "r8" ) arg5, in( "r9" ) arg6, lateout( "rcx" ) _, lateout( "r11" ) _) ;
256
+ asm ! ( "syscall" ,
257
+ inlateout( "rax" ) arg0 => ret,
258
+ in( "rdi" ) arg1,
259
+ in( "rsi" ) arg2,
260
+ in( "rdx" ) arg3,
261
+ in( "r10" ) arg4,
262
+ in( "r8" ) arg5,
263
+ in( "r9" ) arg6,
264
+ lateout( "rcx" ) _,
265
+ lateout( "r11" ) _,
266
+ options( preserves_flags, nostack)
267
+ ) ;
212
268
}
213
269
ret
214
270
}
0 commit comments