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