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