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