Home | History | Annotate | Line # | Download | only in prekern
trap.S revision 1.1
      1  1.1  maxv /*	$NetBSD: trap.S,v 1.1 2017/10/10 09:29:14 maxv Exp $	*/
      2  1.1  maxv 
      3  1.1  maxv /*
      4  1.1  maxv  * Copyright (c) 2017 The NetBSD Foundation, Inc. All rights reserved.
      5  1.1  maxv  *
      6  1.1  maxv  * This code is derived from software contributed to The NetBSD Foundation
      7  1.1  maxv  * by Maxime Villard.
      8  1.1  maxv  *
      9  1.1  maxv  * Redistribution and use in source and binary forms, with or without
     10  1.1  maxv  * modification, are permitted provided that the following conditions
     11  1.1  maxv  * are met:
     12  1.1  maxv  * 1. Redistributions of source code must retain the above copyright
     13  1.1  maxv  *    notice, this list of conditions and the following disclaimer.
     14  1.1  maxv  * 2. Redistributions in binary form must reproduce the above copyright
     15  1.1  maxv  *    notice, this list of conditions and the following disclaimer in the
     16  1.1  maxv  *    documentation and/or other materials provided with the distribution.
     17  1.1  maxv  *
     18  1.1  maxv  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
     19  1.1  maxv  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
     20  1.1  maxv  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     21  1.1  maxv  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
     22  1.1  maxv  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     23  1.1  maxv  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     24  1.1  maxv  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     25  1.1  maxv  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
     26  1.1  maxv  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     27  1.1  maxv  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     28  1.1  maxv  * POSSIBILITY OF SUCH DAMAGE.
     29  1.1  maxv  */
     30  1.1  maxv 
     31  1.1  maxv #define _KERNEL
     32  1.1  maxv 
     33  1.1  maxv /* Override user-land alignment before including asm.h */
     34  1.1  maxv #define	ALIGN_DATA	.align	8
     35  1.1  maxv #define ALIGN_TEXT	.align 16,0x90
     36  1.1  maxv #define _ALIGN_TEXT	ALIGN_TEXT
     37  1.1  maxv 
     38  1.1  maxv #include <machine/asm.h>
     39  1.1  maxv 
     40  1.1  maxv #include <machine/trap.h>
     41  1.1  maxv 
     42  1.1  maxv #define	TRAPENTRY(a) \
     43  1.1  maxv 	pushq $(a); \
     44  1.1  maxv 	jmp _C_LABEL(alltraps);
     45  1.1  maxv 
     46  1.1  maxv #define	ZTRAPENTRY(a) \
     47  1.1  maxv 	pushq $0; \
     48  1.1  maxv 	pushq $(a); \
     49  1.1  maxv 	jmp _C_LABEL(alltraps);
     50  1.1  maxv 
     51  1.1  maxv 	.text
     52  1.1  maxv 
     53  1.1  maxv IDTVEC(trap00)
     54  1.1  maxv 	ZTRAPENTRY(T_DIVIDE)
     55  1.1  maxv IDTVEC_END(trap00)
     56  1.1  maxv 
     57  1.1  maxv IDTVEC(trap01)
     58  1.1  maxv 	ZTRAPENTRY(T_TRCTRAP)
     59  1.1  maxv IDTVEC_END(trap01)
     60  1.1  maxv 
     61  1.1  maxv IDTVEC(trap02)
     62  1.1  maxv 	ZTRAPENTRY(T_NMI)
     63  1.1  maxv IDTVEC_END(trap02)
     64  1.1  maxv 
     65  1.1  maxv IDTVEC(trap03)
     66  1.1  maxv 	ZTRAPENTRY(T_BPTFLT)
     67  1.1  maxv IDTVEC_END(trap03)
     68  1.1  maxv 
     69  1.1  maxv IDTVEC(trap04)
     70  1.1  maxv 	ZTRAPENTRY(T_OFLOW)
     71  1.1  maxv IDTVEC_END(trap04)
     72  1.1  maxv 
     73  1.1  maxv IDTVEC(trap05)
     74  1.1  maxv 	ZTRAPENTRY(T_BOUND)
     75  1.1  maxv IDTVEC_END(trap05)
     76  1.1  maxv 
     77  1.1  maxv IDTVEC(trap06)
     78  1.1  maxv 	ZTRAPENTRY(T_PRIVINFLT)
     79  1.1  maxv IDTVEC_END(trap06)
     80  1.1  maxv 
     81  1.1  maxv IDTVEC(trap07)
     82  1.1  maxv 	ZTRAPENTRY(T_DNA)
     83  1.1  maxv IDTVEC_END(trap07)
     84  1.1  maxv 
     85  1.1  maxv IDTVEC(trap08)
     86  1.1  maxv 	TRAPENTRY(T_DOUBLEFLT)
     87  1.1  maxv IDTVEC_END(trap08)
     88  1.1  maxv 
     89  1.1  maxv IDTVEC(trap09)
     90  1.1  maxv 	ZTRAPENTRY(T_FPOPFLT)
     91  1.1  maxv IDTVEC_END(trap09)
     92  1.1  maxv 
     93  1.1  maxv IDTVEC(trap0a)
     94  1.1  maxv 	TRAPENTRY(T_TSSFLT)
     95  1.1  maxv IDTVEC_END(trap0a)
     96  1.1  maxv 
     97  1.1  maxv IDTVEC(trap0b)		/* #NP() Segment not present */
     98  1.1  maxv 	ZTRAPENTRY(T_SEGNPFLT)
     99  1.1  maxv IDTVEC_END(trap0b)
    100  1.1  maxv 
    101  1.1  maxv IDTVEC(trap0c)		/* #SS() Stack exception */
    102  1.1  maxv 	ZTRAPENTRY(T_STKFLT)
    103  1.1  maxv IDTVEC_END(trap0c)
    104  1.1  maxv 
    105  1.1  maxv IDTVEC(trap0d)		/* #GP() General protection */
    106  1.1  maxv 	ZTRAPENTRY(T_PROTFLT)
    107  1.1  maxv IDTVEC_END(trap0d)
    108  1.1  maxv 
    109  1.1  maxv IDTVEC(trap0e)
    110  1.1  maxv 	TRAPENTRY(T_PAGEFLT)
    111  1.1  maxv IDTVEC_END(trap0e)
    112  1.1  maxv 
    113  1.1  maxv IDTVEC(trap0f)
    114  1.1  maxv 	ZTRAPENTRY(T_ASTFLT)
    115  1.1  maxv IDTVEC_END(trap0f)
    116  1.1  maxv 
    117  1.1  maxv IDTVEC(trap10)
    118  1.1  maxv 	ZTRAPENTRY(T_ARITHTRAP)
    119  1.1  maxv IDTVEC_END(trap10)
    120  1.1  maxv 
    121  1.1  maxv IDTVEC(trap11)
    122  1.1  maxv 	TRAPENTRY(T_ALIGNFLT)
    123  1.1  maxv IDTVEC_END(trap11)
    124  1.1  maxv 
    125  1.1  maxv IDTVEC(trap12)
    126  1.1  maxv 	ZTRAPENTRY(T_MCA)
    127  1.1  maxv IDTVEC_END(trap12)
    128  1.1  maxv 
    129  1.1  maxv IDTVEC(trap13)
    130  1.1  maxv 	ZTRAPENTRY(T_XMM)
    131  1.1  maxv IDTVEC_END(trap13)
    132  1.1  maxv 
    133  1.1  maxv IDTVEC(trap14)
    134  1.1  maxv IDTVEC(trap15)
    135  1.1  maxv IDTVEC(trap16)
    136  1.1  maxv IDTVEC(trap17)
    137  1.1  maxv IDTVEC(trap18)
    138  1.1  maxv IDTVEC(trap19)
    139  1.1  maxv IDTVEC(trap1a)
    140  1.1  maxv IDTVEC(trap1b)
    141  1.1  maxv IDTVEC(trap1c)
    142  1.1  maxv IDTVEC(trap1d)
    143  1.1  maxv IDTVEC(trap1e)
    144  1.1  maxv IDTVEC(trap1f)
    145  1.1  maxv 	/* 20 - 31 reserved for future exp */
    146  1.1  maxv 	ZTRAPENTRY(T_RESERVED)
    147  1.1  maxv IDTVEC_END(trap1f)
    148  1.1  maxv IDTVEC_END(trap1e)
    149  1.1  maxv IDTVEC_END(trap1d)
    150  1.1  maxv IDTVEC_END(trap1c)
    151  1.1  maxv IDTVEC_END(trap1b)
    152  1.1  maxv IDTVEC_END(trap1a)
    153  1.1  maxv IDTVEC_END(trap19)
    154  1.1  maxv IDTVEC_END(trap18)
    155  1.1  maxv IDTVEC_END(trap17)
    156  1.1  maxv IDTVEC_END(trap16)
    157  1.1  maxv IDTVEC_END(trap15)
    158  1.1  maxv IDTVEC_END(trap14)
    159  1.1  maxv 
    160  1.1  maxv IDTVEC(exceptions)
    161  1.1  maxv 	.quad	_C_LABEL(Xtrap00), _C_LABEL(Xtrap01)
    162  1.1  maxv 	.quad	_C_LABEL(Xtrap02), _C_LABEL(Xtrap03)
    163  1.1  maxv 	.quad	_C_LABEL(Xtrap04), _C_LABEL(Xtrap05)
    164  1.1  maxv 	.quad	_C_LABEL(Xtrap06), _C_LABEL(Xtrap07)
    165  1.1  maxv 	.quad	_C_LABEL(Xtrap08), _C_LABEL(Xtrap09)
    166  1.1  maxv 	.quad	_C_LABEL(Xtrap0a), _C_LABEL(Xtrap0b)
    167  1.1  maxv 	.quad	_C_LABEL(Xtrap0c), _C_LABEL(Xtrap0d)
    168  1.1  maxv 	.quad	_C_LABEL(Xtrap0e), _C_LABEL(Xtrap0f)
    169  1.1  maxv 	.quad	_C_LABEL(Xtrap10), _C_LABEL(Xtrap11)
    170  1.1  maxv 	.quad	_C_LABEL(Xtrap12), _C_LABEL(Xtrap13)
    171  1.1  maxv 	.quad	_C_LABEL(Xtrap14), _C_LABEL(Xtrap15)
    172  1.1  maxv 	.quad	_C_LABEL(Xtrap16), _C_LABEL(Xtrap17)
    173  1.1  maxv 	.quad	_C_LABEL(Xtrap18), _C_LABEL(Xtrap19)
    174  1.1  maxv 	.quad	_C_LABEL(Xtrap1a), _C_LABEL(Xtrap1b)
    175  1.1  maxv 	.quad	_C_LABEL(Xtrap1c), _C_LABEL(Xtrap1d)
    176  1.1  maxv 	.quad	_C_LABEL(Xtrap1e), _C_LABEL(Xtrap1f)
    177  1.1  maxv IDTVEC_END(exceptions)
    178  1.1  maxv 
    179  1.1  maxv /*
    180  1.1  maxv  * Arguments pushed on the stack:
    181  1.1  maxv  *  tf_trapno
    182  1.1  maxv  *  tf_err: Dummy inserted if not defined
    183  1.1  maxv  *  tf_rip
    184  1.1  maxv  *  tf_cs
    185  1.1  maxv  *  tf_rflags
    186  1.1  maxv  *  tf_rsp
    187  1.1  maxv  *  tf_ss
    188  1.1  maxv  */
    189  1.1  maxv 
    190  1.1  maxv NENTRY(alltraps)
    191  1.1  maxv 	movq	%rsp,%rdi
    192  1.1  maxv 	call	_C_LABEL(trap)
    193  1.1  maxv 	/* NOTREACHED */
    194  1.1  maxv END(alltraps)
    195