10e6594a8SSascha Wildner/* 20e6594a8SSascha Wildner * Copyright (c) 2006 The DragonFly Project. All rights reserved. 30e6594a8SSascha Wildner * 40e6594a8SSascha Wildner * This code is derived from software contributed to The DragonFly Project 50e6594a8SSascha Wildner * by Matthew Dillon <dillon@backplane.com> 60e6594a8SSascha Wildner * 70e6594a8SSascha Wildner * Redistribution and use in source and binary forms, with or without 80e6594a8SSascha Wildner * modification, are permitted provided that the following conditions 90e6594a8SSascha Wildner * are met: 100e6594a8SSascha Wildner * 110e6594a8SSascha Wildner * 1. Redistributions of source code must retain the above copyright 120e6594a8SSascha Wildner * notice, this list of conditions and the following disclaimer. 130e6594a8SSascha Wildner * 2. Redistributions in binary form must reproduce the above copyright 140e6594a8SSascha Wildner * notice, this list of conditions and the following disclaimer in 150e6594a8SSascha Wildner * the documentation and/or other materials provided with the 160e6594a8SSascha Wildner * distribution. 170e6594a8SSascha Wildner * 3. Neither the name of The DragonFly Project nor the names of its 180e6594a8SSascha Wildner * contributors may be used to endorse or promote products derived 190e6594a8SSascha Wildner * from this software without specific, prior written permission. 200e6594a8SSascha Wildner * 210e6594a8SSascha Wildner * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 220e6594a8SSascha Wildner * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 230e6594a8SSascha Wildner * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 240e6594a8SSascha Wildner * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 250e6594a8SSascha Wildner * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 260e6594a8SSascha Wildner * INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING, 270e6594a8SSascha Wildner * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 280e6594a8SSascha Wildner * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 290e6594a8SSascha Wildner * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 300e6594a8SSascha Wildner * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 310e6594a8SSascha Wildner * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 320e6594a8SSascha Wildner * SUCH DAMAGE. 330e6594a8SSascha Wildner */ 340e6594a8SSascha Wildner 350e6594a8SSascha Wildner#include <sys/syscall.h> 360e6594a8SSascha Wildner#include <machine/asmacros.h> 370e6594a8SSascha Wildner#include <machine/psl.h> 380e6594a8SSascha Wildner#include "assym.s" 390e6594a8SSascha Wildner 400e6594a8SSascha Wildner /* 410e6594a8SSascha Wildner * The sysinit and sysuninit sections have to be read-write data 420e6594a8SSascha Wildner * sections, not read-only data sections. 430e6594a8SSascha Wildner */ 440e6594a8SSascha Wildner .section set_sysinit_set, "aw" 450e6594a8SSascha Wildner .section set_sysuninit_set, "aw" 460e6594a8SSascha Wildner 470e6594a8SSascha Wildner .data 480e6594a8SSascha Wildner ALIGN_DATA /* just to be sure */ 490e6594a8SSascha Wildner 500e6594a8SSascha Wildner /* 510e6594a8SSascha Wildner * Normally the startup code would begin here, but this is a 520e6594a8SSascha Wildner * virtual kernel so we just have a main() in platform/init.c 530e6594a8SSascha Wildner */ 540e6594a8SSascha Wildner 550e6594a8SSascha Wildner .text 560e6594a8SSascha Wildner/********************************************************************** 570e6594a8SSascha Wildner * 580e6594a8SSascha Wildner * Signal trampoline, copied to top of user stack 590e6594a8SSascha Wildner * 600e6594a8SSascha Wildner * arguments: %rdi, %rsi, %rdx, %rcx 610e6594a8SSascha Wildner */ 620e6594a8SSascha WildnerNON_GPROF_ENTRY(sigcode) 630e6594a8SSascha Wildner call *SIGF_HANDLER(%rsp) /* call signal handler */ 640e6594a8SSascha Wildner lea SIGF_UC(%rsp),%rdi /* get ucontext_t */ 650e6594a8SSascha Wildner pushq $0 /* junk to fake return addr. */ 660e6594a8SSascha Wildner movq $SYS_sigreturn,%rax 670e6594a8SSascha Wildner syscall /* enter kernel with args */ 680e6594a8SSascha Wildner0: hlt /* trap priviliged instruction */ 690e6594a8SSascha Wildner jmp 0b 700e6594a8SSascha Wildner 710e6594a8SSascha Wildner ALIGN_TEXT 720e6594a8SSascha Wildneresigcode: 730e6594a8SSascha Wildner 740e6594a8SSascha Wildner/* void reset_dbregs() */ 750e6594a8SSascha WildnerENTRY(reset_dbregs) 760e6594a8SSascha Wildner movq $0x200,%rax /* the manual says that bit 10 must be set to 1 */ 770e6594a8SSascha Wildner movq %rax,%dr7 /* disable all breapoints first */ 780e6594a8SSascha Wildner movq $0,%rax 790e6594a8SSascha Wildner movq %rax,%dr0 800e6594a8SSascha Wildner movq %rax,%dr1 810e6594a8SSascha Wildner movq %rax,%dr2 820e6594a8SSascha Wildner movq %rax,%dr3 830e6594a8SSascha Wildner movq %rax,%dr6 840e6594a8SSascha Wildner ret 85*b1d2a2deSzrjEND(reset_dbregs) 860e6594a8SSascha Wildner 870e6594a8SSascha Wildner .data 880e6594a8SSascha Wildner .globl szsigcode 890e6594a8SSascha Wildnerszsigcode: 900e6594a8SSascha Wildner .long esigcode - sigcode 91