includes: use base/types.hh not inttypes.h or stdint.h
[gem5.git] / src / kern / linux / linux.hh
index 6e0b37d9181dd6b1f9869038b44ed4144e6c0cf5..7c16228ea194288e786d3f0bc9962dcc6bb586b8 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2004-2005 The Regents of The University of Michigan
+ * Copyright (c) 2004-2009 The Regents of The University of Michigan
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -30,6 +30,8 @@
 
 #ifndef __LINUX_HH__
 #define __LINUX_HH__
+
+#include "base/types.hh"
 #include "config/full_system.hh"
 
 #if FULL_SYSTEM
@@ -38,10 +40,13 @@ class Linux {};
 
 #else //!FULL_SYSTEM
 
-#include <inttypes.h>
+#include <string>
 
 #include "kern/operatingsystem.hh"
 
+class ThreadContext;
+class LiveProcess;
+
 ///
 /// This class encapsulates the types, structures, constants,
 /// functions, and syscall-number mappings specific to the Alpha Linux
@@ -65,46 +70,46 @@ class Linux : public OperatingSystem
     /// gets #defined to something else on some systems. This type
     /// can be specialized by architecture specific "Linux" classes
     typedef struct {
-        uint32_t       st_dev;         //!< device
-        uint32_t       st_ino;         //!< inode
-        uint32_t       st_mode;        //!< mode
-        uint32_t       st_nlink;       //!< link count
-        uint32_t       st_uid;         //!< owner's user ID
-        uint32_t       st_gid;         //!< owner's group ID
-        uint32_t       st_rdev;        //!< device number
-        int32_t                _pad1;          //!< for alignment
-        int64_t                st_size;        //!< file size in bytes
-        uint64_t       st_atimeX;      //!< time of last access
-        uint64_t       st_mtimeX;      //!< time of last modification
-        uint64_t       st_ctimeX;      //!< time of last status change
-        uint32_t       st_blksize;     //!< optimal I/O block size
-        int32_t                st_blocks;      //!< number of blocks allocated
-        uint32_t       st_flags;       //!< flags
-        uint32_t       st_gen;         //!< unknown
+        uint32_t        st_dev;         //!< device
+        uint32_t        st_ino;         //!< inode
+        uint32_t        st_mode;        //!< mode
+        uint32_t        st_nlink;       //!< link count
+        uint32_t        st_uid;         //!< owner's user ID
+        uint32_t        st_gid;         //!< owner's group ID
+        uint32_t        st_rdev;        //!< device number
+        int32_t         _pad1;          //!< for alignment
+        int64_t         st_size;        //!< file size in bytes
+        uint64_t        st_atimeX;      //!< time of last access
+        uint64_t        st_mtimeX;      //!< time of last modification
+        uint64_t        st_ctimeX;      //!< time of last status change
+        uint32_t        st_blksize;     //!< optimal I/O block size
+        int32_t         st_blocks;      //!< number of blocks allocated
+        uint32_t        st_flags;       //!< flags
+        uint32_t        st_gen;         //!< unknown
     } tgt_stat;
 
     // same for stat64
     typedef struct {
-        uint64_t       st_dev;
-        uint64_t       st_ino;
-        uint64_t       st_rdev;
-        int64_t                st_size;
-        uint64_t       st_blocks;
-
-        uint32_t       st_mode;
-        uint32_t       st_uid;
-        uint32_t       st_gid;
-        uint32_t       st_blksize;
-        uint32_t       st_nlink;
-        uint32_t       __pad0;
-
-        uint64_t       st_atimeX;
-        uint64_t       st_atime_nsec;
-        uint64_t       st_mtimeX;
-        uint64_t       st_mtime_nsec;
-        uint64_t       st_ctimeX;
-        uint64_t       st_ctime_nsec;
-        int64_t                ___unused[3];
+        uint64_t        st_dev;
+        uint64_t        st_ino;
+        uint64_t        st_rdev;
+        int64_t         st_size;
+        uint64_t        st_blocks;
+
+        uint32_t        st_mode;
+        uint32_t        st_uid;
+        uint32_t        st_gid;
+        uint32_t        st_blksize;
+        uint32_t        st_nlink;
+        uint32_t        __pad0;
+
+        uint64_t        st_atimeX;
+        uint64_t        st_atime_nsec;
+        uint64_t        st_mtimeX;
+        uint64_t        st_mtime_nsec;
+        uint64_t        st_ctimeX;
+        uint64_t        st_ctime_nsec;
+        int64_t         ___unused[3];
     } tgt_stat64;
 
     /// Length of strings in struct utsname (plus 1 for null char).
