@@ -10,13 +10,13 @@ pub mod task;
10
10
11
11
pub use crate :: arch:: x86_64:: syscall:: syscall_handler;
12
12
13
- global_asm ! ( include_str!( "user_land.s" ) ) ;
13
+ global_asm ! ( include_str!( "user_land.s" ) , options ( att_syntax ) ) ;
14
14
15
15
pub fn register_task ( ) {
16
16
let sel: u16 = 6u16 << 3 ;
17
17
18
18
unsafe {
19
- llvm_asm ! ( "ltr $0" :: "r" ( sel ) :: "volatile" ) ;
19
+ asm ! ( "ltr ax" , in ( "ax" ) sel , options ( nostack , nomem ) ) ;
20
20
}
21
21
}
22
22
@@ -49,7 +49,7 @@ macro_rules! syscall {
49
49
$arg2 as u64 ,
50
50
$arg3 as u64 ,
51
51
$arg4 as u64 ,
52
- )
52
+ )
53
53
} ;
54
54
55
55
( $arg0: expr, $arg1: expr, $arg2: expr, $arg3: expr, $arg4: expr, $arg5: expr) => {
@@ -60,7 +60,7 @@ macro_rules! syscall {
60
60
$arg3 as u64 ,
61
61
$arg4 as u64 ,
62
62
$arg5 as u64 ,
63
- )
63
+ )
64
64
} ;
65
65
66
66
( $arg0: expr, $arg1: expr, $arg2: expr, $arg3: expr, $arg4: expr, $arg5: expr, $arg6: expr) => {
@@ -72,7 +72,7 @@ macro_rules! syscall {
72
72
$arg4 as u64 ,
73
73
$arg5 as u64 ,
74
74
$arg6 as u64 ,
75
- )
75
+ )
76
76
} ;
77
77
78
78
( $arg0: expr, $arg1: expr, $arg2: expr, $arg3: expr, $arg4: expr, $arg5: expr, $arg6: expr, $arg7: expr) => {
@@ -85,7 +85,7 @@ macro_rules! syscall {
85
85
$arg5 as u64 ,
86
86
$arg6 as u64 ,
87
87
$arg7 as u64 ,
88
- )
88
+ )
89
89
} ;
90
90
}
91
91
@@ -94,7 +94,12 @@ macro_rules! syscall {
94
94
pub fn syscall0 ( arg0 : u64 ) -> u64 {
95
95
let mut ret: u64 ;
96
96
unsafe {
97
- llvm_asm ! ( "syscall" : "={rax}" ( ret) : "{rax}" ( arg0) : "rcx" , "r11" , "memory" : "volatile" ) ;
97
+ asm ! ( "syscall" ,
98
+ inlateout( "rax" ) arg0 => ret,
99
+ lateout( "rcx" ) _,
100
+ lateout( "r11" ) _,
101
+ options( preserves_flags, nostack)
102
+ ) ;
98
103
}
99
104
ret
100
105
}
@@ -104,8 +109,13 @@ pub fn syscall0(arg0: u64) -> u64 {
104
109
pub fn syscall1 ( arg0 : u64 , arg1 : u64 ) -> u64 {
105
110
let mut ret: u64 ;
106
111
unsafe {
107
- llvm_asm ! ( "syscall" : "={rax}" ( ret) : "{rax}" ( arg0) , "{rdi}" ( arg1)
108
- : "rcx" , "r11" , "memory" : "volatile" ) ;
112
+ asm ! ( "syscall" ,
113
+ inlateout( "rax" ) arg0 => ret,
114
+ in( "rdi" ) arg1,
115
+ lateout( "rcx" ) _,
116
+ lateout( "r11" ) _,
117
+ options( preserves_flags, nostack)
118
+ ) ;
109
119
}
110
120
ret
111
121
}
@@ -115,8 +125,14 @@ pub fn syscall1(arg0: u64, arg1: u64) -> u64 {
115
125
pub fn syscall2 ( arg0 : u64 , arg1 : u64 , arg2 : u64 ) -> u64 {
116
126
let mut ret: u64 ;
117
127
unsafe {
118
- llvm_asm ! ( "syscall" : "={rax}" ( ret) : "{rax}" ( arg0) , "{rdi}" ( arg1) , "{rsi}" ( arg2)
119
- : "rcx" , "r11" , "memory" : "volatile" ) ;
128
+ asm ! ( "syscall" ,
129
+ inlateout( "rax" ) arg0 => ret,
130
+ in( "rdi" ) arg1,
131
+ in( "rsi" ) arg2,
132
+ lateout( "rcx" ) _,
133
+ lateout( "r11" ) _,
134
+ options( preserves_flags, nostack)
135
+ ) ;
120
136
}
121
137
ret
122
138
}
@@ -126,8 +142,15 @@ pub fn syscall2(arg0: u64, arg1: u64, arg2: u64) -> u64 {
126
142
pub fn syscall3 ( arg0 : u64 , arg1 : u64 , arg2 : u64 , arg3 : u64 ) -> u64 {
127
143
let mut ret: u64 ;
128
144
unsafe {
129
- llvm_asm ! ( "syscall" : "={rax}" ( ret) : "{rax}" ( arg0) , "{rdi}" ( arg1) , "{rsi}" ( arg2) ,
130
- "{rdx}" ( arg3) : "rcx" , "r11" , "memory" : "volatile" ) ;
145
+ asm ! ( "syscall" ,
146
+ inlateout( "rax" ) arg0 => ret,
147
+ in( "rdi" ) arg1,
148
+ in( "rsi" ) arg2,
149
+ in( "rdx" ) arg3,
150
+ lateout( "rcx" ) _,
151
+ lateout( "r11" ) _,
152
+ options( preserves_flags, nostack)
153
+ ) ;
131
154
}
132
155
ret
133
156
}
@@ -137,9 +160,16 @@ pub fn syscall3(arg0: u64, arg1: u64, arg2: u64, arg3: u64) -> u64 {
137
160
pub fn syscall4 ( arg0 : u64 , arg1 : u64 , arg2 : u64 , arg3 : u64 , arg4 : u64 ) -> u64 {
138
161
let mut ret: u64 ;
139
162
unsafe {
140
- llvm_asm ! ( "syscall" : "={rax}" ( ret)
141
- : "{rax}" ( arg0) , "{rdi}" ( arg1) , "{rsi}" ( arg2) , "{rdx}" ( arg3) ,
142
- "{r10}" ( arg4) : "rcx" , "r11" , "memory" : "volatile" ) ;
163
+ asm ! ( "syscall" ,
164
+ inlateout( "rax" ) arg0 => ret,
165
+ in( "rdi" ) arg1,
166
+ in( "rsi" ) arg2,
167
+ in( "rdx" ) arg3,
168
+ in( "r10" ) arg4,
169
+ lateout( "rcx" ) _,
170
+ lateout( "r11" ) _,
171
+ options( preserves_flags, nostack)
172
+ ) ;
143
173
}
144
174
ret
145
175
}
@@ -149,9 +179,17 @@ pub fn syscall4(arg0: u64, arg1: u64, arg2: u64, arg3: u64, arg4: u64) -> u64 {
149
179
pub fn syscall5 ( arg0 : u64 , arg1 : u64 , arg2 : u64 , arg3 : u64 , arg4 : u64 , arg5 : u64 ) -> u64 {
150
180
let mut ret: u64 ;
151
181
unsafe {
152
- llvm_asm ! ( "syscall" : "={rax}" ( ret)
153
- : "{rax}" ( arg0) , "{rdi}" ( arg1) , "{rsi}" ( arg2) , "{rdx}" ( arg3) ,
154
- "{r10}" ( arg4) , "{r8}" ( arg5) : "rcx" , "r11" , "memory" : "volatile" ) ;
182
+ asm ! ( "syscall" ,
183
+ inlateout( "rax" ) arg0 => ret,
184
+ in( "rdi" ) arg1,
185
+ in( "rsi" ) arg2,
186
+ in( "rdx" ) arg3,
187
+ in( "r10" ) arg4,
188
+ in( "r8" ) arg5,
189
+ lateout( "rcx" ) _,
190
+ lateout( "r11" ) _,
191
+ options( preserves_flags, nostack)
192
+ ) ;
155
193
}
156
194
ret
157
195
}
@@ -169,9 +207,18 @@ pub fn syscall6(
169
207
) -> u64 {
170
208
let mut ret: u64 ;
171
209
unsafe {
172
- llvm_asm ! ( "syscall" : "={rax}" ( ret) : "{rax}" ( arg0) , "{rdi}" ( arg1) , "{rsi}" ( arg2) ,
173
- "{rdx}" ( arg3) , "{r10}" ( arg4) , "{r8}" ( arg5) , "{r9}" ( arg6)
174
- : "rcx" , "r11" , "memory" : "volatile" ) ;
210
+ asm ! ( "syscall" ,
211
+ inlateout( "rax" ) arg0 => ret,
212
+ in( "rdi" ) arg1,
213
+ in( "rsi" ) arg2,
214
+ in( "rdx" ) arg3,
215
+ in( "r10" ) arg4,
216
+ in( "r8" ) arg5,
217
+ in( "r9" ) arg6,
218
+ lateout( "rcx" ) _,
219
+ lateout( "r11" ) _,
220
+ options( preserves_flags, nostack)
221
+ ) ;
175
222
}
176
223
ret
177
224
}
0 commit comments