linux.hh revision 9141:593fe25c86a6
17584SAli.Saidi@arm.com/* 29958Smatt.evans@arm.com * Copyright (c) 2010 ARM Limited 37584SAli.Saidi@arm.com * All rights reserved 47584SAli.Saidi@arm.com * 57584SAli.Saidi@arm.com * The license below extends only to copyright in the software and shall 67584SAli.Saidi@arm.com * not be construed as granting a license to any other intellectual 77584SAli.Saidi@arm.com * property including but not limited to intellectual property relating 87584SAli.Saidi@arm.com * to a hardware implementation of the functionality of the software 97584SAli.Saidi@arm.com * licensed hereunder. You may use the software subject to the license 107584SAli.Saidi@arm.com * terms below provided that you ensure that this notice is replicated 117584SAli.Saidi@arm.com * unmodified and in its entirety in all distributions of the software, 127584SAli.Saidi@arm.com * modified or unmodified, in source code or in binary form. 137584SAli.Saidi@arm.com * 147584SAli.Saidi@arm.com * Copyright (c) 2003-2005 The Regents of The University of Michigan 157584SAli.Saidi@arm.com * Copyright (c) 2007-2008 The Florida State University 167584SAli.Saidi@arm.com * All rights reserved. 177584SAli.Saidi@arm.com * 187584SAli.Saidi@arm.com * Redistribution and use in source and binary forms, with or without 197584SAli.Saidi@arm.com * modification, are permitted provided that the following conditions are 207584SAli.Saidi@arm.com * met: redistributions of source code must retain the above copyright 217584SAli.Saidi@arm.com * notice, this list of conditions and the following disclaimer; 227584SAli.Saidi@arm.com * redistributions in binary form must reproduce the above copyright 237584SAli.Saidi@arm.com * notice, this list of conditions and the following disclaimer in the 247584SAli.Saidi@arm.com * documentation and/or other materials provided with the distribution; 257584SAli.Saidi@arm.com * neither the name of the copyright holders nor the names of its 267584SAli.Saidi@arm.com * contributors may be used to endorse or promote products derived from 277584SAli.Saidi@arm.com * this software without specific prior written permission. 287584SAli.Saidi@arm.com * 297584SAli.Saidi@arm.com * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 307584SAli.Saidi@arm.com * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 317584SAli.Saidi@arm.com * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 327584SAli.Saidi@arm.com * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 337584SAli.Saidi@arm.com * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 347584SAli.Saidi@arm.com * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 357584SAli.Saidi@arm.com * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 367584SAli.Saidi@arm.com * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 377584SAli.Saidi@arm.com * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 387584SAli.Saidi@arm.com * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 397584SAli.Saidi@arm.com * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 407584SAli.Saidi@arm.com * 419958Smatt.evans@arm.com * Authors: Ali Saidi 427584SAli.Saidi@arm.com * Stephen Hines 437584SAli.Saidi@arm.com */ 447584SAli.Saidi@arm.com 457584SAli.Saidi@arm.com#ifndef __ARCH_ARM_LINUX_LINUX_HH__ 467584SAli.Saidi@arm.com#define __ARCH_ARM_LINUX_LINUX_HH__ 479958Smatt.evans@arm.com 487584SAli.Saidi@arm.com#include "kern/linux/linux.hh" 497584SAli.Saidi@arm.com 507584SAli.Saidi@arm.comclass ArmLinux : public Linux 517584SAli.Saidi@arm.com{ 527584SAli.Saidi@arm.com public: 537584SAli.Saidi@arm.com 547584SAli.Saidi@arm.com /// This table maps the target open() flags to the corresponding 557584SAli.Saidi@arm.com /// host open() flags. 567584SAli.Saidi@arm.com static OpenFlagTransTable openFlagTable[]; 577584SAli.Saidi@arm.com 587584SAli.Saidi@arm.com /// Number of entries in openFlagTable[]. 598524SAli.Saidi@ARM.com static const int NUM_OPEN_FLAGS; 608524SAli.Saidi@ARM.com 618524SAli.Saidi@ARM.com //@{ 628524SAli.Saidi@ARM.com /// Basic ARM Linux types 638524SAli.Saidi@ARM.com typedef uint32_t size_t; 647584SAli.Saidi@arm.com typedef uint32_t off_t; 657584SAli.Saidi@arm.com typedef int32_t time_t; 667584SAli.Saidi@arm.com typedef int32_t clock_t; 679004Skoansin.tan@gmail.com //@} 687584SAli.Saidi@arm.com 697584SAli.Saidi@arm.com //@{ 708060SAli.Saidi@ARM.com /// open(2) flag values. 718060SAli.Saidi@ARM.com static const int TGT_O_RDONLY = 00000000; //!< O_RDONLY 729004Skoansin.tan@gmail.com static const int TGT_O_WRONLY = 00000001; //!< O_WRONLY 738060SAli.Saidi@ARM.com static const int TGT_O_RDWR = 00000002; //!< O_RDWR 748060SAli.Saidi@ARM.com static const int TGT_O_CREAT = 00000100; //!< O_CREAT 757584SAli.Saidi@arm.com static const int TGT_O_EXCL = 00000200; //!< O_EXCL 767584SAli.Saidi@arm.com static const int TGT_O_NOCTTY = 00000400; //!< O_NOCTTY 777584SAli.Saidi@arm.com static const int TGT_O_TRUNC = 00001000; //!< O_TRUNC 787950SAli.Saidi@ARM.com static const int TGT_O_APPEND = 00002000; //!< O_APPEND 797950SAli.Saidi@ARM.com static const int TGT_O_NONBLOCK = 00004000; //!< O_NONBLOCK 807950SAli.Saidi@ARM.com static const int TGT_O_SYNC = 00010000; //!< O_SYNC 817950SAli.Saidi@ARM.com static const int TGT_FASYNC = 00020000; //!< FASYNC 827950SAli.Saidi@ARM.com static const int TGT_O_DIRECT = 00040000; //!< O_DIRECT 837950SAli.Saidi@ARM.com static const int TGT_O_LARGEFILE = 00100000; //!< O_LARGEFILE 847950SAli.Saidi@ARM.com static const int TGT_O_DIRECTORY = 00200000; //!< O_DIRECTORY 857950SAli.Saidi@ARM.com static const int TGT_O_NOFOLLOW = 00400000; //!< O_NOFOLLOW 867950SAli.Saidi@ARM.com static const int TGT_O_NOATIME = 01000000; //!< O_NOATIME 877950SAli.Saidi@ARM.com static const int TGT_O_CLOEXEC = 02000000; //!< O_NOATIME 887950SAli.Saidi@ARM.com 897950SAli.Saidi@ARM.com 907950SAli.Saidi@ARM.com //@} 917950SAli.Saidi@ARM.com 927950SAli.Saidi@ARM.com /// For mmap(). 937950SAli.Saidi@ARM.com static const unsigned TGT_MAP_ANONYMOUS = 0x20; 947950SAli.Saidi@ARM.com static const unsigned TGT_MAP_FIXED = 0x10; 957950SAli.Saidi@ARM.com 967950SAli.Saidi@ARM.com //@{ 977950SAli.Saidi@ARM.com /// For getrusage(). 987950SAli.Saidi@ARM.com static const int TGT_RUSAGE_SELF = 0; 998281SAli.Saidi@ARM.com static const int TGT_RUSAGE_CHILDREN = -1; 1008281SAli.Saidi@ARM.com static const int TGT_RUSAGE_BOTH = -2; 1018281SAli.Saidi@ARM.com //@} 1028299Schander.sudanthi@arm.com 1038299Schander.sudanthi@arm.com /// For table(). 1048299Schander.sudanthi@arm.com static const int TBL_SYSINFO = 12; 1058870SAli.Saidi@ARM.com 1068870SAli.Saidi@ARM.com /// Resource enumeration for getrlimit(). 1078988SAli.Saidi@ARM.com enum rlimit_resources { 1089958Smatt.evans@arm.com TGT_RLIMIT_CPU = 0, 1099958Smatt.evans@arm.com TGT_RLIMIT_FSIZE = 1, 1109958Smatt.evans@arm.com TGT_RLIMIT_DATA = 2, 1119958Smatt.evans@arm.com TGT_RLIMIT_STACK = 3, 1129958Smatt.evans@arm.com TGT_RLIMIT_CORE = 4, 1139958Smatt.evans@arm.com TGT_RLIMIT_RSS = 5, 1149958Smatt.evans@arm.com TGT_RLIMIT_NPROC = 6, 1159958Smatt.evans@arm.com TGT_RLIMIT_NOFILE = 7, 1167584SAli.Saidi@arm.com TGT_RLIMIT_MEMLOCK = 8, 1178299Schander.sudanthi@arm.com TGT_RLIMIT_AS = 9, 1188299Schander.sudanthi@arm.com TGT_RLIMIT_LOCKS = 10 1199958Smatt.evans@arm.com }; 1207584SAli.Saidi@arm.com 1217584SAli.Saidi@arm.com /// Limit struct for getrlimit/setrlimit. 1227584SAli.Saidi@arm.com struct rlimit { 1237584SAli.Saidi@arm.com uint32_t rlim_cur; //!< soft limit 1247584SAli.Saidi@arm.com uint32_t rlim_max; //!< hard limit 1257584SAli.Saidi@arm.com }; 1267584SAli.Saidi@arm.com 1277584SAli.Saidi@arm.com /// For gettimeofday(). 1287584SAli.Saidi@arm.com struct timeval { 1297584SAli.Saidi@arm.com int32_t tv_sec; //!< seconds 1307584SAli.Saidi@arm.com int32_t tv_usec; //!< microseconds 1317584SAli.Saidi@arm.com }; 1327584SAli.Saidi@arm.com 1337584SAli.Saidi@arm.com // For writev/readv 1347584SAli.Saidi@arm.com struct tgt_iovec { 1357950SAli.Saidi@ARM.com uint32_t iov_base; // void * 1367950SAli.Saidi@ARM.com uint32_t iov_len; 1377950SAli.Saidi@ARM.com }; 1387950SAli.Saidi@ARM.com 1397950SAli.Saidi@ARM.com 1407950SAli.Saidi@ARM.com typedef struct { 1417950SAli.Saidi@ARM.com uint32_t st_dev; 1427950SAli.Saidi@ARM.com uint32_t st_ino; 1437950SAli.Saidi@ARM.com uint16_t st_mode; 1447584SAli.Saidi@arm.com uint16_t st_nlink; 1458281SAli.Saidi@ARM.com uint16_t st_uid; 1468281SAli.Saidi@ARM.com uint16_t st_gid; 1478281SAli.Saidi@ARM.com uint32_t st_rdev; 1488524SAli.Saidi@ARM.com uint32_t st_size; 1498524SAli.Saidi@ARM.com uint32_t st_blksize; 1508524SAli.Saidi@ARM.com uint32_t st_blocks; 1519958Smatt.evans@arm.com uint32_t st_atimeX; 1529958Smatt.evans@arm.com uint32_t st_atime_nsec; 1539958Smatt.evans@arm.com uint32_t st_mtimeX; 1549958Smatt.evans@arm.com uint32_t st_mtime_nsec; 1559958Smatt.evans@arm.com uint32_t st_ctimeX; 1569958Smatt.evans@arm.com uint32_t st_ctime_nsec; 1579958Smatt.evans@arm.com } tgt_stat; 1589958Smatt.evans@arm.com 1599958Smatt.evans@arm.com typedef struct { 1609958Smatt.evans@arm.com uint64_t st_dev; 1619958Smatt.evans@arm.com uint8_t __pad0[4]; 1629958Smatt.evans@arm.com uint32_t __st_ino; 1639958Smatt.evans@arm.com uint32_t st_mode; 1649958Smatt.evans@arm.com uint32_t st_nlink; 1659958Smatt.evans@arm.com uint32_t st_uid; 1669958Smatt.evans@arm.com uint32_t st_gid; 1679958Smatt.evans@arm.com uint64_t st_rdev; 1689958Smatt.evans@arm.com uint8_t __pad3[4]; 1699958Smatt.evans@arm.com int64_t __attribute__ ((aligned (8))) st_size; 1709958Smatt.evans@arm.com uint32_t st_blksize; 1719958Smatt.evans@arm.com uint64_t __attribute__ ((aligned (8))) st_blocks; 1729958Smatt.evans@arm.com uint32_t st_atimeX; 1739958Smatt.evans@arm.com uint32_t st_atime_nsec; 1749958Smatt.evans@arm.com uint32_t st_mtimeX; 1759958Smatt.evans@arm.com uint32_t st_mtime_nsec; 1769958Smatt.evans@arm.com uint32_t st_ctimeX; 1779958Smatt.evans@arm.com uint32_t st_ctime_nsec; 1789958Smatt.evans@arm.com uint64_t st_ino; 1799958Smatt.evans@arm.com } tgt_stat64; 1809958Smatt.evans@arm.com 1819958Smatt.evans@arm.com typedef struct { 1829958Smatt.evans@arm.com int32_t uptime; /* Seconds since boot */ 1839958Smatt.evans@arm.com uint32_t loads[3]; /* 1, 5, and 15 minute load averages */ 1849958Smatt.evans@arm.com uint32_t totalram; /* Total usable main memory size */ 1859958Smatt.evans@arm.com uint32_t freeram; /* Available memory size */ 1869958Smatt.evans@arm.com uint32_t sharedram; /* Amount of shared memory */ 1879958Smatt.evans@arm.com uint32_t bufferram; /* Memory used by buffers */ 1889958Smatt.evans@arm.com uint32_t totalswap; /* Total swap space size */ 1899958Smatt.evans@arm.com uint32_t freeswap; /* swap space still available */ 1909958Smatt.evans@arm.com uint16_t procs; /* Number of current processes */ 1919958Smatt.evans@arm.com uint32_t totalhigh; /* Total high memory size */ 1929958Smatt.evans@arm.com uint32_t freehigh; /* Available high memory size */ 1939958Smatt.evans@arm.com uint32_t mem_unit; /* Memory unit size in bytes */ 1949958Smatt.evans@arm.com } tgt_sysinfo; 1959958Smatt.evans@arm.com 1969958Smatt.evans@arm.com /// For getrusage(). 1979958Smatt.evans@arm.com struct rusage { 1989958Smatt.evans@arm.com struct timeval ru_utime; //!< user time used 1999958Smatt.evans@arm.com struct timeval ru_stime; //!< system time used 2009958Smatt.evans@arm.com int32_t ru_maxrss; //!< max rss 2019958Smatt.evans@arm.com int32_t ru_ixrss; //!< integral shared memory size 2029958Smatt.evans@arm.com int32_t ru_idrss; //!< integral unshared data " 2039958Smatt.evans@arm.com int32_t ru_isrss; //!< integral unshared stack " 2049958Smatt.evans@arm.com int32_t ru_minflt; //!< page reclaims - total vmfaults 2059958Smatt.evans@arm.com int32_t ru_majflt; //!< page faults 2069958Smatt.evans@arm.com int32_t ru_nswap; //!< swaps 2079958Smatt.evans@arm.com int32_t ru_inblock; //!< block input operations 2089958Smatt.evans@arm.com int32_t ru_oublock; //!< block output operations 2099958Smatt.evans@arm.com int32_t ru_msgsnd; //!< messages sent 2109958Smatt.evans@arm.com int32_t ru_msgrcv; //!< messages received 2119958Smatt.evans@arm.com int32_t ru_nsignals; //!< signals received 2129958Smatt.evans@arm.com int32_t ru_nvcsw; //!< voluntary context switches 2139958Smatt.evans@arm.com int32_t ru_nivcsw; //!< involuntary " 2149958Smatt.evans@arm.com }; 2159958Smatt.evans@arm.com 2169958Smatt.evans@arm.com /// For times(). 2179958Smatt.evans@arm.com struct tms { 2189958Smatt.evans@arm.com int32_t tms_utime; //!< user time 2199958Smatt.evans@arm.com int32_t tms_stime; //!< system time 2209958Smatt.evans@arm.com int32_t tms_cutime; //!< user time of children 2219958Smatt.evans@arm.com int32_t tms_cstime; //!< system time of children 2229958Smatt.evans@arm.com }; 2239958Smatt.evans@arm.com 2249958Smatt.evans@arm.com 2259958Smatt.evans@arm.com}; 2269958Smatt.evans@arm.com 2279958Smatt.evans@arm.com#endif 2289958Smatt.evans@arm.com