Changing syscall interface to jump to KUSER_CODE, allowing use
authorJohn Hodge <[email protected]>
Thu, 22 Jul 2010 13:11:15 +0000 (21:11 +0800)
committerJohn Hodge <[email protected]>
Thu, 22 Jul 2010 13:11:15 +0000 (21:11 +0800)
of SYSENTER/SYSCALL instead of int 0x80 to be selected at runtime
- Also moved timer start earlier in startup

Kernel/arch/x86/main.c
Kernel/arch/x86/proc.asm
Kernel/include/syscalls.h
Kernel/include/syscalls.inc.asm
Kernel/syscalls.lst
Usermode/Libraries/libacess.so_src/syscalls.inc.asm

index f9e70e5..0557760 100644 (file)
@@ -81,13 +81,13 @@ int kmain(Uint MbMagic, void *MbInfoPtr)
        MM_InstallVirtual();    // Clean up virtual address space
        Heap_Install();         // Create initial heap
        
+       // Start Timers
+       Time_Setup();
+       
        //Log_Log("Arch", "Starting Multitasking...");
        // Start Multitasking
        Threads_Init();
        
-       // Start Timers
-       Time_Setup();
-       
        Log_Log("Arch", "Starting VFS...");
        // Load Virtual Filesystem
        VFS_Init();
index cefd796..fd863a4 100644 (file)
@@ -236,6 +236,12 @@ GetCPUNum:
 
 ; Usermode code exported by the kernel
 [section .usertext]
+; Export a place for the user to jump to to call a syscall
+; - Allows the kernel to change the method easily
+User_Syscall:
+       int 0xAC
+
+; A place to return to and exit
 User_Syscall_RetAndExit:
        push eax
        call User_Syscall_Exit
index a9d8892..45e3b19 100644 (file)
@@ -46,18 +46,20 @@ enum eSyscalls {
        SYS_READ,       // 67 - Read from an open file
        SYS_WRITE,      // 68 - Write to an open file
        SYS_IOCTL,      // 69 - Perform an IOCtl Call
-       SYS_READDIR,    // 70 - Read from an open directory
-       SYS_OPENCHILD,  // 71 - Open a child entry in a directory
-       SYS_MKDIR,      // 72 - Create a new directory
-       SYS_SYMLINK,    // 73 - Create a symbolic link
-       SYS_GETACL,     // 74 - Get an ACL Value
-       SYS_SETACL,     // 75 - Set an ACL Value
-       SYS_FINFO,      // 76 - Get file information
-       SYS_SEEK,       // 77 - Seek to a new position in the file
-       SYS_TELL,       // 78 - Return the current file position
-       SYS_CHDIR,      // 79 - Change current directory
-       SYS_GETCWD,     // 80 - Get current directory
-       SYS_MOUNT,      // 81 - Mount a filesystem
+       SYS_SEEK,       // 70 - Seek to a new position in the file
+       SYS_READDIR,    // 71 - Read from an open directory
+       SYS_OPENCHILD,  // 72 - Open a child entry in a directory
+       SYS_GETACL,     // 73 - Get an ACL Value
+       SYS_SETACL,     // 74 - Set an ACL Value
+       SYS_FINFO,      // 75 - Get file information
+       SYS_MKDIR,      // 76 - Create a new directory
+       SYS_LINK,       // 77 - Create a new link to a file
+       SYS_SYMLINK,    // 78 - Create a symbolic link
+       SYS_UNLINK,     // 79 - Delete a file
+       SYS_TELL,       // 80 - Return the current file position
+       SYS_CHDIR,      // 81 - Change current directory
+       SYS_GETCWD,     // 82 - Get current directory
+       SYS_MOUNT,      // 83 - Mount a filesystem
        NUM_SYSCALLS,
        SYS_DEBUG = 0x100       // 0x100 - Print a debug string
 };
@@ -74,8 +76,9 @@ static const char *cSYSCALL_NAMES[] = {
        "","","","","","",
        "","","","","","",
        "","","","","SYS_OPEN","SYS_REOPEN",
-       "SYS_CLOSE","SYS_READ","SYS_WRITE","SYS_IOCTL","SYS_READDIR","SYS_OPENCHILD",
-       "SYS_MKDIR","SYS_SYMLINK","SYS_GETACL","SYS_SETACL","SYS_FINFO","SYS_SEEK",
-       "SYS_TELL","SYS_CHDIR","SYS_GETCWD","SYS_MOUNT",""
+       "SYS_CLOSE","SYS_READ","SYS_WRITE","SYS_IOCTL","SYS_SEEK","SYS_READDIR",
+       "SYS_OPENCHILD","SYS_GETACL","SYS_SETACL","SYS_FINFO","SYS_MKDIR","SYS_LINK",
+       "SYS_SYMLINK","SYS_UNLINK","SYS_TELL","SYS_CHDIR","SYS_GETCWD","SYS_MOUNT",
+       ""
 };
 #endif
