Annotation of kernel/machdep/i386/pc_support/PCtaskInline.h, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
                      3:  *
                      4:  * @APPLE_LICENSE_HEADER_START@
                      5:  * 
                      6:  * Portions Copyright (c) 1999 Apple Computer, Inc.  All Rights
                      7:  * Reserved.  This file contains Original Code and/or Modifications of
                      8:  * Original Code as defined in and that are subject to the Apple Public
                      9:  * Source License Version 1.1 (the "License").  You may not use this file
                     10:  * except in compliance with the License.  Please obtain a copy of the
                     11:  * License at http://www.apple.com/publicsource and read it before using
                     12:  * this file.
                     13:  * 
                     14:  * The Original Code and all software distributed under the License are
                     15:  * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
                     16:  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
                     17:  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
                     18:  * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
                     19:  * License for the specific language governing rights and limitations
                     20:  * under the License.
                     21:  * 
                     22:  * @APPLE_LICENSE_HEADER_END@
                     23:  */
                     24: 
                     25: /*
                     26:  * Copyright (c) 1993 NeXT Computer, Inc.
                     27:  *
                     28:  * Inline functions to access the task address space.
                     29:  *
                     30:  * HISTORY
                     31:  *
                     32:  * 15 Jan 1993 ? at NeXT
                     33:  *     Created.
                     34:  */
                     35: 
                     36: #if    KERNEL_PRIVATE
                     37: 
                     38: #import <mach/mach_types.h>
                     39: 
                     40: static __inline__
                     41: boolean_t
                     42: fetchByte(
                     43:     thread_t                   thread,
                     44:     vm_offset_t                        address,
                     45:     unsigned char              *data
                     46: )
                     47: {    
                     48:     thread->recover = (vm_offset_t)&&fault;
                     49: 
                     50:     asm volatile(
                     51:        "movb %%fs:%1,%0"
                     52:                : "=q" (*data)
                     53:                : "m" (*(unsigned char *)address));
                     54:                                
                     55:     thread->recover = 0;
                     56:     return (TRUE);
                     57:     
                     58: fault:
                     59:     thread->recover = 0;
                     60:     return (FALSE);
                     61: }
                     62: 
                     63: static __inline__
                     64: boolean_t
                     65: fetch2Byte(
                     66:     thread_t                   thread,
                     67:     vm_offset_t                        address,
                     68:     unsigned short             *data
                     69: )
                     70: {    
                     71:     thread->recover = (vm_offset_t)&&fault;
                     72:     
                     73:     asm volatile(
                     74:        "movw %%fs:%1,%0"
                     75:                : "=q" (*data)
                     76:                : "m" (*(unsigned short *)address));
                     77:                
                     78:     thread->recover = 0;
                     79:     return (TRUE);
                     80:     
                     81: fault:
                     82:     thread->recover = 0;
                     83:     return (FALSE);
                     84: }
                     85: 
                     86: static __inline__
                     87: boolean_t
                     88: store2Byte(
                     89:     thread_t                   thread,
                     90:     vm_offset_t                        address,
                     91:     unsigned short             data
                     92: )
                     93: {
                     94:     thread->recover = (vm_offset_t)&&fault;
                     95:     
                     96:     asm volatile(
                     97:        "movw %0,%%fs:%1"
                     98:                :
                     99:                : "r" (data), "m" (*(unsigned short *)address));
                    100:                
                    101:     thread->recover = 0;
                    102:     return (TRUE);
                    103:     
                    104: fault:
                    105:     thread->recover = 0;
                    106:     return (FALSE);
                    107: }
                    108: 
                    109: static __inline__
                    110: boolean_t
                    111: fetch4Byte(
                    112:     thread_t                   thread,
                    113:     vm_offset_t                        address,
                    114:     unsigned long              *data
                    115: )
                    116: {    
                    117:     thread->recover = (vm_offset_t)&&fault;
                    118:     
                    119:     asm volatile(
                    120:        "movl %%fs:%1,%0"
                    121:                : "=r" (*data)
                    122:                : "m" (*(unsigned long *)address));
                    123:                
                    124:     thread->recover = 0;
                    125:     return (TRUE);
                    126:     
                    127: fault:
                    128:     thread->recover = 0;
                    129:     return (FALSE);
                    130: }
                    131: 
                    132: static __inline__
                    133: boolean_t
                    134: store4Byte(
                    135:     thread_t                   thread,
                    136:     vm_offset_t                        address,
                    137:     unsigned long              data
                    138: )
                    139: {
                    140:     thread->recover = (vm_offset_t)&&fault;
                    141:     
                    142:     asm volatile(
                    143:        "movl %0,%%fs:%1"
                    144:                :
                    145:                : "r" (data), "m" (*(unsigned long *)address));
                    146:                
                    147:     thread->recover = 0;
                    148:     return (TRUE);
                    149:     
                    150: fault:
                    151:     thread->recover = 0;
                    152:     return (FALSE);
                    153: }
                    154: 
                    155: static __inline__
                    156: boolean_t
                    157: fetch8Byte(
                    158:     thread_t                   thread,
                    159:     vm_offset_t                        address,
                    160:     void                       *data
                    161: )
                    162: {
                    163:     thread->recover = (vm_offset_t)&&fault;
                    164:     
                    165:     asm volatile(
                    166:        "movl %%fs:%1,%0"
                    167:                : "=r" ( *(unsigned long *)data )
                    168:                : "m" ( *(unsigned long *)address ));
                    169:     asm volatile(
                    170:        "movl %%fs:%1,%0"
                    171:                : "=r" ( *(((unsigned long *)data)+1) )
                    172:                : "m" ( *(((unsigned long *)address)+1) ));
                    173:                
                    174:     thread->recover = 0;
                    175:     return (TRUE);
                    176:     
                    177: fault:
                    178:     thread->recover = 0;
                    179:     return (FALSE);
                    180: }
                    181: 
                    182: #endif

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.