1d85631c4SPeter Wemm/*- 2d85631c4SPeter Wemm * Copyright (c) 2003 Peter Wemm 3d85631c4SPeter Wemm * All rights reserved. 4d85631c4SPeter Wemm * 5d85631c4SPeter Wemm * Redistribution and use in source and binary forms, with or without 6d85631c4SPeter Wemm * modification, are permitted provided that the following conditions 7d85631c4SPeter Wemm * are met: 8d85631c4SPeter Wemm * 1. Redistributions of source code must retain the above copyright 9d85631c4SPeter Wemm * notice, this list of conditions and the following disclaimer. 10d85631c4SPeter Wemm * 2. Redistributions in binary form must reproduce the above copyright 11d85631c4SPeter Wemm * notice, this list of conditions and the following disclaimer in the 12d85631c4SPeter Wemm * documentation and/or other materials provided with the distribution. 13d85631c4SPeter Wemm * 14d85631c4SPeter Wemm * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15d85631c4SPeter Wemm * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16d85631c4SPeter Wemm * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17d85631c4SPeter Wemm * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18d85631c4SPeter Wemm * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19d85631c4SPeter Wemm * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20d85631c4SPeter Wemm * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21d85631c4SPeter Wemm * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22d85631c4SPeter Wemm * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23d85631c4SPeter Wemm * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24d85631c4SPeter Wemm * SUCH DAMAGE. 25d85631c4SPeter Wemm */ 26d85631c4SPeter Wemm 27d85631c4SPeter Wemm#include <machine/asmacros.h> 28d85631c4SPeter Wemm 29fc2a8776SEd Maste#include "assym.inc" 30d85631c4SPeter Wemm 31d85631c4SPeter Wemm .text 32d85631c4SPeter Wemm/* 33d85631c4SPeter Wemm * Call gate entry for FreeBSD ELF and Linux/NetBSD syscall (int 0x80) 34d85631c4SPeter Wemm * 35d85631c4SPeter Wemm * This is a SDT_SYSIDT entry point (unlike the i386 port) so that we 36d85631c4SPeter Wemm * can do a swapgs before enabling interrupts. This is critical because 37d85631c4SPeter Wemm * if we took an interrupt before swapgs, the interrupt code would see 38d85631c4SPeter Wemm * that it originated in supervisor mode and skip the swapgs. 39d85631c4SPeter Wemm */ 40d85631c4SPeter Wemm SUPERALIGN_TEXT 41bd50262fSKonstantin BelousovIDTVEC(int0x80_syscall_pti) 42bd50262fSKonstantin Belousov PTI_UENTRY has_err=0 43bd50262fSKonstantin Belousov jmp int0x80_syscall_common 44bd50262fSKonstantin Belousov SUPERALIGN_TEXT 45d85631c4SPeter WemmIDTVEC(int0x80_syscall) 46d85631c4SPeter Wemm swapgs 47bd50262fSKonstantin Belousovint0x80_syscall_common: 48d85631c4SPeter Wemm pushq $2 /* sizeof "int 0x80" */ 49d85631c4SPeter Wemm subq $TF_ERR,%rsp /* skip over tf_trapno */ 50d85631c4SPeter Wemm movq %rdi,TF_RDI(%rsp) 51a2622e5dSKonstantin Belousov movq PCPU(CURPCB),%rdi 52ff265077SJohn Baldwin andl $~PCB_FULL_IRET,PCB_FLAGS(%rdi) 53bd50262fSKonstantin Belousov SAVE_SEGS 54319117fdSKonstantin Belousov movq %rax,TF_RAX(%rsp) 55d85631c4SPeter Wemm movq %rdx,TF_RDX(%rsp) 56d85631c4SPeter Wemm movq %rcx,TF_RCX(%rsp) 57319117fdSKonstantin Belousov call handle_ibrs_entry 58319117fdSKonstantin Belousov sti 59319117fdSKonstantin Belousov movq %rsi,TF_RSI(%rsp) 60d85631c4SPeter Wemm movq %r8,TF_R8(%rsp) 61d85631c4SPeter Wemm movq %r9,TF_R9(%rsp) 62d85631c4SPeter Wemm movq %rbx,TF_RBX(%rsp) 63d85631c4SPeter Wemm movq %rbp,TF_RBP(%rsp) 64d85631c4SPeter Wemm movq %r10,TF_R10(%rsp) 65d85631c4SPeter Wemm movq %r11,TF_R11(%rsp) 66d85631c4SPeter Wemm movq %r12,TF_R12(%rsp) 67d85631c4SPeter Wemm movq %r13,TF_R13(%rsp) 68d85631c4SPeter Wemm movq %r14,TF_R14(%rsp) 69d85631c4SPeter Wemm movq %r15,TF_R15(%rsp) 702c66cccaSKonstantin Belousov movl $TF_HASSEGS,TF_FLAGS(%rsp) 71*b3a7db3bSKonstantin Belousov pushfq 72*b3a7db3bSKonstantin Belousov andq $~(PSL_D | PSL_AC),(%rsp) 73*b3a7db3bSKonstantin Belousov popfq 74e5f8d409SKip Macy movq %rsp, %rdi 75d85631c4SPeter Wemm call ia32_syscall 76d85631c4SPeter Wemm jmp doreti 77