18368e25fSAaron LI/* $NetBSD: trap.S,v 1.4 2018/09/08 00:00:00 maxv Exp $ */ 28368e25fSAaron LI 38368e25fSAaron LI/* 48368e25fSAaron LI * Copyright (c) 2018 The NetBSD Foundation, Inc. All rights reserved. 58368e25fSAaron LI * 68368e25fSAaron LI * This code is derived from software contributed to The NetBSD Foundation 78368e25fSAaron LI * by Maxime Villard. 88368e25fSAaron LI * 98368e25fSAaron LI * Redistribution and use in source and binary forms, with or without 108368e25fSAaron LI * modification, are permitted provided that the following conditions 118368e25fSAaron LI * are met: 128368e25fSAaron LI * 1. Redistributions of source code must retain the above copyright 138368e25fSAaron LI * notice, this list of conditions and the following disclaimer. 148368e25fSAaron LI * 2. Redistributions in binary form must reproduce the above copyright 158368e25fSAaron LI * notice, this list of conditions and the following disclaimer in the 168368e25fSAaron LI * documentation and/or other materials provided with the distribution. 178368e25fSAaron LI * 188368e25fSAaron LI * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 198368e25fSAaron LI * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 208368e25fSAaron LI * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 218368e25fSAaron LI * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 228368e25fSAaron LI * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 238368e25fSAaron LI * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 248368e25fSAaron LI * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 258368e25fSAaron LI * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 268368e25fSAaron LI * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 278368e25fSAaron LI * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 288368e25fSAaron LI * POSSIBILITY OF SUCH DAMAGE. 298368e25fSAaron LI */ 308368e25fSAaron LI 313bac6f2aSAaron LI#define _LOCORE 32*20b815aaSAaron LI#define LOCORE /* DragonFly */ 338368e25fSAaron LI 343bac6f2aSAaron LI#include "asm.h" 353bac6f2aSAaron LI#include "trap.h" 368368e25fSAaron LI 378368e25fSAaron LI#define TRAPENTRY(a) \ 388368e25fSAaron LI pushq $(a); \ 398368e25fSAaron LI jmp _C_LABEL(alltraps); 408368e25fSAaron LI 418368e25fSAaron LI#define ZTRAPENTRY(a) \ 428368e25fSAaron LI pushq $0; \ 438368e25fSAaron LI pushq $(a); \ 448368e25fSAaron LI jmp _C_LABEL(alltraps); 458368e25fSAaron LI 468368e25fSAaron LI .text 478368e25fSAaron LI 488368e25fSAaron LIIDTVEC(trap00) 498368e25fSAaron LI ZTRAPENTRY(T_DIVIDE) 508368e25fSAaron LIIDTVEC_END(trap00) 518368e25fSAaron LI 528368e25fSAaron LIIDTVEC(trap01) 538368e25fSAaron LI ZTRAPENTRY(T_TRCTRAP) 548368e25fSAaron LIIDTVEC_END(trap01) 558368e25fSAaron LI 568368e25fSAaron LIIDTVEC(trap02) 578368e25fSAaron LI ZTRAPENTRY(T_NMI) 588368e25fSAaron LIIDTVEC_END(trap02) 598368e25fSAaron LI 608368e25fSAaron LIIDTVEC(trap03) 618368e25fSAaron LI ZTRAPENTRY(T_BPTFLT) 628368e25fSAaron LIIDTVEC_END(trap03) 638368e25fSAaron LI 648368e25fSAaron LIIDTVEC(trap04) 658368e25fSAaron LI ZTRAPENTRY(T_OFLOW) 668368e25fSAaron LIIDTVEC_END(trap04) 678368e25fSAaron LI 688368e25fSAaron LIIDTVEC(trap05) 698368e25fSAaron LI ZTRAPENTRY(T_BOUND) 708368e25fSAaron LIIDTVEC_END(trap05) 718368e25fSAaron LI 728368e25fSAaron LIIDTVEC(trap06) 738368e25fSAaron LI ZTRAPENTRY(T_PRIVINFLT) 748368e25fSAaron LIIDTVEC_END(trap06) 758368e25fSAaron LI 768368e25fSAaron LIIDTVEC(trap07) 778368e25fSAaron LI ZTRAPENTRY(T_DNA) 788368e25fSAaron LIIDTVEC_END(trap07) 798368e25fSAaron LI 808368e25fSAaron LIIDTVEC(trap08) 818368e25fSAaron LI TRAPENTRY(T_DOUBLEFLT) 828368e25fSAaron LIIDTVEC_END(trap08) 838368e25fSAaron LI 848368e25fSAaron LIIDTVEC(trap09) 858368e25fSAaron LI ZTRAPENTRY(T_FPOPFLT) 868368e25fSAaron LIIDTVEC_END(trap09) 878368e25fSAaron LI 888368e25fSAaron LIIDTVEC(trap10) 898368e25fSAaron LI TRAPENTRY(T_TSSFLT) 908368e25fSAaron LIIDTVEC_END(trap10) 918368e25fSAaron LI 928368e25fSAaron LIIDTVEC(trap11) 938368e25fSAaron LI ZTRAPENTRY(T_SEGNPFLT) 948368e25fSAaron LIIDTVEC_END(trap11) 958368e25fSAaron LI 968368e25fSAaron LIIDTVEC(trap12) 978368e25fSAaron LI ZTRAPENTRY(T_STKFLT) 988368e25fSAaron LIIDTVEC_END(trap12) 998368e25fSAaron LI 1008368e25fSAaron LIIDTVEC(trap13) 1018368e25fSAaron LI ZTRAPENTRY(T_PROTFLT) 1028368e25fSAaron LIIDTVEC_END(trap13) 1038368e25fSAaron LI 1048368e25fSAaron LIIDTVEC(trap14) 1058368e25fSAaron LI TRAPENTRY(T_PAGEFLT) 1068368e25fSAaron LIIDTVEC_END(trap14) 1078368e25fSAaron LI 1088368e25fSAaron LIIDTVEC(trap15) 1098368e25fSAaron LI ZTRAPENTRY(T_ASTFLT) 1108368e25fSAaron LIIDTVEC_END(trap15) 1118368e25fSAaron LI 1128368e25fSAaron LIIDTVEC(trap16) 1138368e25fSAaron LI ZTRAPENTRY(T_ARITHTRAP) 1148368e25fSAaron LIIDTVEC_END(trap16) 1158368e25fSAaron LI 1168368e25fSAaron LIIDTVEC(trap17) 1178368e25fSAaron LI TRAPENTRY(T_ALIGNFLT) 1188368e25fSAaron LIIDTVEC_END(trap17) 1198368e25fSAaron LI 1208368e25fSAaron LIIDTVEC(trap18) 1218368e25fSAaron LI ZTRAPENTRY(T_MCA) 1228368e25fSAaron LIIDTVEC_END(trap18) 1238368e25fSAaron LI 1248368e25fSAaron LIIDTVEC(trap19) 1258368e25fSAaron LI ZTRAPENTRY(T_XMM) 1268368e25fSAaron LIIDTVEC_END(trap19) 1278368e25fSAaron LI 1288368e25fSAaron LIIDTVEC(trap20) 1298368e25fSAaron LIIDTVEC(trap21) 1308368e25fSAaron LIIDTVEC(trap22) 1318368e25fSAaron LIIDTVEC(trap23) 1328368e25fSAaron LIIDTVEC(trap24) 1338368e25fSAaron LIIDTVEC(trap25) 1348368e25fSAaron LIIDTVEC(trap26) 1358368e25fSAaron LIIDTVEC(trap27) 1368368e25fSAaron LIIDTVEC(trap28) 1378368e25fSAaron LIIDTVEC(trap29) 1388368e25fSAaron LIIDTVEC(trap30) 1398368e25fSAaron LIIDTVEC(trap31) 1408368e25fSAaron LI /* 20 - 31 reserved for future exp */ 1418368e25fSAaron LI ZTRAPENTRY(T_RESERVED) 1428368e25fSAaron LIIDTVEC_END(trap31) 1438368e25fSAaron LIIDTVEC_END(trap30) 1448368e25fSAaron LIIDTVEC_END(trap29) 1458368e25fSAaron LIIDTVEC_END(trap28) 1468368e25fSAaron LIIDTVEC_END(trap27) 1478368e25fSAaron LIIDTVEC_END(trap26) 1488368e25fSAaron LIIDTVEC_END(trap25) 1498368e25fSAaron LIIDTVEC_END(trap24) 1508368e25fSAaron LIIDTVEC_END(trap23) 1518368e25fSAaron LIIDTVEC_END(trap22) 1528368e25fSAaron LIIDTVEC_END(trap21) 1538368e25fSAaron LIIDTVEC_END(trap20) 1548368e25fSAaron LI 1558368e25fSAaron LIIDTVEC(intr) 1568368e25fSAaron LI ZTRAPENTRY(T_RESERVED) 1578368e25fSAaron LIIDTVEC_END(intr) 1588368e25fSAaron LI 1598368e25fSAaron LI/* 1608368e25fSAaron LI * Arguments pushed on the stack: 1618368e25fSAaron LI * sf_trapno 1628368e25fSAaron LI * sf_err (dummy inserted if not defined) 1638368e25fSAaron LI * sf_rip 1648368e25fSAaron LI * sf_cs 1658368e25fSAaron LI * sf_rflags 1668368e25fSAaron LI * sf_rsp 1678368e25fSAaron LI * sf_ss 1688368e25fSAaron LI */ 1698368e25fSAaron LIENTRY(alltraps) 1708368e25fSAaron LI movq %rsp,%rdi 1718368e25fSAaron LI call _C_LABEL(trap) 1728368e25fSAaron LI /* NOTREACHED */ 1738368e25fSAaron LIEND(alltraps) 1748368e25fSAaron LI 1758368e25fSAaron LI .section .rodata 1768368e25fSAaron LI 1778368e25fSAaron LILABEL(x86_exceptions) 1788368e25fSAaron LI .quad _C_LABEL(Xtrap00), _C_LABEL(Xtrap01) 1798368e25fSAaron LI .quad _C_LABEL(Xtrap02), _C_LABEL(Xtrap03) 1808368e25fSAaron LI .quad _C_LABEL(Xtrap04), _C_LABEL(Xtrap05) 1818368e25fSAaron LI .quad _C_LABEL(Xtrap06), _C_LABEL(Xtrap07) 1828368e25fSAaron LI .quad _C_LABEL(Xtrap08), _C_LABEL(Xtrap09) 1838368e25fSAaron LI .quad _C_LABEL(Xtrap10), _C_LABEL(Xtrap11) 1848368e25fSAaron LI .quad _C_LABEL(Xtrap12), _C_LABEL(Xtrap13) 1858368e25fSAaron LI .quad _C_LABEL(Xtrap14), _C_LABEL(Xtrap15) 1868368e25fSAaron LI .quad _C_LABEL(Xtrap16), _C_LABEL(Xtrap17) 1878368e25fSAaron LI .quad _C_LABEL(Xtrap18), _C_LABEL(Xtrap19) 1888368e25fSAaron LI .quad _C_LABEL(Xtrap20), _C_LABEL(Xtrap21) 1898368e25fSAaron LI .quad _C_LABEL(Xtrap22), _C_LABEL(Xtrap23) 1908368e25fSAaron LI .quad _C_LABEL(Xtrap24), _C_LABEL(Xtrap25) 1918368e25fSAaron LI .quad _C_LABEL(Xtrap26), _C_LABEL(Xtrap27) 1928368e25fSAaron LI .quad _C_LABEL(Xtrap28), _C_LABEL(Xtrap29) 1938368e25fSAaron LI .quad _C_LABEL(Xtrap30), _C_LABEL(Xtrap31) 1948368e25fSAaron LIEND(x86_exceptions) 195