Home | History | Annotate | Line # | Download | only in prekern
trap.S revision 1.3
      1  1.3  maxv /*	$NetBSD: trap.S,v 1.3 2018/05/25 15:52:11 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.3  maxv IDTVEC(trap10)
     94  1.1  maxv 	TRAPENTRY(T_TSSFLT)
     95  1.3  maxv IDTVEC_END(trap10)
     96  1.1  maxv 
     97  1.3  maxv IDTVEC(trap11)
     98  1.1  maxv 	ZTRAPENTRY(T_SEGNPFLT)
     99  1.3  maxv IDTVEC_END(trap11)
    100  1.1  maxv 
    101  1.3  maxv IDTVEC(trap12)
    102  1.1  maxv 	ZTRAPENTRY(T_STKFLT)
    103  1.3  maxv IDTVEC_END(trap12)
    104  1.1  maxv 
    105  1.3  maxv IDTVEC(trap13)
    106  1.1  maxv 	ZTRAPENTRY(T_PROTFLT)
    107  1.3  maxv IDTVEC_END(trap13)
    108  1.1  maxv 
    109  1.3  maxv IDTVEC(trap14)
    110  1.1  maxv 	TRAPENTRY(T_PAGEFLT)
    111  1.3  maxv IDTVEC_END(trap14)
    112  1.1  maxv 
    113  1.3  maxv IDTVEC(trap15)
    114  1.1  maxv 	ZTRAPENTRY(T_ASTFLT)
    115  1.3  maxv IDTVEC_END(trap15)
    116  1.1  maxv 
    117  1.3  maxv IDTVEC(trap16)
    118  1.1  maxv 	ZTRAPENTRY(T_ARITHTRAP)
    119  1.3  maxv IDTVEC_END(trap16)
    120  1.1  maxv 
    121  1.3  maxv IDTVEC(trap17)
    122  1.1  maxv 	TRAPENTRY(T_ALIGNFLT)
    123  1.3  maxv IDTVEC_END(trap17)
    124  1.1  maxv 
    125  1.3  maxv IDTVEC(trap18)
    126  1.1  maxv 	ZTRAPENTRY(T_MCA)
    127  1.3  maxv IDTVEC_END(trap18)
    128  1.1  maxv 
    129  1.3  maxv IDTVEC(trap19)
    130  1.1  maxv 	ZTRAPENTRY(T_XMM)
    131  1.3  maxv IDTVEC_END(trap19)
    132  1.1  maxv 
    133  1.3  maxv IDTVEC(trap20)
    134  1.3  maxv IDTVEC(trap21)
    135  1.3  maxv IDTVEC(trap22)
    136  1.3  maxv IDTVEC(trap23)
    137  1.3  maxv IDTVEC(trap24)
    138  1.3  maxv IDTVEC(trap25)
    139  1.3  maxv IDTVEC(trap26)
    140  1.3  maxv IDTVEC(trap27)
    141  1.3  maxv IDTVEC(trap28)
    142  1.3  maxv IDTVEC(trap29)
    143  1.3  maxv IDTVEC(trap30)
    144  1.3  maxv IDTVEC(trap31)
    145  1.1  maxv 	/* 20 - 31 reserved for future exp */
    146  1.1  maxv 	ZTRAPENTRY(T_RESERVED)
    147  1.3  maxv IDTVEC_END(trap31)
    148  1.3  maxv IDTVEC_END(trap30)
    149  1.3  maxv IDTVEC_END(trap29)
    150  1.3  maxv IDTVEC_END(trap28)
    151  1.3  maxv IDTVEC_END(trap27)
    152  1.3  maxv IDTVEC_END(trap26)
    153  1.3  maxv IDTVEC_END(trap25)
    154  1.3  maxv IDTVEC_END(trap24)
    155  1.3  maxv IDTVEC_END(trap23)
    156  1.3  maxv IDTVEC_END(trap22)
    157  1.3  maxv IDTVEC_END(trap21)
    158  1.3  maxv IDTVEC_END(trap20)
    159  1.1  maxv 
    160  1.1  maxv /*
    161  1.1  maxv  * Arguments pushed on the stack:
    162  1.2  maxv  *  sf_trapno
    163  1.2  maxv  *  sf_err  (dummy inserted if not defined)
    164  1.2  maxv  *  sf_rip
    165  1.2  maxv  *  sf_cs
    166  1.2  maxv  *  sf_rflags
    167  1.2  maxv  *  sf_rsp
    168  1.2  maxv  *  sf_ss
    169  1.1  maxv  */
    170  1.1  maxv NENTRY(alltraps)
    171  1.1  maxv 	movq	%rsp,%rdi
    172  1.1  maxv 	call	_C_LABEL(trap)
    173  1.1  maxv 	/* NOTREACHED */
    174  1.1  maxv END(alltraps)
    175  1.3  maxv 
    176  1.3  maxv 	.section .rodata
    177  1.3  maxv 
    178  1.3  maxv LABEL(x86_exceptions)
    179  1.3  maxv 	.quad	_C_LABEL(Xtrap00), _C_LABEL(Xtrap01)
    180  1.3  maxv 	.quad	_C_LABEL(Xtrap02), _C_LABEL(Xtrap03)
    181  1.3  maxv 	.quad	_C_LABEL(Xtrap04), _C_LABEL(Xtrap05)
    182  1.3  maxv 	.quad	_C_LABEL(Xtrap06), _C_LABEL(Xtrap07)
    183  1.3  maxv 	.quad	_C_LABEL(Xtrap08), _C_LABEL(Xtrap09)
    184  1.3  maxv 	.quad	_C_LABEL(Xtrap10), _C_LABEL(Xtrap11)
    185  1.3  maxv 	.quad	_C_LABEL(Xtrap12), _C_LABEL(Xtrap13)
    186  1.3  maxv 	.quad	_C_LABEL(Xtrap14), _C_LABEL(Xtrap15)
    187  1.3  maxv 	.quad	_C_LABEL(Xtrap16), _C_LABEL(Xtrap17)
    188  1.3  maxv 	.quad	_C_LABEL(Xtrap18), _C_LABEL(Xtrap19)
    189  1.3  maxv 	.quad	_C_LABEL(Xtrap20), _C_LABEL(Xtrap21)
    190  1.3  maxv 	.quad	_C_LABEL(Xtrap22), _C_LABEL(Xtrap23)
    191  1.3  maxv 	.quad	_C_LABEL(Xtrap24), _C_LABEL(Xtrap25)
    192  1.3  maxv 	.quad	_C_LABEL(Xtrap26), _C_LABEL(Xtrap27)
    193  1.3  maxv 	.quad	_C_LABEL(Xtrap28), _C_LABEL(Xtrap29)
    194  1.3  maxv 	.quad	_C_LABEL(Xtrap30), _C_LABEL(Xtrap31)
    195  1.3  maxv END(x86_exceptions)
    196