linux.hh revision 8972:9403273a3b46
1/* 2 * Copyright (c) 2007 The Hewlett-Packard Development Company 3 * All rights reserved. 4 * 5 * The license below extends only to copyright in the software and shall 6 * not be construed as granting a license to any other intellectual 7 * property including but not limited to intellectual property relating 8 * to a hardware implementation of the functionality of the software 9 * licensed hereunder. You may use the software subject to the license 10 * terms below provided that you ensure that this notice is replicated 11 * unmodified and in its entirety in all distributions of the software, 12 * modified or unmodified, in source code or in binary form. 13 * 14 * Redistribution and use in source and binary forms, with or without 15 * modification, are permitted provided that the following conditions are 16 * met: redistributions of source code must retain the above copyright 17 * notice, this list of conditions and the following disclaimer; 18 * redistributions in binary form must reproduce the above copyright 19 * notice, this list of conditions and the following disclaimer in the 20 * documentation and/or other materials provided with the distribution; 21 * neither the name of the copyright holders nor the names of its 22 * contributors may be used to endorse or promote products derived from 23 * this software without specific prior written permission. 24 * 25 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 26 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 27 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 28 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 29 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 30 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 31 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 32 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 33 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 34 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 35 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 36 * 37 * Authors: Gabe Black 38 */ 39 40#ifndef __ARCH_X86_LINUX_LINUX_HH__ 41#define __ARCH_X86_LINUX_LINUX_HH__ 42 43#include "kern/linux/linux.hh" 44 45class X86Linux64 : public Linux 46{ 47 public: 48 49 typedef struct { 50 uint64_t st_dev; 51 uint64_t st_ino; 52 uint64_t st_nlink; 53 uint32_t st_mode; 54 uint32_t st_uid; 55 uint32_t st_gid; 56 uint32_t __pad0; 57 uint64_t st_rdev; 58 int64_t st_size; 59 int64_t st_blksize; 60 int64_t st_blocks; 61 uint64_t st_atimeX; 62 uint64_t st_atime_nsec; 63 uint64_t st_mtimeX; 64 uint64_t st_mtime_nsec; 65 uint64_t st_ctimeX; 66 uint64_t st_ctime_nsec; 67 int64_t unused0[3]; 68 } tgt_stat64; 69 70 static OpenFlagTransTable openFlagTable[]; 71 72 static const int TGT_O_RDONLY = 00000000; //!< O_RDONLY 73 static const int TGT_O_WRONLY = 00000001; //!< O_WRONLY 74 static const int TGT_O_RDWR = 00000002; //!< O_RDWR 75 static const int TGT_O_NONBLOCK = 00004000; //!< O_NONBLOCK 76 static const int TGT_O_APPEND = 00002000; //!< O_APPEND 77 static const int TGT_O_CREAT = 00000100; //!< O_CREAT 78 static const int TGT_O_TRUNC = 00001000; //!< O_TRUNC 79 static const int TGT_O_EXCL = 00000200; //!< O_EXCL 80 static const int TGT_O_NOCTTY = 00000400; //!< O_NOCTTY 81 static const int TGT_O_SYNC = 00010000; //!< O_SYNC 82 static const int TGT_O_ASYNC = 00020000; 83 static const int TGT_O_DIRECT = 00040000; //!< O_DIRECTIO 84 static const int TGT_O_LARGEFILE = 00100000; 85 static const int TGT_O_DIRECTORY = 00200000; 86 static const int TGT_O_NOFOLLOW = 00400000; 87 static const int TGT_O_NOATIME = 01000000; 88 static const int TGT_O_CLOEXEC = 02000000; 89 90 static const int NUM_OPEN_FLAGS; 91 92 static const unsigned TGT_MAP_ANONYMOUS = 0x20; 93 static const unsigned TGT_MAP_FIXED = 0x10; 94 95 typedef struct { 96 uint64_t iov_base; // void * 97 uint64_t iov_len; // size_t 98 } tgt_iovec; 99 100 typedef struct { 101 int64_t uptime; /* Seconds since boot */ 102 uint64_t loads[3]; /* 1, 5, and 15 minute load averages */ 103 uint64_t totalram; /* Total usable main memory size */ 104 uint64_t freeram; /* Available memory size */ 105 uint64_t sharedram; /* Amount of shared memory */ 106 uint64_t bufferram; /* Memory used by buffers */ 107 uint64_t totalswap; /* Total swap space size */ 108 uint64_t freeswap; /* swap space still available */ 109 uint16_t procs; /* Number of current processes */ 110 uint64_t totalhigh; /* Total high memory size */ 111 uint64_t freehigh; /* Available high memory size */ 112 uint64_t mem_unit; /* Memory unit size in bytes */ 113 } tgt_sysinfo; 114 115}; 116 117class X86Linux32 : public Linux 118{ 119 public: 120 121 typedef struct { 122 uint64_t st_dev; 123 uint8_t __pad0[4]; 124 uint32_t __st_ino; 125 uint32_t st_mode; 126 uint32_t st_nlink; 127 uint32_t st_uid; 128 uint32_t st_gid; 129 uint64_t st_rdev; 130 uint8_t __pad3[4]; 131 int64_t st_size; 132 uint32_t st_blksize; 133 uint64_t st_blocks; 134 uint32_t st_atimeX; 135 uint32_t st_atime_nsec; 136 uint32_t st_mtimeX; 137 uint32_t st_mtime_nsec; 138 uint32_t st_ctimeX; 139 uint32_t st_ctime_nsec; 140 uint64_t st_ino; 141 } __attribute__((__packed__)) tgt_stat64; 142 143 static OpenFlagTransTable openFlagTable[]; 144 145 static const int TGT_O_RDONLY = 00000000; //!< O_RDONLY 146 static const int TGT_O_WRONLY = 00000001; //!< O_WRONLY 147 static const int TGT_O_RDWR = 00000002; //!< O_RDWR 148 static const int TGT_O_NONBLOCK = 00004000; //!< O_NONBLOCK 149 static const int TGT_O_APPEND = 00002000; //!< O_APPEND 150 static const int TGT_O_CREAT = 00000100; //!< O_CREAT 151 static const int TGT_O_TRUNC = 00001000; //!< O_TRUNC 152 static const int TGT_O_EXCL = 00000200; //!< O_EXCL 153 static const int TGT_O_NOCTTY = 00000400; //!< O_NOCTTY 154 static const int TGT_O_SYNC = 00010000; //!< O_SYNC 155 static const int TGT_O_ASYNC = 00020000; 156 static const int TGT_O_DIRECT = 00040000; //!< O_DIRECTIO 157 static const int TGT_O_LARGEFILE = 00100000; 158 static const int TGT_O_DIRECTORY = 00200000; 159 static const int TGT_O_NOFOLLOW = 00400000; 160 static const int TGT_O_NOATIME = 01000000; 161 static const int TGT_O_CLOEXEC = 02000000; 162 163 static const int NUM_OPEN_FLAGS; 164 165 static const unsigned TGT_MAP_ANONYMOUS = 0x20; 166 static const unsigned TGT_MAP_FIXED = 0x10; 167 168 typedef struct { 169 int32_t uptime; /* Seconds since boot */ 170 uint32_t loads[3]; /* 1, 5, and 15 minute load averages */ 171 uint32_t totalram; /* Total usable main memory size */ 172 uint32_t freeram; /* Available memory size */ 173 uint32_t sharedram; /* Amount of shared memory */ 174 uint32_t bufferram; /* Memory used by buffers */ 175 uint32_t totalswap; /* Total swap space size */ 176 uint32_t freeswap; /* swap space still available */ 177 uint16_t procs; /* Number of current processes */ 178 uint32_t totalhigh; /* Total high memory size */ 179 uint32_t freehigh; /* Available high memory size */ 180 uint32_t mem_unit; /* Memory unit size in bytes */ 181 } tgt_sysinfo; 182 183 static bool mmapGrowsDown() { return true; } 184}; 185 186#endif 187