|
From: <sv...@va...> - 2011-06-08 10:00:45
|
Author: tom
Date: 2011-06-08 10:55:54 +0100 (Wed, 08 Jun 2011)
New Revision: 11806
Log:
Add support for prlimit64 on x86 and amd64.
Modified:
trunk/coregrind/m_syswrap/priv_syswrap-linux.h
trunk/coregrind/m_syswrap/syswrap-amd64-linux.c
trunk/coregrind/m_syswrap/syswrap-linux.c
trunk/coregrind/m_syswrap/syswrap-x86-linux.c
trunk/include/vki/vki-linux.h
Modified: trunk/coregrind/m_syswrap/priv_syswrap-linux.h
===================================================================
--- trunk/coregrind/m_syswrap/priv_syswrap-linux.h 2011-06-08 09:12:07 UTC (rev 11805)
+++ trunk/coregrind/m_syswrap/priv_syswrap-linux.h 2011-06-08 09:55:54 UTC (rev 11806)
@@ -101,6 +101,8 @@
DECL_TEMPLATE(linux, sys_fallocate);
+DECL_TEMPLATE(linux, sys_prlimit64);
+
DECL_TEMPLATE(linux, sys_gettid);
DECL_TEMPLATE(linux, sys_set_tid_address);
DECL_TEMPLATE(linux, sys_tkill);
Modified: trunk/coregrind/m_syswrap/syswrap-amd64-linux.c
===================================================================
--- trunk/coregrind/m_syswrap/syswrap-amd64-linux.c 2011-06-08 09:12:07 UTC (rev 11805)
+++ trunk/coregrind/m_syswrap/syswrap-amd64-linux.c 2011-06-08 09:55:54 UTC (rev 11806)
@@ -1410,7 +1410,19 @@
LINXY(__NR_preadv, sys_preadv), // 295
LINX_(__NR_pwritev, sys_pwritev), // 296
LINXY(__NR_rt_tgsigqueueinfo, sys_rt_tgsigqueueinfo),// 297
- LINXY(__NR_perf_event_open, sys_perf_event_open) // 298
+ LINXY(__NR_perf_event_open, sys_perf_event_open), // 298
+// LINX_(__NR_recvmmsg, sys_ni_syscall), // 299
+
+// LINX_(__NR_fanotify_init, sys_ni_syscall), // 300
+// LINX_(__NR_fanotify_mark, sys_ni_syscall), // 301
+ LINXY(__NR_prlimit64, sys_prlimit64) // 302
+// LINX_(__NR_name_to_handle_at, sys_ni_syscall), // 303
+// LINX_(__NR_open_by_handle_at, sys_ni_syscall), // 304
+
+// LINX_(__NR_clock_adjtime, sys_ni_syscall), // 305
+// LINX_(__NR_syncfs, sys_ni_syscall), // 306
+// LINX_(__NR_sendmmsg, sys_ni_syscall), // 307
+// LINX_(__NR_setns, sys_ni_syscall), // 308
};
SyscallTableEntry* ML_(get_linux_syscall_entry) ( UInt sysno )
Modified: trunk/coregrind/m_syswrap/syswrap-linux.c
===================================================================
--- trunk/coregrind/m_syswrap/syswrap-linux.c 2011-06-08 09:12:07 UTC (rev 11805)
+++ trunk/coregrind/m_syswrap/syswrap-linux.c 2011-06-08 09:55:54 UTC (rev 11806)
@@ -1240,6 +1240,43 @@
SET_STATUS_Failure( VKI_EBADF );
}
+PRE(sys_prlimit64)
+{
+ PRINT("sys_prlimit64 ( %ld, %ld, %#lx, %#lx )", ARG1,ARG2,ARG3,ARG4);
+ PRE_REG_READ4(long, "prlimit64",
+ vki_pid_t, pid, unsigned int, resource,
+ const struct rlimit64 *, new_rlim,
+ struct rlimit64 *, old_rlim);
+ if (ARG3)
+ PRE_MEM_READ( "rlimit64(new_rlim)", ARG3, sizeof(struct vki_rlimit64) );
+ if (ARG4)
+ PRE_MEM_WRITE( "rlimit64(old_rlim)", ARG4, sizeof(struct vki_rlimit64) );
+}
+
+POST(sys_prlimit64)
+{
+ if (ARG4) {
+ POST_MEM_WRITE( ARG4, sizeof(struct vki_rlimit64) );
+
+ switch (ARG2) {
+ case VKI_RLIMIT_NOFILE:
+ ((struct vki_rlimit64 *)ARG4)->rlim_cur = VG_(fd_soft_limit);
+ ((struct vki_rlimit64 *)ARG4)->rlim_max = VG_(fd_hard_limit);
+ break;
+
+ case VKI_RLIMIT_DATA:
+ ((struct vki_rlimit64 *)ARG4)->rlim_cur = VG_(client_rlimit_data).rlim_cur;
+ ((struct vki_rlimit64 *)ARG4)->rlim_max = VG_(client_rlimit_data).rlim_max;
+ break;
+
+ case VKI_RLIMIT_STACK:
+ ((struct vki_rlimit64 *)ARG4)->rlim_cur = VG_(client_rlimit_stack).rlim_cur;
+ ((struct vki_rlimit64 *)ARG4)->rlim_max = VG_(client_rlimit_stack).rlim_max;
+ break;
+ }
+ }
+}
+
/* ---------------------------------------------------------------------
tid-related wrappers
------------------------------------------------------------------ */
Modified: trunk/coregrind/m_syswrap/syswrap-x86-linux.c
===================================================================
--- trunk/coregrind/m_syswrap/syswrap-x86-linux.c 2011-06-08 09:12:07 UTC (rev 11805)
+++ trunk/coregrind/m_syswrap/syswrap-x86-linux.c 2011-06-08 09:55:54 UTC (rev 11806)
@@ -2280,7 +2280,19 @@
LINX_(__NR_pwritev, sys_pwritev), // 334
LINXY(__NR_rt_tgsigqueueinfo, sys_rt_tgsigqueueinfo),// 335
- LINXY(__NR_perf_event_open, sys_perf_event_open) // 336
+ LINXY(__NR_perf_event_open, sys_perf_event_open), // 336
+// LINX_(__NR_recvmmsg, sys_ni_syscall), // 337
+// LINX_(__NR_fanotify_init, sys_ni_syscall), // 338
+// LINX_(__NR_fanotify_mark, sys_ni_syscall), // 339
+
+ LINXY(__NR_prlimit64, sys_prlimit64) // 340
+// LINX_(__NR_name_to_handle_at, sys_ni_syscall), // 341
+// LINX_(__NR_open_by_handle_at, sys_ni_syscall), // 342
+// LINX_(__NR_clock_adjtime, sys_ni_syscall), // 343
+// LINX_(__NR_syncfs, sys_ni_syscall), // 344
+
+// LINX_(__NR_sendmmsg, sys_ni_syscall), // 345
+// LINX_(__NR_setns, sys_ni_syscall), // 346
};
SyscallTableEntry* ML_(get_linux_syscall_entry) ( UInt sysno )
Modified: trunk/include/vki/vki-linux.h
===================================================================
--- trunk/include/vki/vki-linux.h 2011-06-08 09:12:07 UTC (rev 11805)
+++ trunk/include/vki/vki-linux.h 2011-06-08 09:55:54 UTC (rev 11806)
@@ -931,6 +931,11 @@
unsigned long rlim_max;
};
+struct vki_rlimit64 {
+ __vki_u64 rlim_cur;
+ __vki_u64 rlim_max;
+};
+
//----------------------------------------------------------------------
// From linux-2.6.8.1/include/linux/elfcore.h
//----------------------------------------------------------------------
|