index 7f37969..c0435cc 100644 (file)
 %define SYS_READ       67      ; Read from an open file
 %define SYS_WRITE      68      ; Write to an open file
 %define SYS_IOCTL      69      ; Perform an IOCtl Call
-%define SYS_READDIR    70      ; Read from an open directory
-%define SYS_OPENCHILD  71      ; Open a child entry in a directory
-%define SYS_MKDIR      72      ; Create a new directory
-%define SYS_SYMLINK    73      ; Create a symbolic link
-%define SYS_GETACL     74      ; Get an ACL Value
-%define SYS_SETACL     75      ; Set an ACL Value
-%define SYS_FINFO      76      ; Get file information
-%define SYS_SEEK       77      ; Seek to a new position in the file
-%define SYS_TELL       78      ; Return the current file position
-%define SYS_CHDIR      79      ; Change current directory
-%define SYS_GETCWD     80      ; Get current directory
-%define SYS_MOUNT      81      ; Mount a filesystem
+%define SYS_SEEK       70      ; Seek to a new position in the file
+%define SYS_READDIR    71      ; Read from an open directory
+%define SYS_OPENCHILD  72      ; Open a child entry in a directory
+%define SYS_GETACL     73      ; Get an ACL Value
+%define SYS_SETACL     74      ; Set an ACL Value
+%define SYS_FINFO      75      ; Get file information
+%define SYS_MKDIR      76      ; Create a new directory
+%define SYS_LINK       77      ; Create a new link to a file
+%define SYS_SYMLINK    78      ; Create a symbolic link
+%define SYS_UNLINK     79      ; Delete a file
+%define SYS_TELL       80      ; Return the current file position
+%define SYS_CHDIR      81      ; Change current directory
+%define SYS_GETCWD     82      ; Get current directory
+%define SYS_MOUNT      83      ; Mount a filesystem
index dde278c..cf299ea 100644 (file)
@@ -47,14 +47,16 @@ SYS_CLOSE   Close a file
 SYS_READ       Read from an open file
 SYS_WRITE      Write to an open file
 SYS_IOCTL      Perform an IOCtl Call
+SYS_SEEK       Seek to a new position in the file
 SYS_READDIR    Read from an open directory
 SYS_OPENCHILD  Open a child entry in a directory
-SYS_MKDIR      Create a new directory
-SYS_SYMLINK    Create a symbolic link
 SYS_GETACL     Get an ACL Value
 SYS_SETACL     Set an ACL Value
 SYS_FINFO      Get file information
-SYS_SEEK       Seek to a new position in the file
+SYS_MKDIR      Create a new directory
+SYS_LINK       Create a new link to a file
+SYS_SYMLINK    Create a symbolic link
+SYS_UNLINK     Delete a file
 SYS_TELL       Return the current file position
 SYS_CHDIR      Change current directory
 SYS_GETCWD     Get current directory
index c6e11df..8e4e26a 100644 (file)
@@ -4,13 +4,15 @@
 
 %include "../../../Kernel/include/syscalls.inc.asm"
 
+SYSCALL_JUMP equ       0xCFFF0000
+
 ; System Call - No Arguments
 %macro SYSCALL0        2
 [global %1:func]
 %1:
        push ebx
        mov eax, %2
-       int 0xAC
+       jmp SYSCALL_JUMP
        mov [_errno], ebx
        pop ebx
        ret
@@ -25,7 +27,7 @@
        push ebx
        mov eax, %2
        mov ebx, [ebp+8]
-       int 0xAC
+       jmp SYSCALL_JUMP
        mov [_errno], ebx
        pop ebx
        pop ebp
@@ -42,7 +44,7 @@
        mov eax, %2
        mov ebx, [ebp+8]
        mov ecx, [ebp+12]
-       int 0xAC
+       jmp SYSCALL_JUMP
        mov [_errno], ebx
        pop ebx
        pop ebp
@@ -60,7 +62,7 @@
        mov ebx, [ebp+8]
        mov ecx, [ebp+12]
        mov edx, [ebp+16]
-       int 0xAC
+       jmp SYSCALL_JUMP
        mov [_errno], ebx
        pop ebx
        pop ebp
@@ -80,7 +82,7 @@
        mov ecx, [ebp+12]
        mov edx, [ebp+16]
        mov edi, [ebp+20]
-       int 0xAC
+       jmp SYSCALL_JUMP
        mov [_errno], ebx
        pop edi
        pop ebx
        mov edx, [ebp+16]
        mov edi, [ebp+20]
        mov esi, [ebp+24]
-       int 0xAC
+       jmp SYSCALL_JUMP
        mov [_errno], ebx
        pop esi
        pop edi
        mov edi, [ebp+20]
        mov esi, [ebp+24]
        mov ebp, [ebp+28]
-       int 0xAC
+       jmp SYSCALL_JUMP
        mov [_errno], ebx
        pop esi
        pop edi

UCC git Repository :: git.ucc.asn.au