]> Zhao Yanbai Git Server - kernel.git/commitdiff
换种方式实现sysc bad number
authoracevest <zhaoyanbai@126.com>
Mon, 1 Nov 2021 08:33:17 +0000 (16:33 +0800)
committeracevest <zhaoyanbai@126.com>
Wed, 3 Nov 2021 02:45:46 +0000 (10:45 +0800)
include/syscall.h
kernel/syscall.S
kernel/syscall.c

index 5e8bd155a21b451d24f48a6ff3c9c25a19cbc453..59b4a834ccea6a5c676c12236a24f98b2a3c8d3a 100644 (file)
@@ -36,23 +36,21 @@ int _syscall4(int nr, unsigned long a, unsigned long b, unsigned long c, unsigne
 #define syscall3(nr, a, b, c) _syscall3(nr, (unsigned long)a, (unsigned long)b, (unsigned long)c)
 #define syscall4(nr, a, b, c, d) _syscall4(nr, (unsigned long)a, (unsigned long)b, (unsigned long)c, (unsigned long)d)
 
-enum
-{
-    SYSC_WRITE,
-    SYSC_REBOOT,
-    SYSC_FORK,
-    SYSC_CLONE,
-    SYSC_EXEC,
-    SYSC_WAIT,
-    SYSC_OPEN,
-    SYSC_READ,
-    SYSC_STAT,
-    SYSC_EXIT,
-    SYSC_PAUSE,
-    SYSC_TEST,
-    SYSC_DEBUG
-};
-
 #endif // ASM
 
+#define SYSC_WRITE (0)
+#define SYSC_REBOOT (1)
+#define SYSC_FORK (2)
+#define SYSC_CLONE (3)
+#define SYSC_EXEC (4)
+#define SYSC_WAIT (5)
+#define SYSC_OPEN (6)
+#define SYSC_READ (7)
+#define SYSC_STAT (8)
+#define SYSC_EXIT (9)
+#define SYSC_PAUSE (10)
+#define SYSC_TEST (11)
+#define SYSC_DEBUG (12)
+#define SYSC_BAD_NR (SYSC_NUM - 1)
+
 #endif //_SYSCALL_H
index fdd9772c371bc51ef69ab75f3b2a06c064423008..89996b80eeb853f7c9cf450ec8f5c80139f54f8a 100644 (file)
@@ -48,8 +48,10 @@ syscall_entry:
     popl    %eax
 
     cmpl    $SYSC_NUM, %eax
-    jae     bad_sysc_nr
+    jb      .normal_syscall
+    mov     $SYSC_BAD_NR, %eax
 
+ .normal_syscall:
     call    *sysc_handler_table(,%eax,4)
 
 normal_syscall_exit:
@@ -66,10 +68,6 @@ syscall_exit:
     sti        /* sysenter have cleared IF, and sysexit will not set IF. */
     sysexit
 
-bad_sysc_nr:
-    call    sysc_bad_syscnr
-    jmp     syscall_exit
-
 ret_from_fork_user:
     xorl    %eax, %eax
     jmp     normal_syscall_exit
index ef98edb137f1619290ad2d9ff96650cc7051175a..3c11103bd5e829dcbdf6179c3b543f63121f6060 100644 (file)
@@ -90,14 +90,17 @@ void init_sysc_handler_table()
     _sysc_(SYSC_PAUSE, sysc_pause);
     _sysc_(SYSC_TEST, sysc_test);
     _sysc_(SYSC_DEBUG, sysc_debug);
+    _sysc_(SYSC_BAD_NR, sysc_bad_nr)
 }
 
-int sysc_bad_syscnr()
+int sysc_bad_nr()
 {
     int sysc_nr;
+
     asm(""
         : "=a"(sysc_nr));
+
     printk("bad syscall nr:%d\n", sysc_nr);
 
-    return 0;
+    return -1;
 }