;=----------------------------------------------------------------------------=; ; OS on Kaleid ; ; ; ; Desc: System call & userspace related functions ; ; ; ; ; ; Copyright © 2018-2021 The OS/K Team ; ; ; ; This file is part of OS/K. ; ; ; ; OS/K is free software: you can redistribute it and/or modify ; ; it under the terms of the GNU General Public License as published by ; ; the Free Software Foundation, either version 3 of the License, or ; ; (at your option) any later version. ; ; ; ; OS/K is distributed in the hope that it will be useful, ; ; but WITHOUT ANY WARRANTY; without even the implied warranty of ; ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ; ; GNU General Public License for more details. ; ; ; ; You should have received a copy of the GNU General Public License ; ; along with OS/K. If not, see . ; ;=----------------------------------------------------------------------------=; [BITS 64] %include "kaleid/kernel/ke/cpuf.inc" global KeJumpToUserspace global KeSyscall extern KernLog ;; ;; To get ring3 code running ;; KeJumpToUserspace: ; rdi = user args ; rsi = entry point in user space ; rdx = user space stack ; Build a fake iret frame push QWORD 0x23 ; Selector 0x20 (User Data) + RPL 3 push rdx ; User space stack push QWORD 0x202 ; rflags = interrupt enable + reserved bit push QWORD 0x1B ; Selector 0x18 (User Code) + RPL 3 push rsi ; Entry point in user space iretq ;; ;; Syscall trigger ;; KeSyscall: int 0x80 ret