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