syscall emulation: Enabled getrlimit and getrusage for x86.
Added/moved rlimit constants to base linux header file. This patch is a revised version of Vince Weaver's earlier patch.
This commit is contained in:
@@ -83,13 +83,6 @@ class AlphaLinux : public Linux
|
||||
static const unsigned GSI_IEEE_FP_CONTROL = 45;
|
||||
//@}
|
||||
|
||||
//@{
|
||||
/// For getrusage().
|
||||
static const int TGT_RUSAGE_SELF = 0;
|
||||
static const int TGT_RUSAGE_CHILDREN = -1;
|
||||
static const int TGT_RUSAGE_BOTH = -2;
|
||||
//@}
|
||||
|
||||
//@{
|
||||
/// For setsysinfo().
|
||||
static const unsigned SSI_IEEE_FP_CONTROL = 14; //!< ieee_set_fp_control()
|
||||
@@ -129,21 +122,11 @@ class AlphaLinux : public Linux
|
||||
/// For table().
|
||||
static const int TBL_SYSINFO = 12;
|
||||
|
||||
/// Resource enumeration for getrlimit().
|
||||
enum rlimit_resources {
|
||||
TGT_RLIMIT_CPU = 0,
|
||||
TGT_RLIMIT_FSIZE = 1,
|
||||
TGT_RLIMIT_DATA = 2,
|
||||
TGT_RLIMIT_STACK = 3,
|
||||
TGT_RLIMIT_CORE = 4,
|
||||
TGT_RLIMIT_RSS = 5,
|
||||
TGT_RLIMIT_NOFILE = 6,
|
||||
TGT_RLIMIT_AS = 7,
|
||||
TGT_RLIMIT_VMEM = 7,
|
||||
TGT_RLIMIT_NPROC = 8,
|
||||
TGT_RLIMIT_MEMLOCK = 9,
|
||||
TGT_RLIMIT_LOCKS = 10
|
||||
};
|
||||
/// Resource constants for getrlimit() (overide some generics).
|
||||
static const unsigned TGT_RLIMIT_NPROC = 8;
|
||||
static const unsigned TGT_RLIMIT_AS = 7;
|
||||
static const unsigned TGT_RLIMIT_NOFILE = 6;
|
||||
static const unsigned TGT_RLIMIT_MEMLOCK = 9;
|
||||
|
||||
typedef struct {
|
||||
int64_t uptime; /* Seconds since boot */
|
||||
|
||||
@@ -93,31 +93,9 @@ class ArmLinux : public Linux
|
||||
static const unsigned TGT_MAP_ANONYMOUS = 0x20;
|
||||
static const unsigned TGT_MAP_FIXED = 0x10;
|
||||
|
||||
//@{
|
||||
/// For getrusage().
|
||||
static const int TGT_RUSAGE_SELF = 0;
|
||||
static const int TGT_RUSAGE_CHILDREN = -1;
|
||||
static const int TGT_RUSAGE_BOTH = -2;
|
||||
//@}
|
||||
|
||||
/// For table().
|
||||
static const int TBL_SYSINFO = 12;
|
||||
|
||||
/// Resource enumeration for getrlimit().
|
||||
enum rlimit_resources {
|
||||
TGT_RLIMIT_CPU = 0,
|
||||
TGT_RLIMIT_FSIZE = 1,
|
||||
TGT_RLIMIT_DATA = 2,
|
||||
TGT_RLIMIT_STACK = 3,
|
||||
TGT_RLIMIT_CORE = 4,
|
||||
TGT_RLIMIT_RSS = 5,
|
||||
TGT_RLIMIT_NPROC = 6,
|
||||
TGT_RLIMIT_NOFILE = 7,
|
||||
TGT_RLIMIT_MEMLOCK = 8,
|
||||
TGT_RLIMIT_AS = 9,
|
||||
TGT_RLIMIT_LOCKS = 10
|
||||
};
|
||||
|
||||
/// Limit struct for getrlimit/setrlimit.
|
||||
struct rlimit {
|
||||
uint32_t rlim_cur; //!< soft limit
|
||||
|
||||
@@ -151,7 +151,7 @@ SyscallDesc ArmLinuxProcess::syscallDescs[] = {
|
||||
/* 73 */ SyscallDesc("sigpending", unimplementedFunc),
|
||||
/* 74 */ SyscallDesc("sethostname", ignoreFunc),
|
||||
/* 75 */ SyscallDesc("setrlimit", ignoreFunc),
|
||||
/* 76 */ SyscallDesc("getrlimit", unimplementedFunc),
|
||||
/* 76 */ SyscallDesc("getrlimit", getrlimitFunc<ArmLinux>),
|
||||
/* 77 */ SyscallDesc("getrusage", getrusageFunc<ArmLinux>),
|
||||
/* 78 */ SyscallDesc("gettimeofday", gettimeofdayFunc<ArmLinux>),
|
||||
/* 79 */ SyscallDesc("settimeofday", unimplementedFunc),
|
||||
|
||||
@@ -78,13 +78,6 @@ class MipsLinux : public Linux
|
||||
static const unsigned GSI_CLK_TCK = 42; //!< clock freq in Hz
|
||||
//@}
|
||||
|
||||
//@{
|
||||
/// For getrusage().
|
||||
static const int TGT_RUSAGE_SELF = 0;
|
||||
static const int TGT_RUSAGE_CHILDREN = -1;
|
||||
static const int TGT_RUSAGE_BOTH = -2;
|
||||
//@}
|
||||
|
||||
//@{
|
||||
/// For setsysinfo().
|
||||
static const unsigned SSI_IEEE_FP_CONTROL = 14; //!< ieee_set_fp_control()
|
||||
@@ -121,22 +114,12 @@ class MipsLinux : public Linux
|
||||
/// For table().
|
||||
static const int TBL_SYSINFO = 12;
|
||||
|
||||
/// Resource enumeration for getrlimit()/setrlimit().
|
||||
enum rlimit_resources {
|
||||
TGT_RLIMIT_CPU = 0,
|
||||
TGT_RLIMIT_FSIZE = 1,
|
||||
TGT_RLIMIT_DATA = 2,
|
||||
TGT_RLIMIT_STACK = 3,
|
||||
TGT_RLIMIT_CORE = 4,
|
||||
TGT_RLIMIT_NOFILE = 5,
|
||||
TGT_RLIMIT_AS = 6,
|
||||
TGT_RLIMIT_RSS = 7,
|
||||
TGT_RLIMIT_VMEM = 7,
|
||||
TGT_RLIMIT_NPROC = 8,
|
||||
TGT_RLIMIT_MEMLOCK = 9,
|
||||
TGT_RLIMIT_LOCKS = 10,
|
||||
NUM_RLIMIT_RESOURCES
|
||||
};
|
||||
/// Resource constants for getrlimit() (overide some generics).
|
||||
static const unsigned TGT_RLIMIT_NPROC = 8;
|
||||
static const unsigned TGT_RLIMIT_AS = 6;
|
||||
static const unsigned RLIMIT_RSS = 7;
|
||||
static const unsigned TGT_RLIMIT_NOFILE = 5;
|
||||
static const unsigned TGT_RLIMIT_MEMLOCK = 9;
|
||||
|
||||
/// Offset used to make sure that processes don't
|
||||
/// assign themselves to process IDs reserved for
|
||||
|
||||
@@ -167,6 +167,9 @@ class Sparc32Linux : public SparcLinux
|
||||
uint32_t mem_unit; /* Memory unit size in bytes */
|
||||
} tgt_sysinfo;
|
||||
|
||||
/// Resource constants for getrlimit() (overide some generics).
|
||||
static const unsigned TGT_RLIMIT_NPROC = 7;
|
||||
static const unsigned TGT_RLIMIT_NOFILE = 6;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -310,8 +310,8 @@ SyscallDesc X86_64LinuxProcess::syscallDescs[] = {
|
||||
/* 94 */ SyscallDesc("lchown", unimplementedFunc),
|
||||
/* 95 */ SyscallDesc("umask", unimplementedFunc),
|
||||
/* 96 */ SyscallDesc("gettimeofday", unimplementedFunc),
|
||||
/* 97 */ SyscallDesc("getrlimit", unimplementedFunc),
|
||||
/* 98 */ SyscallDesc("getrusage", unimplementedFunc),
|
||||
/* 97 */ SyscallDesc("getrlimit", getrlimitFunc<X86Linux64>),
|
||||
/* 98 */ SyscallDesc("getrusage", getrusageFunc<X86Linux64>),
|
||||
/* 99 */ SyscallDesc("sysinfo", sysinfoFunc<X86Linux64>),
|
||||
/* 100 */ SyscallDesc("times", timesFunc<X86Linux64>),
|
||||
/* 101 */ SyscallDesc("ptrace", unimplementedFunc),
|
||||
@@ -568,8 +568,8 @@ SyscallDesc I386LinuxProcess::syscallDescs[] = {
|
||||
/* 73 */ SyscallDesc("sigpending", unimplementedFunc),
|
||||
/* 74 */ SyscallDesc("sethostname", unimplementedFunc),
|
||||
/* 75 */ SyscallDesc("setrlimit", ignoreFunc),
|
||||
/* 76 */ SyscallDesc("getrlimit", unimplementedFunc),
|
||||
/* 77 */ SyscallDesc("getrusage", unimplementedFunc),
|
||||
/* 76 */ SyscallDesc("getrlimit", getrlimitFunc<X86Linux32>),
|
||||
/* 77 */ SyscallDesc("getrusage", getrusageFunc<X86Linux32>),
|
||||
/* 78 */ SyscallDesc("gettimeofday", unimplementedFunc),
|
||||
/* 79 */ SyscallDesc("settimeofday", unimplementedFunc),
|
||||
/* 80 */ SyscallDesc("getgroups", unimplementedFunc),
|
||||
|
||||
@@ -174,7 +174,30 @@ class Linux : public OperatingSystem
|
||||
}
|
||||
|
||||
|
||||
/// Resource constants for getrlimit().
|
||||
static const unsigned TGT_RLIMIT_CPU = 0;
|
||||
static const unsigned TGT_RLIMIT_FSIZE = 1;
|
||||
static const unsigned TGT_RLIMIT_DATA = 2;
|
||||
static const unsigned TGT_RLIMIT_STACK = 3;
|
||||
static const unsigned TGT_RLIMIT_CORE = 4;
|
||||
static const unsigned TGT_RLIMIT_RSS = 5;
|
||||
static const unsigned TGT_RLIMIT_NPROC = 6;
|
||||
static const unsigned TGT_RLIMIT_NOFILE = 7;
|
||||
static const unsigned TGT_RLIMIT_MEMLOCK = 8;
|
||||
static const unsigned TGT_RLIMIT_AS = 9;
|
||||
static const unsigned TGT_RLIMIT_LOCKS = 10;
|
||||
static const unsigned TGT_RLIMIT_SIGPENDING = 11;
|
||||
static const unsigned TGT_RLIMIT_MSGQUEUE = 12;
|
||||
static const unsigned TGT_RLIMIT_NICE = 13;
|
||||
static const unsigned TGT_RLIMIT_RTPRIO = 14;
|
||||
static const unsigned TGT_RLIMIT_RTTIME = 15;
|
||||
static const unsigned TGT_RLIM_NLIMITS = 16;
|
||||
|
||||
/// For getrusage().
|
||||
static const int TGT_RUSAGE_SELF = 0;
|
||||
static const int TGT_RUSAGE_CHILDREN = -1;
|
||||
static const int TGT_RUSAGE_BOTH = -2;
|
||||
|
||||
struct rusage {
|
||||
struct timeval ru_utime; //!< user time used
|
||||
struct timeval ru_stime; //!< system time used
|
||||
|
||||
Reference in New Issue
Block a user