@@ -112,23 +117,23 @@ class Linux : public OperatingSystem
 
     /// Interface struct for uname().
     struct utsname {
-        char sysname[_SYS_NMLN];       //!< System name.
-        char nodename[_SYS_NMLN];      //!< Node name.
-        char release[_SYS_NMLN];       //!< OS release.
-        char version[_SYS_NMLN];       //!< OS version.
-        char machine[_SYS_NMLN];       //!< Machine type.
+        char sysname[_SYS_NMLN];        //!< System name.
+        char nodename[_SYS_NMLN];       //!< Node name.
+        char release[_SYS_NMLN];        //!< OS release.
+        char version[_SYS_NMLN];        //!< OS version.
+        char machine[_SYS_NMLN];        //!< Machine type.
     };
 
     /// Limit struct for getrlimit/setrlimit.
     struct rlimit {
-        uint64_t  rlim_cur;    //!< soft limit
-        uint64_t  rlim_max;    //!< hard limit
+        uint64_t  rlim_cur;     //!< soft limit
+        uint64_t  rlim_max;     //!< hard limit
     };
 
     /// For gettimeofday().
     struct timeval {
-        int64_t tv_sec;                //!< seconds
-        int64_t tv_usec;       //!< microseconds
+        int64_t tv_sec;         //!< seconds
+        int64_t tv_usec;        //!< microseconds
     };
 
     // For writev/readv
@@ -140,24 +145,27 @@ class Linux : public OperatingSystem
 
     /// For getrusage().
     struct rusage {
-        struct timeval ru_utime;       //!< user time used
-        struct timeval ru_stime;       //!< system time used
-        int64_t ru_maxrss;             //!< max rss
-        int64_t ru_ixrss;              //!< integral shared memory size
-        int64_t ru_idrss;              //!< integral unshared data "
-        int64_t ru_isrss;              //!< integral unshared stack "
-        int64_t ru_minflt;             //!< page reclaims - total vmfaults
-        int64_t ru_majflt;             //!< page faults
-        int64_t ru_nswap;              //!< swaps
-        int64_t ru_inblock;            //!< block input operations
-        int64_t ru_oublock;            //!< block output operations
-        int64_t ru_msgsnd;             //!< messages sent
-        int64_t ru_msgrcv;             //!< messages received
-        int64_t ru_nsignals;           //!< signals received
-        int64_t ru_nvcsw;              //!< voluntary context switches
-        int64_t ru_nivcsw;             //!< involuntary "
+        struct timeval ru_utime;        //!< user time used
+        struct timeval ru_stime;        //!< system time used
+        int64_t ru_maxrss;              //!< max rss
+        int64_t ru_ixrss;               //!< integral shared memory size
+        int64_t ru_idrss;               //!< integral unshared data "
+        int64_t ru_isrss;               //!< integral unshared stack "
+        int64_t ru_minflt;              //!< page reclaims - total vmfaults
+        int64_t ru_majflt;              //!< page faults
+        int64_t ru_nswap;               //!< swaps
+        int64_t ru_inblock;             //!< block input operations
+        int64_t ru_oublock;             //!< block output operations
+        int64_t ru_msgsnd;              //!< messages sent
+        int64_t ru_msgrcv;              //!< messages received
+        int64_t ru_nsignals;            //!< signals received
+        int64_t ru_nvcsw;               //!< voluntary context switches
+        int64_t ru_nivcsw;              //!< involuntary "
     };
 
+    static int openSpecialFile(std::string path, LiveProcess *process, ThreadContext *tc);
+    static std::string procMeminfo(LiveProcess *process, ThreadContext *tc);
+
 };  // class Linux