system_calls.py revision 5907:8a633e6a8df1
17635SBrad.Beckmann@amd.com# Copyright (c) 2007 The Hewlett-Packard Development Company 27635SBrad.Beckmann@amd.com# All rights reserved. 37635SBrad.Beckmann@amd.com# 47635SBrad.Beckmann@amd.com# Redistribution and use of this software in source and binary forms, 57635SBrad.Beckmann@amd.com# with or without modification, are permitted provided that the 67635SBrad.Beckmann@amd.com# following conditions are met: 77635SBrad.Beckmann@amd.com# 87635SBrad.Beckmann@amd.com# The software must be used only for Non-Commercial Use which means any 97635SBrad.Beckmann@amd.com# use which is NOT directed to receiving any direct monetary 107635SBrad.Beckmann@amd.com# compensation for, or commercial advantage from such use. Illustrative 117635SBrad.Beckmann@amd.com# examples of non-commercial use are academic research, personal study, 127635SBrad.Beckmann@amd.com# teaching, education and corporate research & development. 137635SBrad.Beckmann@amd.com# Illustrative examples of commercial use are distributing products for 147635SBrad.Beckmann@amd.com# commercial advantage and providing services using the software for 157635SBrad.Beckmann@amd.com# commercial advantage. 167635SBrad.Beckmann@amd.com# 177635SBrad.Beckmann@amd.com# If you wish to use this software or functionality therein that may be 187635SBrad.Beckmann@amd.com# covered by patents for commercial use, please contact: 197635SBrad.Beckmann@amd.com# Director of Intellectual Property Licensing 207635SBrad.Beckmann@amd.com# Office of Strategy and Technology 217635SBrad.Beckmann@amd.com# Hewlett-Packard Company 227635SBrad.Beckmann@amd.com# 1501 Page Mill Road 237635SBrad.Beckmann@amd.com# Palo Alto, California 94304 247635SBrad.Beckmann@amd.com# 257635SBrad.Beckmann@amd.com# Redistributions of source code must retain the above copyright notice, 267635SBrad.Beckmann@amd.com# this list of conditions and the following disclaimer. Redistributions 277635SBrad.Beckmann@amd.com# in binary form must reproduce the above copyright notice, this list of 287635SBrad.Beckmann@amd.com# conditions and the following disclaimer in the documentation and/or 297635SBrad.Beckmann@amd.com# other materials provided with the distribution. Neither the name of 307635SBrad.Beckmann@amd.com# the COPYRIGHT HOLDER(s), HEWLETT-PACKARD COMPANY, nor the names of its 317635SBrad.Beckmann@amd.com# contributors may be used to endorse or promote products derived from 327635SBrad.Beckmann@amd.com# this software without specific prior written permission. No right of 337635SBrad.Beckmann@amd.com# sublicense is granted herewith. Derivatives of the software and 347635SBrad.Beckmann@amd.com# output created using the software may be prepared, but only for 357635SBrad.Beckmann@amd.com# Non-Commercial Uses. Derivatives of the software may be shared with 367635SBrad.Beckmann@amd.com# others provided: (i) the others agree to abide by the list of 377635SBrad.Beckmann@amd.com# conditions herein which includes the Non-Commercial Use restrictions; 389100SBrad.Beckmann@amd.com# and (ii) such Derivatives of the software include the above copyright 397635SBrad.Beckmann@amd.com# notice to acknowledge the contribution from this software where 408928Sandreas.hansson@arm.com# applicable, this list of conditions and the disclaimer below. 417635SBrad.Beckmann@amd.com# 427635SBrad.Beckmann@amd.com# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 437635SBrad.Beckmann@amd.com# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 447635SBrad.Beckmann@amd.com# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 457635SBrad.Beckmann@amd.com# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 467635SBrad.Beckmann@amd.com# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 477635SBrad.Beckmann@amd.com# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 488928Sandreas.hansson@arm.com# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 497635SBrad.Beckmann@amd.com# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 507635SBrad.Beckmann@amd.com# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 517635SBrad.Beckmann@amd.com# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 527635SBrad.Beckmann@amd.com# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 537635SBrad.Beckmann@amd.com# 547635SBrad.Beckmann@amd.com# Authors: Gabe Black 557635SBrad.Beckmann@amd.com 567635SBrad.Beckmann@amd.commicrocode = ''' 578436SBrad.Beckmann@amd.comdef macroop SYSCALL_64 588436SBrad.Beckmann@amd.com{ 598436SBrad.Beckmann@amd.com # All 1s. 608436SBrad.Beckmann@amd.com limm t1, "(uint64_t)(-1)" 617635SBrad.Beckmann@amd.com 627635SBrad.Beckmann@amd.com # Save the next RIP. 637635SBrad.Beckmann@amd.com rdip rcx 647635SBrad.Beckmann@amd.com 657635SBrad.Beckmann@amd.com # Stick rflags with RF masked into r11. 667635SBrad.Beckmann@amd.com rflags t2 677635SBrad.Beckmann@amd.com limm t3, "~RFBit" 687635SBrad.Beckmann@amd.com andi r11, t2, t3, dataSize=8 697635SBrad.Beckmann@amd.com 707635SBrad.Beckmann@amd.com rdval t3, star 717635SBrad.Beckmann@amd.com srli t3, t3, 32, dataSize=8 727635SBrad.Beckmann@amd.com andi t3, t3, 0xFC, dataSize=1 737635SBrad.Beckmann@amd.com 747635SBrad.Beckmann@amd.com # Set up CS. 757635SBrad.Beckmann@amd.com wrsel cs, t3 767635SBrad.Beckmann@amd.com wrbase cs, t0, dataSize=8 777635SBrad.Beckmann@amd.com wrlimit cs, t1, dataSize=4 787635SBrad.Beckmann@amd.com # Not writable, read/execute-able, not expandDown, 797635SBrad.Beckmann@amd.com # dpl=0, defaultSize=0, long mode 807635SBrad.Beckmann@amd.com limm t4, ((0 << 0) | (1 << 1) | (0 << 2) | \ 817635SBrad.Beckmann@amd.com (0 << 3) | (0 << 5) | (1 << 6)) 827635SBrad.Beckmann@amd.com wrattr cs, t4 837635SBrad.Beckmann@amd.com 847635SBrad.Beckmann@amd.com # Set up SS. 857635SBrad.Beckmann@amd.com addi t3, t3, 8 867635SBrad.Beckmann@amd.com wrsel ss, t3 877635SBrad.Beckmann@amd.com wrbase ss, t0, dataSize=8 887635SBrad.Beckmann@amd.com wrlimit ss, t1, dataSize=4 897635SBrad.Beckmann@amd.com # Writable, readable, not expandDown, 907635SBrad.Beckmann@amd.com # dpl=0, defaultSize=0, not long mode 917635SBrad.Beckmann@amd.com limm t4, ((1 << 0) | (1 << 1) | (0 << 2) | \ 927635SBrad.Beckmann@amd.com (0 << 3) | (0 << 5) | (0 << 6)) 937635SBrad.Beckmann@amd.com wrattr ss, t4 947635SBrad.Beckmann@amd.com 957635SBrad.Beckmann@amd.com # Set the new rip. 968436SBrad.Beckmann@amd.com rdval t7, lstar 977635SBrad.Beckmann@amd.com wrip t0, t7 988437SBrad.Beckmann@amd.com 998437SBrad.Beckmann@amd.com # Mask the flags against sf_mask and leave RF turned off. 1008437SBrad.Beckmann@amd.com rdval t3, sf_mask, dataSize=8 1018437SBrad.Beckmann@amd.com xor t3, t3, t1, dataSize=8 1028437SBrad.Beckmann@amd.com and t3, t3, r11, dataSize=8 1038437SBrad.Beckmann@amd.com wrflags t3, t0 1048436SBrad.Beckmann@amd.com}; 1057635SBrad.Beckmann@amd.com 1067635SBrad.Beckmann@amd.comdef macroop SYSCALL_COMPAT 1077635SBrad.Beckmann@amd.com{ 1088931Sandreas.hansson@arm.com # All 1s. 1099120Sandreas.hansson@arm.com limm t1, "(uint64_t)(-1)" 1109793Sakash.bagdia@arm.com 1119909Snilay@cs.wisc.edu # Save the next RIP. 1129909Snilay@cs.wisc.edu rdip rcx 1137635SBrad.Beckmann@amd.com 1147635SBrad.Beckmann@amd.com # Stick rflags with RF masked into r11. 1158437SBrad.Beckmann@amd.com rflags t2 1168437SBrad.Beckmann@amd.com limm t3, "~RFBit" 1178437SBrad.Beckmann@amd.com andi r11, t2, t3, dataSize=8 1188437SBrad.Beckmann@amd.com 1198437SBrad.Beckmann@amd.com rdval t3, star 1208437SBrad.Beckmann@amd.com srli t3, t3, 32, dataSize=8 1218929Snilay@cs.wisc.edu andi t3, t3, 0xFC, dataSize=1 1228929Snilay@cs.wisc.edu 1237635SBrad.Beckmann@amd.com # Set up CS. 1247635SBrad.Beckmann@amd.com wrsel cs, t3 1257635SBrad.Beckmann@amd.com wrbase cs, t0, dataSize=8 1267635SBrad.Beckmann@amd.com wrlimit cs, t1, dataSize=4 1277635SBrad.Beckmann@amd.com # Not writable, read/execute-able, not expandDown, 1288929Snilay@cs.wisc.edu # dpl=0, defaultSize=0, long mode 1298929Snilay@cs.wisc.edu limm t4, ((0 << 0) | (1 << 1) | (0 << 2) | \ 1308929Snilay@cs.wisc.edu (0 << 3) | (0 << 5) | (1 << 6)) 1318929Snilay@cs.wisc.edu wrattr cs, t4 1327635SBrad.Beckmann@amd.com 1339909Snilay@cs.wisc.edu # Set up SS. 1349909Snilay@cs.wisc.edu addi t3, t3, 8 1359909Snilay@cs.wisc.edu wrsel ss, t3 1369909Snilay@cs.wisc.edu wrbase ss, t0, dataSize=8 1379793Sakash.bagdia@arm.com wrlimit ss, t1, dataSize=4 1389909Snilay@cs.wisc.edu # Writable, readable, not expandDown, 1399909Snilay@cs.wisc.edu # dpl=0, defaultSize=0, not long mode 1409793Sakash.bagdia@arm.com limm t4, ((1 << 0) | (1 << 1) | (0 << 2) | \ 1417635SBrad.Beckmann@amd.com (0 << 3) | (0 << 5) | (0 << 6)) 1427635SBrad.Beckmann@amd.com wrattr ss, t4 1437635SBrad.Beckmann@amd.com 1447635SBrad.Beckmann@amd.com # Set the new rip. 1457635SBrad.Beckmann@amd.com rdval t7, cstar 1467635SBrad.Beckmann@amd.com wrip t0, t7 1478322Ssteve.reinhardt@amd.com 1487635SBrad.Beckmann@amd.com # Mask the flags against sf_mask and leave RF turned off. 1497635SBrad.Beckmann@amd.com rdval t3, sf_mask, dataSize=8 1507635SBrad.Beckmann@amd.com xor t3, t3, t1, dataSize=8 1517635SBrad.Beckmann@amd.com and t3, t3, r11, dataSize=8 1527635SBrad.Beckmann@amd.com wrflags t3, t0 1538845Sandreas.hansson@arm.com}; 1549120Sandreas.hansson@arm.com 1557635SBrad.Beckmann@amd.comdef macroop SYSCALL_LEGACY 1567938SBrad.Beckmann@amd.com{ 1577938SBrad.Beckmann@amd.com panic "The syscall instruction isn't implemented in legacy mode." 1587938SBrad.Beckmann@amd.com}; 1597938SBrad.Beckmann@amd.com''' 1608322Ssteve.reinhardt@amd.com#let {{ 1617938SBrad.Beckmann@amd.com# class SYSENTER(Inst): 1628436SBrad.Beckmann@amd.com# "GenFault ${new UnimpInstFault}" 1638436SBrad.Beckmann@amd.com# class SYSEXIT(Inst): 1648436SBrad.Beckmann@amd.com# "GenFault ${new UnimpInstFault}" 1658436SBrad.Beckmann@amd.com# class SYSRET(Inst): 1668436SBrad.Beckmann@amd.com# "GenFault ${new UnimpInstFault}" 1678436SBrad.Beckmann@amd.com#}}; 1687635SBrad.Beckmann@amd.com