瀏覽代碼

调整系统调用的寄存器传参顺序 (#13)

LoGin 1 年之前
父節點
當前提交
ee7a2b9399
共有 1 個文件被更改,包括 42 次插入68 次删除
  1. 42 68
      src/platform/x86_64/mod.rs

+ 42 - 68
src/platform/x86_64/mod.rs

@@ -19,7 +19,7 @@ pub unsafe fn syscall1(mut n: usize, a1: usize) -> usize {
     asm!(
         "int 0x80",
         inout("rax") n,
-        in("r8") a1,
+        in("rdi") a1,
         out("rcx") _,
         out("r11") _,
         options(nostack),
@@ -32,8 +32,8 @@ pub unsafe fn syscall2(mut n: usize, a1: usize, a2: usize) -> usize {
     asm!(
         "int 0x80",
         inout("rax") n,
-        in("r8") a1,
-        in("r9") a2,
+        in("rdi") a1,
+        in("rsi") a2,
         out("rcx") _,
         out("r11") _,
         options(nostack),
@@ -46,9 +46,9 @@ pub unsafe fn syscall3(mut n: usize, a1: usize, a2: usize, a3: usize) -> usize {
     asm!(
         "int 0x80",
         inout("rax") n,
-        in("r8") a1,
-        in("r9") a2,
-        in("r10") a3,
+        in("rdi") a1,
+        in("rsi") a2,
+        in("rdx") a3,
         out("rcx") _,
         out("r11") _,
         options(nostack),
@@ -57,93 +57,67 @@ pub unsafe fn syscall3(mut n: usize, a1: usize, a2: usize, a3: usize) -> usize {
 }
 
 #[inline(always)]
-pub unsafe fn syscall4(mut n: usize,
-                       a1: usize,
-                       a2: usize,
-                       a3: usize,
-                       a4: usize)
-                       -> usize {
+pub unsafe fn syscall4(mut n: usize, a1: usize, a2: usize, a3: usize, a4: usize) -> usize {
     asm!(
         "int 0x80",
         inout("rax") n,
-        in("r8") a1,
-        in("r9") a2,
-        in("r10") a3,
-        in("r11") a4,
+        in("rdi") a1,
+        in("rsi") a2,
+        in("rdx") a3,
+        in("r10") a4,
         out("rcx") _,
+        out("r11") _,
         options(nostack),
     );
     n
 }
 
 #[inline(always)]
-pub unsafe fn syscall5(mut n: usize,
-                       a1: usize,
-                       a2: usize,
-                       a3: usize,
-                       a4: usize,
-                       a5: usize)
-                       -> usize {
+pub unsafe fn syscall5(
+    mut n: usize,
+    a1: usize,
+    a2: usize,
+    a3: usize,
+    a4: usize,
+    a5: usize,
+) -> usize {
     asm!(
         "int 0x80",
         inout("rax") n,
-        in("r8") a1,
-        in("r9") a2,
-        in("r10") a3,
-        in("r11") a4,
-        in("r12") a5,
+        in("rdi") a1,
+        in("rsi") a2,
+        in("rdx") a3,
+        in("r10") a4,
+        in("r8") a5,
         out("rcx") _,
+        out("r11") _,
         options(nostack),
     );
     n
 }
 
 #[inline(always)]
-pub unsafe fn syscall6(mut n: usize,
-                       a1: usize,
-                       a2: usize,
-                       a3: usize,
-                       a4: usize,
-                       a5: usize,
-                       a6: usize)
-                       -> usize {
+pub unsafe fn syscall6(
+    mut n: usize,
+    a1: usize,
+    a2: usize,
+    a3: usize,
+    a4: usize,
+    a5: usize,
+    a6: usize,
+) -> usize {
     asm!(
         "int 0x80",
         inout("rax") n,
-        in("r8") a1,
-        in("r9") a2,
-        in("r10") a3,
-        in("r11") a4,
-        in("r12") a5,
-        in("r13") a6,
+        in("rdi") a1,
+        in("rsi") a2,
+        in("rdx") a3,
+        in("r10") a4,
+        in("r8") a5,
+        in("r9") a6,
         out("rcx") _,
+        out("r11") _,
         options(nostack),
     );
     n
 }
-
-#[inline(always)]
-pub unsafe fn syscall7(mut n: usize,
-                       a1: usize,
-                       a2: usize,
-                       a3: usize,
-                       a4: usize,
-                       a5: usize,
-                       a6: usize,
-                       a7: usize)
-                       -> usize {
-    asm!(
-        "int 0x80",
-        inout("rax") n,
-        in("r8") a1,
-        in("r9") a2,
-        in("r10") a3,
-        in("r11") a4,
-        in("r12") a5,
-        in("r13") a6,
-        in("r14") a7,
-        out("rcx") _,
-        options(nostack),
-    );
-    n
-}