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 346215Snate@binkert.org#include "base/types.hh" 353113Sgblack@eecs.umich.edu 365795Ssaidi@eecs.umich.edu#include <string> 375795Ssaidi@eecs.umich.edu 3811851Sbrandon.potter@amd.comclass Process; 395795Ssaidi@eecs.umich.educlass ThreadContext; 403113Sgblack@eecs.umich.edu 4111381Sbrandon.potter@amd.com/// This struct is used to build target-OS-dependent tables that 4211381Sbrandon.potter@amd.com/// map the target's flags to the host's flags. 4311381Sbrandon.potter@amd.comstruct SyscallFlagTransTable { 445543Ssaidi@eecs.umich.edu int tgtFlag; //!< Target system flag value. 455543Ssaidi@eecs.umich.edu int hostFlag; //!< Corresponding host system flag value. 463113Sgblack@eecs.umich.edu}; 473113Sgblack@eecs.umich.edu 483113Sgblack@eecs.umich.edu 493113Sgblack@eecs.umich.edu/// 503113Sgblack@eecs.umich.edu/// This class encapsulates the types, structures, constants, 513113Sgblack@eecs.umich.edu/// functions, and syscall-number mappings specific to an operating system 523113Sgblack@eecs.umich.edu/// syscall interface. 533113Sgblack@eecs.umich.edu/// 543113Sgblack@eecs.umich.educlass OperatingSystem { 553113Sgblack@eecs.umich.edu 563113Sgblack@eecs.umich.edu public: 573113Sgblack@eecs.umich.edu 583113Sgblack@eecs.umich.edu /// Stat buffer. Note that we can't call it 'stat' since that 593113Sgblack@eecs.umich.edu /// gets #defined to something else on some systems. This type 603113Sgblack@eecs.umich.edu /// can be specialized by architecture specific "Linux" classes 613113Sgblack@eecs.umich.edu typedef void tgt_stat; 623113Sgblack@eecs.umich.edu 633113Sgblack@eecs.umich.edu // same for stat64 643113Sgblack@eecs.umich.edu typedef void tgt_stat64; 653113Sgblack@eecs.umich.edu 663113Sgblack@eecs.umich.edu /// Length of strings in struct utsname (plus 1 for null char). 673113Sgblack@eecs.umich.edu static const int _SYS_NMLN = 65; 683113Sgblack@eecs.umich.edu 693113Sgblack@eecs.umich.edu /// Interface struct for uname(). 703113Sgblack@eecs.umich.edu typedef struct { 715543Ssaidi@eecs.umich.edu char sysname[_SYS_NMLN]; //!< System name. 725543Ssaidi@eecs.umich.edu char nodename[_SYS_NMLN]; //!< Node name. 735543Ssaidi@eecs.umich.edu char release[_SYS_NMLN]; //!< OS release. 745543Ssaidi@eecs.umich.edu char version[_SYS_NMLN]; //!< OS version. 755543Ssaidi@eecs.umich.edu char machine[_SYS_NMLN]; //!< Machine type. 763113Sgblack@eecs.umich.edu } utsname; 773113Sgblack@eecs.umich.edu 783113Sgblack@eecs.umich.edu /// Limit struct for getrlimit/setrlimit. 793113Sgblack@eecs.umich.edu typedef struct { 805543Ssaidi@eecs.umich.edu uint64_t rlim_cur; //!< soft limit 815543Ssaidi@eecs.umich.edu uint64_t rlim_max; //!< hard limit 823113Sgblack@eecs.umich.edu } rlimit; 833113Sgblack@eecs.umich.edu 843113Sgblack@eecs.umich.edu /// For gettimeofday(). 853113Sgblack@eecs.umich.edu typedef struct { 865543Ssaidi@eecs.umich.edu int64_t tv_sec; //!< seconds 875543Ssaidi@eecs.umich.edu int64_t tv_usec; //!< microseconds 883113Sgblack@eecs.umich.edu } timeval; 893113Sgblack@eecs.umich.edu 903113Sgblack@eecs.umich.edu // For writev/readv 913113Sgblack@eecs.umich.edu typedef struct { 923113Sgblack@eecs.umich.edu uint64_t iov_base; // void * 933113Sgblack@eecs.umich.edu uint64_t iov_len; 943113Sgblack@eecs.umich.edu } tgt_iovec; 953113Sgblack@eecs.umich.edu 963113Sgblack@eecs.umich.edu 973113Sgblack@eecs.umich.edu /// For getrusage(). 983113Sgblack@eecs.umich.edu typedef struct { 995543Ssaidi@eecs.umich.edu timeval ru_utime; //!< user time used 1005543Ssaidi@eecs.umich.edu timeval ru_stime; //!< system time used 1015543Ssaidi@eecs.umich.edu int64_t ru_maxrss; //!< max rss 1025543Ssaidi@eecs.umich.edu int64_t ru_ixrss; //!< integral shared memory size 1035543Ssaidi@eecs.umich.edu int64_t ru_idrss; //!< integral unshared data " 1045543Ssaidi@eecs.umich.edu int64_t ru_isrss; //!< integral unshared stack " 1055543Ssaidi@eecs.umich.edu int64_t ru_minflt; //!< page reclaims - total vmfaults 1065543Ssaidi@eecs.umich.edu int64_t ru_majflt; //!< page faults 1075543Ssaidi@eecs.umich.edu int64_t ru_nswap; //!< swaps 1085543Ssaidi@eecs.umich.edu int64_t ru_inblock; //!< block input operations 1095543Ssaidi@eecs.umich.edu int64_t ru_oublock; //!< block output operations 1105543Ssaidi@eecs.umich.edu int64_t ru_msgsnd; //!< messages sent 1115543Ssaidi@eecs.umich.edu int64_t ru_msgrcv; //!< messages received 1125543Ssaidi@eecs.umich.edu int64_t ru_nsignals; //!< signals received 1135543Ssaidi@eecs.umich.edu int64_t ru_nvcsw; //!< voluntary context switches 1145543Ssaidi@eecs.umich.edu int64_t ru_nivcsw; //!< involuntary " 1153113Sgblack@eecs.umich.edu } rusage; 1163113Sgblack@eecs.umich.edu 11711851Sbrandon.potter@amd.com static int openSpecialFile(std::string path, Process *process, 11811851Sbrandon.potter@amd.com ThreadContext *tc); 1195795Ssaidi@eecs.umich.edu 1203113Sgblack@eecs.umich.edu}; // class OperatingSystem 1213113Sgblack@eecs.umich.edu 1223113Sgblack@eecs.umich.edu#endif // __OPERATINGSYSTEM_HH__ 123