operatingsystem.hh revision 3113
13113Sgblack@eecs.umich.edu/* 23113Sgblack@eecs.umich.edu * Copyright (c) 2004-2005 The Regents of The University of Michigan 33113Sgblack@eecs.umich.edu * All rights reserved. 43113Sgblack@eecs.umich.edu * 53113Sgblack@eecs.umich.edu * Redistribution and use in source and binary forms, with or without 63113Sgblack@eecs.umich.edu * modification, are permitted provided that the following conditions are 73113Sgblack@eecs.umich.edu * met: redistributions of source code must retain the above copyright 83113Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer; 93113Sgblack@eecs.umich.edu * redistributions in binary form must reproduce the above copyright 103113Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer in the 113113Sgblack@eecs.umich.edu * documentation and/or other materials provided with the distribution; 123113Sgblack@eecs.umich.edu * neither the name of the copyright holders nor the names of its 133113Sgblack@eecs.umich.edu * contributors may be used to endorse or promote products derived from 143113Sgblack@eecs.umich.edu * this software without specific prior written permission. 153113Sgblack@eecs.umich.edu * 163113Sgblack@eecs.umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 173113Sgblack@eecs.umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 183113Sgblack@eecs.umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 193113Sgblack@eecs.umich.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 203113Sgblack@eecs.umich.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 213113Sgblack@eecs.umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 223113Sgblack@eecs.umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 233113Sgblack@eecs.umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 243113Sgblack@eecs.umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 253113Sgblack@eecs.umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 263113Sgblack@eecs.umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 273113Sgblack@eecs.umich.edu * 283113Sgblack@eecs.umich.edu * Authors: Gabe Black 293113Sgblack@eecs.umich.edu */ 303113Sgblack@eecs.umich.edu 313113Sgblack@eecs.umich.edu#ifndef __KERN_OPERATINGSYSTEM_HH__ 323113Sgblack@eecs.umich.edu#define __KERN_OPERATINGSYSTEM_HH__ 333113Sgblack@eecs.umich.edu 343113Sgblack@eecs.umich.edu#include "config/full_system.hh" 353113Sgblack@eecs.umich.edu 363113Sgblack@eecs.umich.edu#include <inttypes.h> 373113Sgblack@eecs.umich.edu 383113Sgblack@eecs.umich.edu#if FULL_SYSTEM 393113Sgblack@eecs.umich.edu 403113Sgblack@eecs.umich.educlass OperatingSystem {}; 413113Sgblack@eecs.umich.edu 423113Sgblack@eecs.umich.edu#else //!FULL_SYSTEM 433113Sgblack@eecs.umich.edu 443113Sgblack@eecs.umich.edu/// This struct is used to build an target-OS-dependent table that 453113Sgblack@eecs.umich.edu/// maps the target's open() flags to the host open() flags. 463113Sgblack@eecs.umich.edustruct OpenFlagTransTable { 473113Sgblack@eecs.umich.edu int tgtFlag; //!< Target system flag value. 483113Sgblack@eecs.umich.edu int hostFlag; //!< Corresponding host system flag value. 493113Sgblack@eecs.umich.edu}; 503113Sgblack@eecs.umich.edu 513113Sgblack@eecs.umich.edu 523113Sgblack@eecs.umich.edu/// 533113Sgblack@eecs.umich.edu/// This class encapsulates the types, structures, constants, 543113Sgblack@eecs.umich.edu/// functions, and syscall-number mappings specific to an operating system 553113Sgblack@eecs.umich.edu/// syscall interface. 563113Sgblack@eecs.umich.edu/// 573113Sgblack@eecs.umich.educlass OperatingSystem { 583113Sgblack@eecs.umich.edu 593113Sgblack@eecs.umich.edu public: 603113Sgblack@eecs.umich.edu 613113Sgblack@eecs.umich.edu /// Stat buffer. Note that we can't call it 'stat' since that 623113Sgblack@eecs.umich.edu /// gets #defined to something else on some systems. This type 633113Sgblack@eecs.umich.edu /// can be specialized by architecture specific "Linux" classes 643113Sgblack@eecs.umich.edu typedef void tgt_stat; 653113Sgblack@eecs.umich.edu 663113Sgblack@eecs.umich.edu // same for stat64 673113Sgblack@eecs.umich.edu typedef void tgt_stat64; 683113Sgblack@eecs.umich.edu 693113Sgblack@eecs.umich.edu /// Length of strings in struct utsname (plus 1 for null char). 703113Sgblack@eecs.umich.edu static const int _SYS_NMLN = 65; 713113Sgblack@eecs.umich.edu 723113Sgblack@eecs.umich.edu /// Interface struct for uname(). 733113Sgblack@eecs.umich.edu typedef struct { 743113Sgblack@eecs.umich.edu char sysname[_SYS_NMLN]; //!< System name. 753113Sgblack@eecs.umich.edu char nodename[_SYS_NMLN]; //!< Node name. 763113Sgblack@eecs.umich.edu char release[_SYS_NMLN]; //!< OS release. 773113Sgblack@eecs.umich.edu char version[_SYS_NMLN]; //!< OS version. 783113Sgblack@eecs.umich.edu char machine[_SYS_NMLN]; //!< Machine type. 793113Sgblack@eecs.umich.edu } utsname; 803113Sgblack@eecs.umich.edu 813113Sgblack@eecs.umich.edu /// Limit struct for getrlimit/setrlimit. 823113Sgblack@eecs.umich.edu typedef struct { 833113Sgblack@eecs.umich.edu uint64_t rlim_cur; //!< soft limit 843113Sgblack@eecs.umich.edu uint64_t rlim_max; //!< hard limit 853113Sgblack@eecs.umich.edu } rlimit; 863113Sgblack@eecs.umich.edu 873113Sgblack@eecs.umich.edu /// For gettimeofday(). 883113Sgblack@eecs.umich.edu typedef struct { 893113Sgblack@eecs.umich.edu int64_t tv_sec; //!< seconds 903113Sgblack@eecs.umich.edu int64_t tv_usec; //!< microseconds 913113Sgblack@eecs.umich.edu } timeval; 923113Sgblack@eecs.umich.edu 933113Sgblack@eecs.umich.edu // For writev/readv 943113Sgblack@eecs.umich.edu typedef struct { 953113Sgblack@eecs.umich.edu uint64_t iov_base; // void * 963113Sgblack@eecs.umich.edu uint64_t iov_len; 973113Sgblack@eecs.umich.edu } tgt_iovec; 983113Sgblack@eecs.umich.edu 993113Sgblack@eecs.umich.edu 1003113Sgblack@eecs.umich.edu /// For getrusage(). 1013113Sgblack@eecs.umich.edu typedef struct { 1023113Sgblack@eecs.umich.edu timeval ru_utime; //!< user time used 1033113Sgblack@eecs.umich.edu timeval ru_stime; //!< system time used 1043113Sgblack@eecs.umich.edu int64_t ru_maxrss; //!< max rss 1053113Sgblack@eecs.umich.edu int64_t ru_ixrss; //!< integral shared memory size 1063113Sgblack@eecs.umich.edu int64_t ru_idrss; //!< integral unshared data " 1073113Sgblack@eecs.umich.edu int64_t ru_isrss; //!< integral unshared stack " 1083113Sgblack@eecs.umich.edu int64_t ru_minflt; //!< page reclaims - total vmfaults 1093113Sgblack@eecs.umich.edu int64_t ru_majflt; //!< page faults 1103113Sgblack@eecs.umich.edu int64_t ru_nswap; //!< swaps 1113113Sgblack@eecs.umich.edu int64_t ru_inblock; //!< block input operations 1123113Sgblack@eecs.umich.edu int64_t ru_oublock; //!< block output operations 1133113Sgblack@eecs.umich.edu int64_t ru_msgsnd; //!< messages sent 1143113Sgblack@eecs.umich.edu int64_t ru_msgrcv; //!< messages received 1153113Sgblack@eecs.umich.edu int64_t ru_nsignals; //!< signals received 1163113Sgblack@eecs.umich.edu int64_t ru_nvcsw; //!< voluntary context switches 1173113Sgblack@eecs.umich.edu int64_t ru_nivcsw; //!< involuntary " 1183113Sgblack@eecs.umich.edu } rusage; 1193113Sgblack@eecs.umich.edu 1203113Sgblack@eecs.umich.edu}; // class OperatingSystem 1213113Sgblack@eecs.umich.edu 1223113Sgblack@eecs.umich.edu 1233113Sgblack@eecs.umich.edu#endif // FULL_SYSTEM 1243113Sgblack@eecs.umich.edu 1253113Sgblack@eecs.umich.edu#endif // __OPERATINGSYSTEM_HH__ 126