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);
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 )
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
------------------------------------------------------------------ */
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 )
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
//----------------------------------------------------------------------