linux.hh revision 5543
111730Sar4jc@virginia.edu/* 211730Sar4jc@virginia.edu * Copyright (c) 2004-2005 The Regents of The University of Michigan 311730Sar4jc@virginia.edu * All rights reserved. 411730Sar4jc@virginia.edu * 511730Sar4jc@virginia.edu * Redistribution and use in source and binary forms, with or without 611730Sar4jc@virginia.edu * modification, are permitted provided that the following conditions are 711730Sar4jc@virginia.edu * met: redistributions of source code must retain the above copyright 811730Sar4jc@virginia.edu * notice, this list of conditions and the following disclaimer; 911730Sar4jc@virginia.edu * redistributions in binary form must reproduce the above copyright 1011730Sar4jc@virginia.edu * notice, this list of conditions and the following disclaimer in the 1111730Sar4jc@virginia.edu * documentation and/or other materials provided with the distribution; 1211730Sar4jc@virginia.edu * neither the name of the copyright holders nor the names of its 1311730Sar4jc@virginia.edu * contributors may be used to endorse or promote products derived from 1411730Sar4jc@virginia.edu * this software without specific prior written permission. 1511730Sar4jc@virginia.edu * 1611730Sar4jc@virginia.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1711730Sar4jc@virginia.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 1811730Sar4jc@virginia.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 1911730Sar4jc@virginia.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2011730Sar4jc@virginia.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2111730Sar4jc@virginia.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2211730Sar4jc@virginia.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2311730Sar4jc@virginia.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2411730Sar4jc@virginia.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2511730Sar4jc@virginia.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2611730Sar4jc@virginia.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2711730Sar4jc@virginia.edu * 2811730Sar4jc@virginia.edu * Authors: Ali Saidi 2911730Sar4jc@virginia.edu */ 3011730Sar4jc@virginia.edu 3111730Sar4jc@virginia.edu#ifndef __LINUX_HH__ 3211730Sar4jc@virginia.edu#define __LINUX_HH__ 3311730Sar4jc@virginia.edu#include "config/full_system.hh" 3411730Sar4jc@virginia.edu 3511730Sar4jc@virginia.edu#if FULL_SYSTEM 3611730Sar4jc@virginia.edu 3711730Sar4jc@virginia.educlass Linux {}; 3811730Sar4jc@virginia.edu 3911730Sar4jc@virginia.edu#else //!FULL_SYSTEM 4011730Sar4jc@virginia.edu 4111730Sar4jc@virginia.edu#include <inttypes.h> 4211730Sar4jc@virginia.edu 4311730Sar4jc@virginia.edu#include "kern/operatingsystem.hh" 4411730Sar4jc@virginia.edu 4511730Sar4jc@virginia.edu/// 4611730Sar4jc@virginia.edu/// This class encapsulates the types, structures, constants, 4711730Sar4jc@virginia.edu/// functions, and syscall-number mappings specific to the Alpha Linux 4811730Sar4jc@virginia.edu/// syscall interface. 4911730Sar4jc@virginia.edu/// 5011730Sar4jc@virginia.educlass Linux : public OperatingSystem 5111730Sar4jc@virginia.edu{ 5211730Sar4jc@virginia.edu 5311730Sar4jc@virginia.edu public: 5411730Sar4jc@virginia.edu 5511730Sar4jc@virginia.edu //@{ 5611730Sar4jc@virginia.edu /// Basic Linux types. 5711730Sar4jc@virginia.edu typedef uint64_t size_t; 5811730Sar4jc@virginia.edu typedef uint64_t off_t; 5911730Sar4jc@virginia.edu typedef int64_t time_t; 6011730Sar4jc@virginia.edu typedef uint32_t uid_t; 6111730Sar4jc@virginia.edu typedef uint32_t gid_t; 6211730Sar4jc@virginia.edu //@} 6311730Sar4jc@virginia.edu 6411730Sar4jc@virginia.edu /// Stat buffer. Note that we can't call it 'stat' since that 6511730Sar4jc@virginia.edu /// gets #defined to something else on some systems. This type 6611730Sar4jc@virginia.edu /// can be specialized by architecture specific "Linux" classes 6711730Sar4jc@virginia.edu typedef struct { 6811730Sar4jc@virginia.edu uint32_t st_dev; //!< device 6911730Sar4jc@virginia.edu uint32_t st_ino; //!< inode 7011730Sar4jc@virginia.edu uint32_t st_mode; //!< mode 7111730Sar4jc@virginia.edu uint32_t st_nlink; //!< link count 7211730Sar4jc@virginia.edu uint32_t st_uid; //!< owner's user ID 7311730Sar4jc@virginia.edu uint32_t st_gid; //!< owner's group ID 7411730Sar4jc@virginia.edu uint32_t st_rdev; //!< device number 7511730Sar4jc@virginia.edu int32_t _pad1; //!< for alignment 7611730Sar4jc@virginia.edu int64_t st_size; //!< file size in bytes 7711730Sar4jc@virginia.edu uint64_t st_atimeX; //!< time of last access 7811730Sar4jc@virginia.edu uint64_t st_mtimeX; //!< time of last modification 7911730Sar4jc@virginia.edu uint64_t st_ctimeX; //!< time of last status change 8011730Sar4jc@virginia.edu uint32_t st_blksize; //!< optimal I/O block size 8111730Sar4jc@virginia.edu int32_t st_blocks; //!< number of blocks allocated 8211730Sar4jc@virginia.edu uint32_t st_flags; //!< flags 8311730Sar4jc@virginia.edu uint32_t st_gen; //!< unknown 8411730Sar4jc@virginia.edu } tgt_stat; 8511730Sar4jc@virginia.edu 8611730Sar4jc@virginia.edu // same for stat64 8711730Sar4jc@virginia.edu typedef struct { 8811730Sar4jc@virginia.edu uint64_t st_dev; 8911730Sar4jc@virginia.edu uint64_t st_ino; 9011730Sar4jc@virginia.edu uint64_t st_rdev; 9111730Sar4jc@virginia.edu int64_t st_size; 9211730Sar4jc@virginia.edu uint64_t st_blocks; 9311730Sar4jc@virginia.edu 9411730Sar4jc@virginia.edu uint32_t st_mode; 9511730Sar4jc@virginia.edu uint32_t st_uid; 9611730Sar4jc@virginia.edu uint32_t st_gid; 9711730Sar4jc@virginia.edu uint32_t st_blksize; 9811730Sar4jc@virginia.edu uint32_t st_nlink; 9911730Sar4jc@virginia.edu uint32_t __pad0; 10011730Sar4jc@virginia.edu 10111730Sar4jc@virginia.edu uint64_t st_atimeX; 10211730Sar4jc@virginia.edu uint64_t st_atime_nsec; 10311730Sar4jc@virginia.edu uint64_t st_mtimeX; 10411730Sar4jc@virginia.edu uint64_t st_mtime_nsec; 10511730Sar4jc@virginia.edu uint64_t st_ctimeX; 10611730Sar4jc@virginia.edu uint64_t st_ctime_nsec; 10711730Sar4jc@virginia.edu int64_t ___unused[3]; 10811730Sar4jc@virginia.edu } tgt_stat64; 10911730Sar4jc@virginia.edu 11011730Sar4jc@virginia.edu /// Length of strings in struct utsname (plus 1 for null char). 11111730Sar4jc@virginia.edu static const int _SYS_NMLN = 65; 11211730Sar4jc@virginia.edu 11311730Sar4jc@virginia.edu /// Interface struct for uname(). 11411730Sar4jc@virginia.edu struct utsname { 11511730Sar4jc@virginia.edu char sysname[_SYS_NMLN]; //!< System name. 11611730Sar4jc@virginia.edu char nodename[_SYS_NMLN]; //!< Node name. 11711730Sar4jc@virginia.edu char release[_SYS_NMLN]; //!< OS release. 11811730Sar4jc@virginia.edu char version[_SYS_NMLN]; //!< OS version. 11911730Sar4jc@virginia.edu char machine[_SYS_NMLN]; //!< Machine type. 12011730Sar4jc@virginia.edu }; 12111730Sar4jc@virginia.edu 12211730Sar4jc@virginia.edu /// Limit struct for getrlimit/setrlimit. 12311730Sar4jc@virginia.edu struct rlimit { 12411730Sar4jc@virginia.edu uint64_t rlim_cur; //!< soft limit 12511730Sar4jc@virginia.edu uint64_t rlim_max; //!< hard limit 12611730Sar4jc@virginia.edu }; 12711730Sar4jc@virginia.edu 12811730Sar4jc@virginia.edu /// For gettimeofday(). 12911730Sar4jc@virginia.edu struct timeval { 13011730Sar4jc@virginia.edu int64_t tv_sec; //!< seconds 13111730Sar4jc@virginia.edu int64_t tv_usec; //!< microseconds 13211730Sar4jc@virginia.edu }; 13311730Sar4jc@virginia.edu 13411730Sar4jc@virginia.edu // For writev/readv 13511730Sar4jc@virginia.edu struct tgt_iovec { 13611730Sar4jc@virginia.edu uint64_t iov_base; // void * 13711730Sar4jc@virginia.edu uint64_t iov_len; 13811730Sar4jc@virginia.edu }; 13911730Sar4jc@virginia.edu 14011730Sar4jc@virginia.edu 14111730Sar4jc@virginia.edu /// For getrusage(). 14211730Sar4jc@virginia.edu struct rusage { 14311730Sar4jc@virginia.edu struct timeval ru_utime; //!< user time used 14411730Sar4jc@virginia.edu struct timeval ru_stime; //!< system time used 14511730Sar4jc@virginia.edu int64_t ru_maxrss; //!< max rss 14611730Sar4jc@virginia.edu int64_t ru_ixrss; //!< integral shared memory size 14711730Sar4jc@virginia.edu int64_t ru_idrss; //!< integral unshared data " 14811730Sar4jc@virginia.edu int64_t ru_isrss; //!< integral unshared stack " 14911730Sar4jc@virginia.edu int64_t ru_minflt; //!< page reclaims - total vmfaults 15011730Sar4jc@virginia.edu int64_t ru_majflt; //!< page faults 15111730Sar4jc@virginia.edu int64_t ru_nswap; //!< swaps 15211730Sar4jc@virginia.edu int64_t ru_inblock; //!< block input operations 15311730Sar4jc@virginia.edu int64_t ru_oublock; //!< block output operations 15411730Sar4jc@virginia.edu int64_t ru_msgsnd; //!< messages sent 15511730Sar4jc@virginia.edu int64_t ru_msgrcv; //!< messages received 15611730Sar4jc@virginia.edu int64_t ru_nsignals; //!< signals received 15711730Sar4jc@virginia.edu int64_t ru_nvcsw; //!< voluntary context switches 15811730Sar4jc@virginia.edu int64_t ru_nivcsw; //!< involuntary " 15911730Sar4jc@virginia.edu }; 16011730Sar4jc@virginia.edu 16111730Sar4jc@virginia.edu}; // class Linux 16211730Sar4jc@virginia.edu 16311730Sar4jc@virginia.edu 16411730Sar4jc@virginia.edu#endif // FULL_SYSTEM 16511730Sar4jc@virginia.edu 16611730Sar4jc@virginia.edu#endif // __LINUX_HH__ 16711730Sar4jc@virginia.edu