1/* $NetBSD: trap.S,v 1.4 2018/09/08 00:00:00 maxv Exp $ */ 2 3/* 4 * Copyright (c) 2018 The NetBSD Foundation, Inc. All rights reserved. 5 * 6 * This code is derived from software contributed to The NetBSD Foundation 7 * by Maxime Villard. 8 * 9 * Redistribution and use in source and binary forms, with or without 10 * modification, are permitted provided that the following conditions 11 * are met: 12 * 1. Redistributions of source code must retain the above copyright 13 * notice, this list of conditions and the following disclaimer. 14 * 2. Redistributions in binary form must reproduce the above copyright 15 * notice, this list of conditions and the following disclaimer in the 16 * documentation and/or other materials provided with the distribution. 17 * 18 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 19 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 20 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 21 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 22 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 23 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 24 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 25 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 26 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 27 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 28 * POSSIBILITY OF SUCH DAMAGE. 29 */ 30 31#define _LOCORE 32#define LOCORE /* DragonFly */ 33 34#include "asm.h" 35#include "trap.h" 36 37#define TRAPENTRY(a) \ 38 pushq $(a); \ 39 jmp _C_LABEL(alltraps); 40 41#define ZTRAPENTRY(a) \ 42 pushq $0; \ 43 pushq $(a); \ 44 jmp _C_LABEL(alltraps); 45 46 .text 47 48IDTVEC(trap00) 49 ZTRAPENTRY(T_DIVIDE) 50IDTVEC_END(trap00) 51 52IDTVEC(trap01) 53 ZTRAPENTRY(T_TRCTRAP) 54IDTVEC_END(trap01) 55 56IDTVEC(trap02) 57 ZTRAPENTRY(T_NMI) 58IDTVEC_END(trap02) 59 60IDTVEC(trap03) 61 ZTRAPENTRY(T_BPTFLT) 62IDTVEC_END(trap03) 63 64IDTVEC(trap04) 65 ZTRAPENTRY(T_OFLOW) 66IDTVEC_END(trap04) 67 68IDTVEC(trap05) 69 ZTRAPENTRY(T_BOUND) 70IDTVEC_END(trap05) 71 72IDTVEC(trap06) 73 ZTRAPENTRY(T_PRIVINFLT) 74IDTVEC_END(trap06) 75 76IDTVEC(trap07) 77 ZTRAPENTRY(T_DNA) 78IDTVEC_END(trap07) 79 80IDTVEC(trap08) 81 TRAPENTRY(T_DOUBLEFLT) 82IDTVEC_END(trap08) 83 84IDTVEC(trap09) 85 ZTRAPENTRY(T_FPOPFLT) 86IDTVEC_END(trap09) 87 88IDTVEC(trap10) 89 TRAPENTRY(T_TSSFLT) 90IDTVEC_END(trap10) 91 92IDTVEC(trap11) 93 ZTRAPENTRY(T_SEGNPFLT) 94IDTVEC_END(trap11) 95 96IDTVEC(trap12) 97 ZTRAPENTRY(T_STKFLT) 98IDTVEC_END(trap12) 99 100IDTVEC(trap13) 101 ZTRAPENTRY(T_PROTFLT) 102IDTVEC_END(trap13) 103 104IDTVEC(trap14) 105 TRAPENTRY(T_PAGEFLT) 106IDTVEC_END(trap14) 107 108IDTVEC(trap15) 109 ZTRAPENTRY(T_ASTFLT) 110IDTVEC_END(trap15) 111 112IDTVEC(trap16) 113 ZTRAPENTRY(T_ARITHTRAP) 114IDTVEC_END(trap16) 115 116IDTVEC(trap17) 117 TRAPENTRY(T_ALIGNFLT) 118IDTVEC_END(trap17) 119 120IDTVEC(trap18) 121 ZTRAPENTRY(T_MCA) 122IDTVEC_END(trap18) 123 124IDTVEC(trap19) 125 ZTRAPENTRY(T_XMM) 126IDTVEC_END(trap19) 127 128IDTVEC(trap20) 129IDTVEC(trap21) 130IDTVEC(trap22) 131IDTVEC(trap23) 132IDTVEC(trap24) 133IDTVEC(trap25) 134IDTVEC(trap26) 135IDTVEC(trap27) 136IDTVEC(trap28) 137IDTVEC(trap29) 138IDTVEC(trap30) 139IDTVEC(trap31) 140 /* 20 - 31 reserved for future exp */ 141 ZTRAPENTRY(T_RESERVED) 142IDTVEC_END(trap31) 143IDTVEC_END(trap30) 144IDTVEC_END(trap29) 145IDTVEC_END(trap28) 146IDTVEC_END(trap27) 147IDTVEC_END(trap26) 148IDTVEC_END(trap25) 149IDTVEC_END(trap24) 150IDTVEC_END(trap23) 151IDTVEC_END(trap22) 152IDTVEC_END(trap21) 153IDTVEC_END(trap20) 154 155IDTVEC(intr) 156 ZTRAPENTRY(T_RESERVED) 157IDTVEC_END(intr) 158 159/* 160 * Arguments pushed on the stack: 161 * sf_trapno 162 * sf_err (dummy inserted if not defined) 163 * sf_rip 164 * sf_cs 165 * sf_rflags 166 * sf_rsp 167 * sf_ss 168 */ 169ENTRY(alltraps) 170 movq %rsp,%rdi 171 call _C_LABEL(trap) 172 /* NOTREACHED */ 173END(alltraps) 174 175 .section .rodata 176 177LABEL(x86_exceptions) 178 .quad _C_LABEL(Xtrap00), _C_LABEL(Xtrap01) 179 .quad _C_LABEL(Xtrap02), _C_LABEL(Xtrap03) 180 .quad _C_LABEL(Xtrap04), _C_LABEL(Xtrap05) 181 .quad _C_LABEL(Xtrap06), _C_LABEL(Xtrap07) 182 .quad _C_LABEL(Xtrap08), _C_LABEL(Xtrap09) 183 .quad _C_LABEL(Xtrap10), _C_LABEL(Xtrap11) 184 .quad _C_LABEL(Xtrap12), _C_LABEL(Xtrap13) 185 .quad _C_LABEL(Xtrap14), _C_LABEL(Xtrap15) 186 .quad _C_LABEL(Xtrap16), _C_LABEL(Xtrap17) 187 .quad _C_LABEL(Xtrap18), _C_LABEL(Xtrap19) 188 .quad _C_LABEL(Xtrap20), _C_LABEL(Xtrap21) 189 .quad _C_LABEL(Xtrap22), _C_LABEL(Xtrap23) 190 .quad _C_LABEL(Xtrap24), _C_LABEL(Xtrap25) 191 .quad _C_LABEL(Xtrap26), _C_LABEL(Xtrap27) 192 .quad _C_LABEL(Xtrap28), _C_LABEL(Xtrap29) 193 .quad _C_LABEL(Xtrap30), _C_LABEL(Xtrap31) 194END(x86_exceptions) 195