@@ -10,13 +10,13 @@ pub mod task;
1010
1111pub use crate :: arch:: x86_64:: syscall:: syscall_handler;
1212
13- global_asm ! ( include_str!( "user_land.s" ) ) ;
13+ global_asm ! ( include_str!( "user_land.s" ) , options ( att_syntax ) ) ;
1414
1515pub fn register_task ( ) {
1616 let sel: u16 = 6u16 << 3 ;
1717
1818 unsafe {
19- llvm_asm ! ( "ltr $0" :: "r" ( sel ) :: "volatile" ) ;
19+ asm ! ( "ltr ax" , in ( "ax" ) sel , options ( nostack , nomem ) ) ;
2020 }
2121}
2222
@@ -49,7 +49,7 @@ macro_rules! syscall {
4949 $arg2 as u64 ,
5050 $arg3 as u64 ,
5151 $arg4 as u64 ,
52- )
52+ )
5353 } ;
5454
5555 ( $arg0: expr, $arg1: expr, $arg2: expr, $arg3: expr, $arg4: expr, $arg5: expr) => {
@@ -60,7 +60,7 @@ macro_rules! syscall {
6060 $arg3 as u64 ,
6161 $arg4 as u64 ,
6262 $arg5 as u64 ,
63- )
63+ )
6464 } ;
6565
6666 ( $arg0: expr, $arg1: expr, $arg2: expr, $arg3: expr, $arg4: expr, $arg5: expr, $arg6: expr) => {
@@ -72,7 +72,7 @@ macro_rules! syscall {
7272 $arg4 as u64 ,
7373 $arg5 as u64 ,
7474 $arg6 as u64 ,
75- )
75+ )
7676 } ;
7777
7878 ( $arg0: expr, $arg1: expr, $arg2: expr, $arg3: expr, $arg4: expr, $arg5: expr, $arg6: expr, $arg7: expr) => {
@@ -85,7 +85,7 @@ macro_rules! syscall {
8585 $arg5 as u64 ,
8686 $arg6 as u64 ,
8787 $arg7 as u64 ,
88- )
88+ )
8989 } ;
9090}
9191
@@ -94,7 +94,12 @@ macro_rules! syscall {
9494pub fn syscall0 ( arg0 : u64 ) -> u64 {
9595 let mut ret: u64 ;
9696 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+ ) ;
98103 }
99104 ret
100105}
@@ -104,8 +109,13 @@ pub fn syscall0(arg0: u64) -> u64 {
104109pub fn syscall1 ( arg0 : u64 , arg1 : u64 ) -> u64 {
105110 let mut ret: u64 ;
106111 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+ ) ;
109119 }
110120 ret
111121}
@@ -115,8 +125,14 @@ pub fn syscall1(arg0: u64, arg1: u64) -> u64 {
115125pub fn syscall2 ( arg0 : u64 , arg1 : u64 , arg2 : u64 ) -> u64 {
116126 let mut ret: u64 ;
117127 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+ ) ;
120136 }
121137 ret
122138}
@@ -126,8 +142,15 @@ pub fn syscall2(arg0: u64, arg1: u64, arg2: u64) -> u64 {
126142pub fn syscall3 ( arg0 : u64 , arg1 : u64 , arg2 : u64 , arg3 : u64 ) -> u64 {
127143 let mut ret: u64 ;
128144 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+ ) ;
131154 }
132155 ret
133156}
@@ -137,9 +160,16 @@ pub fn syscall3(arg0: u64, arg1: u64, arg2: u64, arg3: u64) -> u64 {
137160pub fn syscall4 ( arg0 : u64 , arg1 : u64 , arg2 : u64 , arg3 : u64 , arg4 : u64 ) -> u64 {
138161 let mut ret: u64 ;
139162 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+ ) ;
143173 }
144174 ret
145175}
@@ -149,9 +179,17 @@ pub fn syscall4(arg0: u64, arg1: u64, arg2: u64, arg3: u64, arg4: u64) -> u64 {
149179pub fn syscall5 ( arg0 : u64 , arg1 : u64 , arg2 : u64 , arg3 : u64 , arg4 : u64 , arg5 : u64 ) -> u64 {
150180 let mut ret: u64 ;
151181 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+ ) ;
155193 }
156194 ret
157195}
@@ -169,9 +207,18 @@ pub fn syscall6(
169207) -> u64 {
170208 let mut ret: u64 ;
171209 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+ ) ;
175222 }
176223 ret
177224}
0 commit comments