linux.hh revision 10850
16019Shines@cs.fsu.edu/*
210850SGiacomo.Gabrielli@arm.com * Copyright (c) 2010, 2011-2012, 2015 ARM Limited
37416SAli.Saidi@ARM.com * All rights reserved
47416SAli.Saidi@ARM.com *
57416SAli.Saidi@ARM.com * The license below extends only to copyright in the software and shall
67416SAli.Saidi@ARM.com * not be construed as granting a license to any other intellectual
77416SAli.Saidi@ARM.com * property including but not limited to intellectual property relating
87416SAli.Saidi@ARM.com * to a hardware implementation of the functionality of the software
97416SAli.Saidi@ARM.com * licensed hereunder.  You may use the software subject to the license
107416SAli.Saidi@ARM.com * terms below provided that you ensure that this notice is replicated
117416SAli.Saidi@ARM.com * unmodified and in its entirety in all distributions of the software,
127416SAli.Saidi@ARM.com * modified or unmodified, in source code or in binary form.
137416SAli.Saidi@ARM.com *
146019Shines@cs.fsu.edu * Copyright (c) 2003-2005 The Regents of The University of Michigan
156019Shines@cs.fsu.edu * Copyright (c) 2007-2008 The Florida State University
166019Shines@cs.fsu.edu * All rights reserved.
176019Shines@cs.fsu.edu *
186019Shines@cs.fsu.edu * Redistribution and use in source and binary forms, with or without
196019Shines@cs.fsu.edu * modification, are permitted provided that the following conditions are
206019Shines@cs.fsu.edu * met: redistributions of source code must retain the above copyright
216019Shines@cs.fsu.edu * notice, this list of conditions and the following disclaimer;
226019Shines@cs.fsu.edu * redistributions in binary form must reproduce the above copyright
236019Shines@cs.fsu.edu * notice, this list of conditions and the following disclaimer in the
246019Shines@cs.fsu.edu * documentation and/or other materials provided with the distribution;
256019Shines@cs.fsu.edu * neither the name of the copyright holders nor the names of its
266019Shines@cs.fsu.edu * contributors may be used to endorse or promote products derived from
276019Shines@cs.fsu.edu * this software without specific prior written permission.
286019Shines@cs.fsu.edu *
296019Shines@cs.fsu.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
306019Shines@cs.fsu.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
316019Shines@cs.fsu.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
326019Shines@cs.fsu.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
336019Shines@cs.fsu.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
346019Shines@cs.fsu.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
356019Shines@cs.fsu.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
366019Shines@cs.fsu.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
376019Shines@cs.fsu.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
386019Shines@cs.fsu.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
396019Shines@cs.fsu.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
406019Shines@cs.fsu.edu *
417416SAli.Saidi@ARM.com * Authors: Ali Saidi
427416SAli.Saidi@ARM.com *          Stephen Hines
436019Shines@cs.fsu.edu */
446019Shines@cs.fsu.edu
456019Shines@cs.fsu.edu#ifndef __ARCH_ARM_LINUX_LINUX_HH__
466019Shines@cs.fsu.edu#define __ARCH_ARM_LINUX_LINUX_HH__
476019Shines@cs.fsu.edu
486019Shines@cs.fsu.edu#include "kern/linux/linux.hh"
496019Shines@cs.fsu.edu
5010037SARM gem5 Developersclass ArmLinux32 : public Linux
516019Shines@cs.fsu.edu{
526019Shines@cs.fsu.edu  public:
536019Shines@cs.fsu.edu
546019Shines@cs.fsu.edu    /// This table maps the target open() flags to the corresponding
556019Shines@cs.fsu.edu    /// host open() flags.
566019Shines@cs.fsu.edu    static OpenFlagTransTable openFlagTable[];
576019Shines@cs.fsu.edu
586019Shines@cs.fsu.edu    /// Number of entries in openFlagTable[].
596019Shines@cs.fsu.edu    static const int NUM_OPEN_FLAGS;
606019Shines@cs.fsu.edu
616019Shines@cs.fsu.edu    //@{
627416SAli.Saidi@ARM.com    /// Basic ARM Linux types
637416SAli.Saidi@ARM.com    typedef uint32_t size_t;
647416SAli.Saidi@ARM.com    typedef uint32_t off_t;
657416SAli.Saidi@ARM.com    typedef int32_t time_t;
667416SAli.Saidi@ARM.com    typedef int32_t clock_t;
677416SAli.Saidi@ARM.com    //@}
687416SAli.Saidi@ARM.com
697416SAli.Saidi@ARM.com    //@{
706019Shines@cs.fsu.edu    /// open(2) flag values.
716341Sjack-m5ml2@cs.york.ac.uk    static const int TGT_O_RDONLY    = 00000000; //!< O_RDONLY
726341Sjack-m5ml2@cs.york.ac.uk    static const int TGT_O_WRONLY    = 00000001; //!< O_WRONLY
736341Sjack-m5ml2@cs.york.ac.uk    static const int TGT_O_RDWR      = 00000002; //!< O_RDWR
746341Sjack-m5ml2@cs.york.ac.uk    static const int TGT_O_CREAT     = 00000100; //!< O_CREAT
756341Sjack-m5ml2@cs.york.ac.uk    static const int TGT_O_EXCL      = 00000200; //!< O_EXCL
766341Sjack-m5ml2@cs.york.ac.uk    static const int TGT_O_NOCTTY    = 00000400; //!< O_NOCTTY
776341Sjack-m5ml2@cs.york.ac.uk    static const int TGT_O_TRUNC     = 00001000; //!< O_TRUNC
786341Sjack-m5ml2@cs.york.ac.uk    static const int TGT_O_APPEND    = 00002000; //!< O_APPEND
796341Sjack-m5ml2@cs.york.ac.uk    static const int TGT_O_NONBLOCK  = 00004000; //!< O_NONBLOCK
806341Sjack-m5ml2@cs.york.ac.uk    static const int TGT_O_SYNC      = 00010000; //!< O_SYNC
816341Sjack-m5ml2@cs.york.ac.uk    static const int TGT_FASYNC      = 00020000; //!< FASYNC
827441SAli.Saidi@ARM.com    static const int TGT_O_DIRECT    = 00040000; //!< O_DIRECT
837441SAli.Saidi@ARM.com    static const int TGT_O_LARGEFILE = 00100000; //!< O_LARGEFILE
847441SAli.Saidi@ARM.com    static const int TGT_O_DIRECTORY = 00200000; //!< O_DIRECTORY
857441SAli.Saidi@ARM.com    static const int TGT_O_NOFOLLOW  = 00400000; //!< O_NOFOLLOW
866341Sjack-m5ml2@cs.york.ac.uk    static const int TGT_O_NOATIME   = 01000000; //!< O_NOATIME
877441SAli.Saidi@ARM.com    static const int TGT_O_CLOEXEC   = 02000000; //!< O_NOATIME
887441SAli.Saidi@ARM.com
897441SAli.Saidi@ARM.com
906019Shines@cs.fsu.edu    //@}
916019Shines@cs.fsu.edu
926019Shines@cs.fsu.edu    /// For mmap().
936413Ssaidi@eecs.umich.edu    static const unsigned TGT_MAP_ANONYMOUS = 0x20;
948600Ssteve.reinhardt@amd.com    static const unsigned TGT_MAP_FIXED     = 0x10;
956019Shines@cs.fsu.edu
966019Shines@cs.fsu.edu    /// For table().
976019Shines@cs.fsu.edu    static const int TBL_SYSINFO = 12;
986019Shines@cs.fsu.edu
997416SAli.Saidi@ARM.com    /// Limit struct for getrlimit/setrlimit.
1007416SAli.Saidi@ARM.com    struct rlimit {
1017416SAli.Saidi@ARM.com        uint32_t  rlim_cur;     //!< soft limit
1027416SAli.Saidi@ARM.com        uint32_t  rlim_max;     //!< hard limit
1037416SAli.Saidi@ARM.com    };
1047416SAli.Saidi@ARM.com
1057416SAli.Saidi@ARM.com    /// For gettimeofday().
1067416SAli.Saidi@ARM.com    struct timeval {
1077416SAli.Saidi@ARM.com        int32_t tv_sec;         //!< seconds
1087416SAli.Saidi@ARM.com        int32_t tv_usec;        //!< microseconds
1097416SAli.Saidi@ARM.com    };
1107416SAli.Saidi@ARM.com
11110850SGiacomo.Gabrielli@arm.com    struct timespec {
11210850SGiacomo.Gabrielli@arm.com        int32_t tv_sec;   //!< seconds
11310850SGiacomo.Gabrielli@arm.com        int32_t tv_nsec;  //!< nanoseconds
11410850SGiacomo.Gabrielli@arm.com    };
11510850SGiacomo.Gabrielli@arm.com
1167416SAli.Saidi@ARM.com    // For writev/readv
1177416SAli.Saidi@ARM.com    struct tgt_iovec {
1187416SAli.Saidi@ARM.com        uint32_t iov_base; // void *
1197416SAli.Saidi@ARM.com        uint32_t iov_len;
1207416SAli.Saidi@ARM.com    };
1217416SAli.Saidi@ARM.com
1227416SAli.Saidi@ARM.com
1236395Ssaidi@eecs.umich.edu    typedef struct {
1246395Ssaidi@eecs.umich.edu        uint32_t st_dev;
1256395Ssaidi@eecs.umich.edu        uint32_t st_ino;
1266395Ssaidi@eecs.umich.edu        uint16_t st_mode;
1276395Ssaidi@eecs.umich.edu        uint16_t st_nlink;
1286395Ssaidi@eecs.umich.edu        uint16_t st_uid;
1296395Ssaidi@eecs.umich.edu        uint16_t st_gid;
1306395Ssaidi@eecs.umich.edu        uint32_t st_rdev;
13110037SARM gem5 Developers        uint32_t __pad1;
1326395Ssaidi@eecs.umich.edu        uint32_t st_size;
1336395Ssaidi@eecs.umich.edu        uint32_t st_blksize;
13410037SARM gem5 Developers        uint32_t __pad2;
1356395Ssaidi@eecs.umich.edu        uint32_t st_blocks;
1366395Ssaidi@eecs.umich.edu        uint32_t st_atimeX;
1376395Ssaidi@eecs.umich.edu        uint32_t st_atime_nsec;
1386395Ssaidi@eecs.umich.edu        uint32_t st_mtimeX;
1396395Ssaidi@eecs.umich.edu        uint32_t st_mtime_nsec;
1406395Ssaidi@eecs.umich.edu        uint32_t st_ctimeX;
1416395Ssaidi@eecs.umich.edu        uint32_t st_ctime_nsec;
1426395Ssaidi@eecs.umich.edu    } tgt_stat;
1436395Ssaidi@eecs.umich.edu
1446395Ssaidi@eecs.umich.edu    typedef struct {
1456395Ssaidi@eecs.umich.edu        uint64_t  st_dev;
1466395Ssaidi@eecs.umich.edu        uint8_t   __pad0[4];
1476395Ssaidi@eecs.umich.edu        uint32_t  __st_ino;
1486395Ssaidi@eecs.umich.edu        uint32_t  st_mode;
1496395Ssaidi@eecs.umich.edu        uint32_t  st_nlink;
1506395Ssaidi@eecs.umich.edu        uint32_t  st_uid;
1516395Ssaidi@eecs.umich.edu        uint32_t  st_gid;
1526395Ssaidi@eecs.umich.edu        uint64_t  st_rdev;
1536395Ssaidi@eecs.umich.edu        uint8_t   __pad3[4];
1546395Ssaidi@eecs.umich.edu        int64_t   __attribute__ ((aligned (8))) st_size;
1556395Ssaidi@eecs.umich.edu        uint32_t  st_blksize;
1566395Ssaidi@eecs.umich.edu        uint64_t  __attribute__ ((aligned (8))) st_blocks;
1576395Ssaidi@eecs.umich.edu        uint32_t  st_atimeX;
1586395Ssaidi@eecs.umich.edu        uint32_t  st_atime_nsec;
1596395Ssaidi@eecs.umich.edu        uint32_t  st_mtimeX;
1606395Ssaidi@eecs.umich.edu        uint32_t  st_mtime_nsec;
1616395Ssaidi@eecs.umich.edu        uint32_t  st_ctimeX;
1626395Ssaidi@eecs.umich.edu        uint32_t  st_ctime_nsec;
1636395Ssaidi@eecs.umich.edu        uint64_t  st_ino;
1646395Ssaidi@eecs.umich.edu    } tgt_stat64;
1656395Ssaidi@eecs.umich.edu
1666640Svince@csl.cornell.edu    typedef struct {
1676640Svince@csl.cornell.edu        int32_t  uptime;    /* Seconds since boot */
1686640Svince@csl.cornell.edu        uint32_t loads[3];  /* 1, 5, and 15 minute load averages */
1696640Svince@csl.cornell.edu        uint32_t totalram;  /* Total usable main memory size */
1706640Svince@csl.cornell.edu        uint32_t freeram;   /* Available memory size */
1716640Svince@csl.cornell.edu        uint32_t sharedram; /* Amount of shared memory */
1726640Svince@csl.cornell.edu        uint32_t bufferram; /* Memory used by buffers */
1736640Svince@csl.cornell.edu        uint32_t totalswap; /* Total swap space size */
1746640Svince@csl.cornell.edu        uint32_t freeswap;  /* swap space still available */
1756640Svince@csl.cornell.edu        uint16_t procs;     /* Number of current processes */
1766640Svince@csl.cornell.edu        uint32_t totalhigh; /* Total high memory size */
1776640Svince@csl.cornell.edu        uint32_t freehigh;  /* Available high memory size */
1786640Svince@csl.cornell.edu        uint32_t mem_unit;  /* Memory unit size in bytes */
1796640Svince@csl.cornell.edu    } tgt_sysinfo;
1806640Svince@csl.cornell.edu
1817416SAli.Saidi@ARM.com    /// For getrusage().
1827416SAli.Saidi@ARM.com    struct rusage {
1837416SAli.Saidi@ARM.com        struct timeval ru_utime;        //!< user time used
1847416SAli.Saidi@ARM.com        struct timeval ru_stime;        //!< system time used
1857416SAli.Saidi@ARM.com        int32_t ru_maxrss;              //!< max rss
1867416SAli.Saidi@ARM.com        int32_t ru_ixrss;               //!< integral shared memory size
1877416SAli.Saidi@ARM.com        int32_t ru_idrss;               //!< integral unshared data "
1887416SAli.Saidi@ARM.com        int32_t ru_isrss;               //!< integral unshared stack "
1897416SAli.Saidi@ARM.com        int32_t ru_minflt;              //!< page reclaims - total vmfaults
1907416SAli.Saidi@ARM.com        int32_t ru_majflt;              //!< page faults
1917416SAli.Saidi@ARM.com        int32_t ru_nswap;               //!< swaps
1927416SAli.Saidi@ARM.com        int32_t ru_inblock;             //!< block input operations
1937416SAli.Saidi@ARM.com        int32_t ru_oublock;             //!< block output operations
1947416SAli.Saidi@ARM.com        int32_t ru_msgsnd;              //!< messages sent
1957416SAli.Saidi@ARM.com        int32_t ru_msgrcv;              //!< messages received
1967416SAli.Saidi@ARM.com        int32_t ru_nsignals;            //!< signals received
1977416SAli.Saidi@ARM.com        int32_t ru_nvcsw;               //!< voluntary context switches
1987416SAli.Saidi@ARM.com        int32_t ru_nivcsw;              //!< involuntary "
1997416SAli.Saidi@ARM.com    };
2007416SAli.Saidi@ARM.com
2017416SAli.Saidi@ARM.com    /// For times().
2027416SAli.Saidi@ARM.com    struct tms {
2037416SAli.Saidi@ARM.com        int32_t tms_utime;      //!< user time
2047416SAli.Saidi@ARM.com        int32_t tms_stime;      //!< system time
2057416SAli.Saidi@ARM.com        int32_t tms_cutime;     //!< user time of children
2067416SAli.Saidi@ARM.com        int32_t tms_cstime;     //!< system time of children
2077416SAli.Saidi@ARM.com    };
20810037SARM gem5 Developers};
2097416SAli.Saidi@ARM.com
21010037SARM gem5 Developersclass ArmLinux64 : public Linux
21110037SARM gem5 Developers{
21210037SARM gem5 Developers  public:
2136395Ssaidi@eecs.umich.edu
21410037SARM gem5 Developers    /// This table maps the target open() flags to the corresponding
21510037SARM gem5 Developers    /// host open() flags.
21610037SARM gem5 Developers    static OpenFlagTransTable openFlagTable[];
21710037SARM gem5 Developers
21810037SARM gem5 Developers    /// Number of entries in openFlagTable[].
21910037SARM gem5 Developers    static const int NUM_OPEN_FLAGS;
22010037SARM gem5 Developers
22110037SARM gem5 Developers    //@{
22210037SARM gem5 Developers    /// Basic ARM Linux types
22310037SARM gem5 Developers    typedef uint64_t size_t;
22410037SARM gem5 Developers    typedef uint64_t off_t;
22510037SARM gem5 Developers    typedef int64_t time_t;
22610037SARM gem5 Developers    typedef int64_t clock_t;
22710037SARM gem5 Developers    //@}
22810037SARM gem5 Developers
22910037SARM gem5 Developers    //@{
23010037SARM gem5 Developers    /// open(2) flag values.
23110037SARM gem5 Developers    static const int TGT_O_RDONLY    = 00000000; //!< O_RDONLY
23210037SARM gem5 Developers    static const int TGT_O_WRONLY    = 00000001; //!< O_WRONLY
23310037SARM gem5 Developers    static const int TGT_O_RDWR      = 00000002; //!< O_RDWR
23410037SARM gem5 Developers    static const int TGT_O_CREAT     = 00000100; //!< O_CREAT
23510037SARM gem5 Developers    static const int TGT_O_EXCL      = 00000200; //!< O_EXCL
23610037SARM gem5 Developers    static const int TGT_O_NOCTTY    = 00000400; //!< O_NOCTTY
23710037SARM gem5 Developers    static const int TGT_O_TRUNC     = 00001000; //!< O_TRUNC
23810037SARM gem5 Developers    static const int TGT_O_APPEND    = 00002000; //!< O_APPEND
23910037SARM gem5 Developers    static const int TGT_O_NONBLOCK  = 00004000; //!< O_NONBLOCK
24010037SARM gem5 Developers    static const int TGT_O_SYNC      = 00010000; //!< O_SYNC
24110037SARM gem5 Developers    static const int TGT_FASYNC      = 00020000; //!< FASYNC
24210037SARM gem5 Developers    static const int TGT_O_DIRECT    = 00040000; //!< O_DIRECT
24310037SARM gem5 Developers    static const int TGT_O_LARGEFILE = 00100000; //!< O_LARGEFILE
24410037SARM gem5 Developers    static const int TGT_O_DIRECTORY = 00200000; //!< O_DIRECTORY
24510037SARM gem5 Developers    static const int TGT_O_NOFOLLOW  = 00400000; //!< O_NOFOLLOW
24610037SARM gem5 Developers    static const int TGT_O_NOATIME   = 01000000; //!< O_NOATIME
24710037SARM gem5 Developers    static const int TGT_O_CLOEXEC   = 02000000; //!< O_NOATIME
24810037SARM gem5 Developers    //@}
24910037SARM gem5 Developers
25010037SARM gem5 Developers    /// For mmap().
25110037SARM gem5 Developers    static const unsigned TGT_MAP_ANONYMOUS = 0x20;
25210037SARM gem5 Developers    static const unsigned TGT_MAP_FIXED     = 0x10;
25310037SARM gem5 Developers
25410037SARM gem5 Developers    //@{
25510037SARM gem5 Developers    /// For getrusage().
25610037SARM gem5 Developers    static const int TGT_RUSAGE_SELF = 0;
25710037SARM gem5 Developers    static const int TGT_RUSAGE_CHILDREN = -1;
25810037SARM gem5 Developers    static const int TGT_RUSAGE_BOTH = -2;
25910037SARM gem5 Developers    //@}
26010037SARM gem5 Developers
26110037SARM gem5 Developers    //@{
26210037SARM gem5 Developers    /// ioctl() command codes.
26310037SARM gem5 Developers    static const unsigned TIOCGETP_   = 0x5401;
26410037SARM gem5 Developers    static const unsigned TIOCSETP_   = 0x80067409;
26510037SARM gem5 Developers    static const unsigned TIOCSETN_   = 0x8006740a;
26610037SARM gem5 Developers    static const unsigned TIOCSETC_   = 0x80067411;
26710037SARM gem5 Developers    static const unsigned TIOCGETC_   = 0x40067412;
26810037SARM gem5 Developers    static const unsigned FIONREAD_   = 0x4004667f;
26910037SARM gem5 Developers    static const unsigned TIOCISATTY_ = 0x2000745e;
27010037SARM gem5 Developers    static const unsigned TIOCGETS_   = 0x402c7413;
27110037SARM gem5 Developers    static const unsigned TIOCGETA_   = 0x5405;
27210037SARM gem5 Developers    static const unsigned TCSETAW_    = 0x5407;     // 2.6.15 kernel
27310037SARM gem5 Developers    //@}
27410037SARM gem5 Developers
27510037SARM gem5 Developers    /// For table().
27610037SARM gem5 Developers    static const int TBL_SYSINFO = 12;
27710037SARM gem5 Developers
27810037SARM gem5 Developers    /// Resource enumeration for getrlimit().
27910037SARM gem5 Developers    enum rlimit_resources {
28010037SARM gem5 Developers        TGT_RLIMIT_CPU = 0,
28110037SARM gem5 Developers        TGT_RLIMIT_FSIZE = 1,
28210037SARM gem5 Developers        TGT_RLIMIT_DATA = 2,
28310037SARM gem5 Developers        TGT_RLIMIT_STACK = 3,
28410037SARM gem5 Developers        TGT_RLIMIT_CORE = 4,
28510037SARM gem5 Developers        TGT_RLIMIT_RSS = 5,
28610037SARM gem5 Developers        TGT_RLIMIT_NPROC = 6,
28710037SARM gem5 Developers        TGT_RLIMIT_NOFILE = 7,
28810037SARM gem5 Developers        TGT_RLIMIT_MEMLOCK = 8,
28910037SARM gem5 Developers        TGT_RLIMIT_AS = 9,
29010037SARM gem5 Developers        TGT_RLIMIT_LOCKS = 10
29110037SARM gem5 Developers    };
29210037SARM gem5 Developers
29310037SARM gem5 Developers    /// Limit struct for getrlimit/setrlimit.
29410037SARM gem5 Developers    struct rlimit {
29510037SARM gem5 Developers        uint64_t  rlim_cur;     //!< soft limit
29610037SARM gem5 Developers        uint64_t  rlim_max;     //!< hard limit
29710037SARM gem5 Developers    };
29810037SARM gem5 Developers
29910037SARM gem5 Developers    /// For gettimeofday().
30010037SARM gem5 Developers    struct timeval {
30110037SARM gem5 Developers        int64_t tv_sec;         //!< seconds
30210037SARM gem5 Developers        int64_t tv_usec;        //!< microseconds
30310037SARM gem5 Developers    };
30410037SARM gem5 Developers
30510850SGiacomo.Gabrielli@arm.com    struct timespec {
30610850SGiacomo.Gabrielli@arm.com        int64_t tv_sec;   //!< seconds
30710850SGiacomo.Gabrielli@arm.com        int64_t tv_nsec;  //!< nanoseconds
30810850SGiacomo.Gabrielli@arm.com    };
30910850SGiacomo.Gabrielli@arm.com
31010037SARM gem5 Developers    // For writev/readv
31110037SARM gem5 Developers    struct tgt_iovec {
31210037SARM gem5 Developers        uint64_t iov_base; // void *
31310037SARM gem5 Developers        uint64_t iov_len;
31410037SARM gem5 Developers    };
31510037SARM gem5 Developers
31610037SARM gem5 Developers    typedef struct {
31710037SARM gem5 Developers        uint64_t st_dev;
31810037SARM gem5 Developers        uint64_t st_ino;
31910037SARM gem5 Developers        uint64_t st_nlink;
32010037SARM gem5 Developers        uint32_t st_mode;
32110037SARM gem5 Developers        uint32_t st_uid;
32210037SARM gem5 Developers        uint32_t st_gid;
32310037SARM gem5 Developers        uint32_t __pad0;
32410037SARM gem5 Developers        uint64_t st_rdev;
32510037SARM gem5 Developers        uint64_t st_size;
32610037SARM gem5 Developers        uint64_t st_blksize;
32710037SARM gem5 Developers        uint64_t st_blocks;
32810037SARM gem5 Developers        uint64_t st_atimeX;
32910037SARM gem5 Developers        uint64_t st_atime_nsec;
33010037SARM gem5 Developers        uint64_t st_mtimeX;
33110037SARM gem5 Developers        uint64_t st_mtime_nsec;
33210037SARM gem5 Developers        uint64_t st_ctimeX;
33310037SARM gem5 Developers        uint64_t st_ctime_nsec;
33410037SARM gem5 Developers    } tgt_stat;
33510037SARM gem5 Developers
33610037SARM gem5 Developers    typedef struct {
33710037SARM gem5 Developers        uint64_t st_dev;
33810037SARM gem5 Developers        uint64_t st_ino;
33910037SARM gem5 Developers        uint32_t st_mode;
34010037SARM gem5 Developers        uint32_t st_nlink;
34110037SARM gem5 Developers        uint32_t st_uid;
34210037SARM gem5 Developers        uint32_t st_gid;
34310037SARM gem5 Developers        uint32_t __pad0;
34410037SARM gem5 Developers        uint64_t st_rdev;
34510037SARM gem5 Developers        uint64_t st_size;
34610037SARM gem5 Developers        uint64_t st_blksize;
34710037SARM gem5 Developers        uint64_t st_blocks;
34810037SARM gem5 Developers        uint64_t st_atimeX;
34910037SARM gem5 Developers        uint64_t st_atime_nsec;
35010037SARM gem5 Developers        uint64_t st_mtimeX;
35110037SARM gem5 Developers        uint64_t st_mtime_nsec;
35210037SARM gem5 Developers        uint64_t st_ctimeX;
35310037SARM gem5 Developers        uint64_t st_ctime_nsec;
35410037SARM gem5 Developers    } tgt_stat64;
35510037SARM gem5 Developers
35610037SARM gem5 Developers    typedef struct {
35710037SARM gem5 Developers        int64_t  uptime;    /* Seconds since boot */
35810037SARM gem5 Developers        uint64_t loads[3];  /* 1, 5, and 15 minute load averages */
35910037SARM gem5 Developers        uint64_t totalram;  /* Total usable main memory size */
36010037SARM gem5 Developers        uint64_t freeram;   /* Available memory size */
36110037SARM gem5 Developers        uint64_t sharedram; /* Amount of shared memory */
36210037SARM gem5 Developers        uint64_t bufferram; /* Memory used by buffers */
36310037SARM gem5 Developers        uint64_t totalswap; /* Total swap space size */
36410037SARM gem5 Developers        uint64_t freeswap;  /* swap space still available */
36510037SARM gem5 Developers        uint16_t procs;     /* Number of current processes */
36610037SARM gem5 Developers        uint16_t pad;
36710037SARM gem5 Developers        uint64_t totalhigh; /* Total high memory size */
36810037SARM gem5 Developers        uint64_t freehigh;  /* Available high memory size */
36910037SARM gem5 Developers        uint32_t mem_unit;  /* Memory unit size in bytes */
37010037SARM gem5 Developers    } tgt_sysinfo;
37110037SARM gem5 Developers
37210037SARM gem5 Developers    /// For getrusage().
37310037SARM gem5 Developers    struct rusage {
37410037SARM gem5 Developers        struct timeval ru_utime;        //!< user time used
37510037SARM gem5 Developers        struct timeval ru_stime;        //!< system time used
37610037SARM gem5 Developers        int64_t ru_maxrss;              //!< max rss
37710037SARM gem5 Developers        int64_t ru_ixrss;               //!< integral shared memory size
37810037SARM gem5 Developers        int64_t ru_idrss;               //!< integral unshared data "
37910037SARM gem5 Developers        int64_t ru_isrss;               //!< integral unshared stack "
38010037SARM gem5 Developers        int64_t ru_minflt;              //!< page reclaims - total vmfaults
38110037SARM gem5 Developers        int64_t ru_majflt;              //!< page faults
38210037SARM gem5 Developers        int64_t ru_nswap;               //!< swaps
38310037SARM gem5 Developers        int64_t ru_inblock;             //!< block input operations
38410037SARM gem5 Developers        int64_t ru_oublock;             //!< block output operations
38510037SARM gem5 Developers        int64_t ru_msgsnd;              //!< messages sent
38610037SARM gem5 Developers        int64_t ru_msgrcv;              //!< messages received
38710037SARM gem5 Developers        int64_t ru_nsignals;            //!< signals received
38810037SARM gem5 Developers        int64_t ru_nvcsw;               //!< voluntary context switches
38910037SARM gem5 Developers        int64_t ru_nivcsw;              //!< involuntary "
39010037SARM gem5 Developers    };
39110037SARM gem5 Developers
39210037SARM gem5 Developers    /// For times().
39310037SARM gem5 Developers    struct tms {
39410037SARM gem5 Developers        int64_t tms_utime;      //!< user time
39510037SARM gem5 Developers        int64_t tms_stime;      //!< system time
39610037SARM gem5 Developers        int64_t tms_cutime;     //!< user time of children
39710037SARM gem5 Developers        int64_t tms_cstime;     //!< system time of children
39810037SARM gem5 Developers    };
3996019Shines@cs.fsu.edu};
4006019Shines@cs.fsu.edu
4016019Shines@cs.fsu.edu#endif
402