operatingsystem.hh revision 6215
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#include "config/full_system.hh" 363113Sgblack@eecs.umich.edu 373113Sgblack@eecs.umich.edu#if FULL_SYSTEM 383113Sgblack@eecs.umich.edu 393113Sgblack@eecs.umich.educlass OperatingSystem {}; 403113Sgblack@eecs.umich.edu 413113Sgblack@eecs.umich.edu#else //!FULL_SYSTEM 425795Ssaidi@eecs.umich.edu#include <string> 435795Ssaidi@eecs.umich.edu 445795Ssaidi@eecs.umich.educlass LiveProcess; 455795Ssaidi@eecs.umich.educlass ThreadContext; 463113Sgblack@eecs.umich.edu 473113Sgblack@eecs.umich.edu/// This struct is used to build an target-OS-dependent table that 483113Sgblack@eecs.umich.edu/// maps the target's open() flags to the host open() flags. 493113Sgblack@eecs.umich.edustruct OpenFlagTransTable { 505543Ssaidi@eecs.umich.edu int tgtFlag; //!< Target system flag value. 515543Ssaidi@eecs.umich.edu int hostFlag; //!< Corresponding host system flag value. 523113Sgblack@eecs.umich.edu}; 533113Sgblack@eecs.umich.edu 543113Sgblack@eecs.umich.edu 553113Sgblack@eecs.umich.edu/// 563113Sgblack@eecs.umich.edu/// This class encapsulates the types, structures, constants, 573113Sgblack@eecs.umich.edu/// functions, and syscall-number mappings specific to an operating system 583113Sgblack@eecs.umich.edu/// syscall interface. 593113Sgblack@eecs.umich.edu/// 603113Sgblack@eecs.umich.educlass OperatingSystem { 613113Sgblack@eecs.umich.edu 623113Sgblack@eecs.umich.edu public: 633113Sgblack@eecs.umich.edu 643113Sgblack@eecs.umich.edu /// Stat buffer. Note that we can't call it 'stat' since that 653113Sgblack@eecs.umich.edu /// gets #defined to something else on some systems. This type 663113Sgblack@eecs.umich.edu /// can be specialized by architecture specific "Linux" classes 673113Sgblack@eecs.umich.edu typedef void tgt_stat; 683113Sgblack@eecs.umich.edu 693113Sgblack@eecs.umich.edu // same for stat64 703113Sgblack@eecs.umich.edu typedef void tgt_stat64; 713113Sgblack@eecs.umich.edu 723113Sgblack@eecs.umich.edu /// Length of strings in struct utsname (plus 1 for null char). 733113Sgblack@eecs.umich.edu static const int _SYS_NMLN = 65; 743113Sgblack@eecs.umich.edu 753113Sgblack@eecs.umich.edu /// Interface struct for uname(). 763113Sgblack@eecs.umich.edu typedef struct { 775543Ssaidi@eecs.umich.edu char sysname[_SYS_NMLN]; //!< System name. 785543Ssaidi@eecs.umich.edu char nodename[_SYS_NMLN]; //!< Node name. 795543Ssaidi@eecs.umich.edu char release[_SYS_NMLN]; //!< OS release. 805543Ssaidi@eecs.umich.edu char version[_SYS_NMLN]; //!< OS version. 815543Ssaidi@eecs.umich.edu char machine[_SYS_NMLN]; //!< Machine type. 823113Sgblack@eecs.umich.edu } utsname; 833113Sgblack@eecs.umich.edu 843113Sgblack@eecs.umich.edu /// Limit struct for getrlimit/setrlimit. 853113Sgblack@eecs.umich.edu typedef struct { 865543Ssaidi@eecs.umich.edu uint64_t rlim_cur; //!< soft limit 875543Ssaidi@eecs.umich.edu uint64_t rlim_max; //!< hard limit 883113Sgblack@eecs.umich.edu } rlimit; 893113Sgblack@eecs.umich.edu 903113Sgblack@eecs.umich.edu /// For gettimeofday(). 913113Sgblack@eecs.umich.edu typedef struct { 925543Ssaidi@eecs.umich.edu int64_t tv_sec; //!< seconds 935543Ssaidi@eecs.umich.edu int64_t tv_usec; //!< microseconds 943113Sgblack@eecs.umich.edu } timeval; 953113Sgblack@eecs.umich.edu 963113Sgblack@eecs.umich.edu // For writev/readv 973113Sgblack@eecs.umich.edu typedef struct { 983113Sgblack@eecs.umich.edu uint64_t iov_base; // void * 993113Sgblack@eecs.umich.edu uint64_t iov_len; 1003113Sgblack@eecs.umich.edu } tgt_iovec; 1013113Sgblack@eecs.umich.edu 1023113Sgblack@eecs.umich.edu 1033113Sgblack@eecs.umich.edu /// For getrusage(). 1043113Sgblack@eecs.umich.edu typedef struct { 1055543Ssaidi@eecs.umich.edu timeval ru_utime; //!< user time used 1065543Ssaidi@eecs.umich.edu timeval ru_stime; //!< system time used 1075543Ssaidi@eecs.umich.edu int64_t ru_maxrss; //!< max rss 1085543Ssaidi@eecs.umich.edu int64_t ru_ixrss; //!< integral shared memory size 1095543Ssaidi@eecs.umich.edu int64_t ru_idrss; //!< integral unshared data " 1105543Ssaidi@eecs.umich.edu int64_t ru_isrss; //!< integral unshared stack " 1115543Ssaidi@eecs.umich.edu int64_t ru_minflt; //!< page reclaims - total vmfaults 1125543Ssaidi@eecs.umich.edu int64_t ru_majflt; //!< page faults 1135543Ssaidi@eecs.umich.edu int64_t ru_nswap; //!< swaps 1145543Ssaidi@eecs.umich.edu int64_t ru_inblock; //!< block input operations 1155543Ssaidi@eecs.umich.edu int64_t ru_oublock; //!< block output operations 1165543Ssaidi@eecs.umich.edu int64_t ru_msgsnd; //!< messages sent 1175543Ssaidi@eecs.umich.edu int64_t ru_msgrcv; //!< messages received 1185543Ssaidi@eecs.umich.edu int64_t ru_nsignals; //!< signals received 1195543Ssaidi@eecs.umich.edu int64_t ru_nvcsw; //!< voluntary context switches 1205543Ssaidi@eecs.umich.edu int64_t ru_nivcsw; //!< involuntary " 1213113Sgblack@eecs.umich.edu } rusage; 1223113Sgblack@eecs.umich.edu 1235795Ssaidi@eecs.umich.edu static int openSpecialFile(std::string path, LiveProcess *process, ThreadContext *tc); 1245795Ssaidi@eecs.umich.edu 1253113Sgblack@eecs.umich.edu}; // class OperatingSystem 1263113Sgblack@eecs.umich.edu 1273113Sgblack@eecs.umich.edu 1283113Sgblack@eecs.umich.edu#endif // FULL_SYSTEM 1293113Sgblack@eecs.umich.edu 1303113Sgblack@eecs.umich.edu#endif // __OPERATINGSYSTEM_HH__ 131