where XXXXXX is the bug number as listed below.
345077 linux syscall execveat support (linux 3.19)
+369029 handle linux syscalls sched_getattr and sched_setattr
n-i-bz helgrind: If hg_cli__realloc fails, return NULL.
423021 PPC: Add missing ISA 3.0 documentation link and HWCAPS test.
// syscalls.
DECL_TEMPLATE(linux, sys_sched_setparam);
DECL_TEMPLATE(linux, sys_sched_getparam);
+DECL_TEMPLATE(linux, sys_sched_setattr);
+DECL_TEMPLATE(linux, sys_sched_getattr);
DECL_TEMPLATE(linux, sys_sched_setscheduler);
DECL_TEMPLATE(linux, sys_sched_getscheduler);
DECL_TEMPLATE(linux, sys_sched_yield);
LINX_(__NR_process_vm_writev, sys_process_vm_writev),// 311
LINX_(__NR_kcmp, sys_kcmp), // 312
LINX_(__NR_finit_module, sys_finit_module), // 313
-// LIN__(__NR_sched_setattr, sys_ni_syscall), // 314
-
-// LIN__(__NR_sched_getattr, sys_ni_syscall), // 315
+ LINX_(__NR_sched_setattr, sys_sched_setattr), // 314
+ LINXY(__NR_sched_getattr, sys_sched_getattr), // 315
LINX_(__NR_renameat2, sys_renameat2), // 316
// LIN__(__NR_seccomp, sys_ni_syscall), // 317
LINXY(__NR_getrandom, sys_getrandom), // 318
LINXY(__NR_process_vm_readv, sys_process_vm_readv), // 376
LINX_(__NR_process_vm_writev, sys_process_vm_writev),// 377
+ LINX_(__NR_sched_setattr, sys_sched_setattr), // 380
+ LINXY(__NR_sched_getattr, sys_sched_getattr), // 381
LINX_(__NR_renameat2, sys_renameat2), // 382
LINXY(__NR_getrandom, sys_getrandom), // 384
LINX_(__NR_process_vm_writev, sys_process_vm_writev), // 271
LINX_(__NR_kcmp, sys_kcmp), // 272
LINX_(__NR_finit_module, sys_finit_module), // 273
- // (__NR_sched_setattr, sys_ni_syscall), // 274
- // (__NR_sched_getattr, sys_ni_syscall), // 275
+ LINX_(__NR_sched_setattr, sys_sched_setattr), // 274
+ LINXY(__NR_sched_getattr, sys_sched_getattr), // 275
LINX_(__NR_renameat2, sys_renameat2), // 276
// (__NR_seccomp, sys_ni_syscall), // 277
LINXY(__NR_getrandom, sys_getrandom), // 278
POST_MEM_WRITE( ARG2, sizeof(struct vki_sched_param) );
}
+PRE(sys_sched_setattr)
+{
+ struct vki_sched_attr *attr;
+ PRINT("sched_setattr ( %ld, %#" FMT_REGWORD "x, %#"
+ FMT_REGWORD "x )", SARG1, ARG2, ARG3 );
+ PRE_REG_READ3(long, "sched_setattr",
+ vki_pid_t, pid, struct sched_attr *, p, unsigned int, flags);
+ /* We need to be able to read at least the size field. */
+ PRE_MEM_READ( "sched_setattr(attr->size)", ARG2, sizeof(vki_uint32_t) );
+ attr = (struct vki_sched_attr *)(Addr)ARG2;
+ if (ML_(safe_to_deref)(attr,sizeof(vki_uint32_t)))
+ PRE_MEM_READ( "sched_setattr(attr)", (Addr)attr, attr->size);
+}
+
+PRE(sys_sched_getattr)
+{
+ struct vki_sched_attr *attr;
+ PRINT("sched_getattr ( %ld, %#" FMT_REGWORD "x, %ld, %#"
+ FMT_REGWORD "x )", SARG1, ARG2, ARG3, ARG4 );
+ PRE_REG_READ4(long, "sched_getattr",
+ vki_pid_t, pid, struct sched_attr *, p,
+ unsigned int, size, unsigned int, flags);
+ /* We need to be able to read at least the size field. */
+ PRE_MEM_READ( "sched_setattr(attr->size)", ARG2, sizeof(vki_uint32_t) );
+ /* And the kernel needs to be able to write to the whole struct size. */
+ attr = (struct vki_sched_attr *)(Addr)ARG2;
+ if (ML_(safe_to_deref)(attr,sizeof(vki_uint32_t)))
+ PRE_MEM_WRITE( "sched_setattr(attr)", (Addr)attr, attr->size);
+}
+POST(sys_sched_getattr)
+{
+ struct vki_sched_attr *attr = (struct vki_sched_attr *)(Addr)ARG2;
+ POST_MEM_WRITE( (Addr)attr, attr->size );
+}
+
PRE(sys_sched_getscheduler)
{
PRINT("sys_sched_getscheduler ( %ld )", SARG1);
LINXY (__NR_process_vm_readv, sys_process_vm_readv), // 345
LINX_ (__NR_process_vm_writev, sys_process_vm_writev), // 346
//..
+ LINX_(__NR_sched_setattr, sys_sched_setattr), // 349
+ LINXY(__NR_sched_getattr, sys_sched_getattr), // 350
+ //..
LINXY (__NR_getrandom, sys_getrandom), // 353
LINXY (__NR_memfd_create, sys_memfd_create), // 354
//..
LINXY (__NR_clock_adjtime, sys_clock_adjtime),
LINXY (__NR_process_vm_readv, sys_process_vm_readv),
LINX_ (__NR_process_vm_writev, sys_process_vm_writev),
+ LINX_ (__NR_sched_setattr, sys_sched_setattr),
+ LINXY (__NR_sched_getattr, sys_sched_getattr),
LINXY (__NR_getrandom, sys_getrandom),
LINXY (__NR_memfd_create, sys_memfd_create),
LINX_ (__NR_execveat, sys_execveat),
LINX_ (__NR_process_vm_writev, sys_process_vm_writev),
LINX_ (__NR_kcmp, sys_kcmp),
LINX_ (__NR_renameat2, sys_renameat2),
+ LINX_ (__NR_sched_setattr, sys_sched_setattr),
+ LINXY (__NR_sched_getattr, sys_sched_getattr),
LINXY (__NR_getrandom, sys_getrandom),
LINXY (__NR_memfd_create, sys_memfd_create),
LINXY (__NR_statx, sys_statx),
LINXY(__NR_process_vm_readv, sys_process_vm_readv), // 351
LINX_(__NR_process_vm_writev, sys_process_vm_writev),// 352
+ LINX_(__NR_sched_setattr, sys_sched_setattr), // 355
+ LINXY(__NR_sched_getattr, sys_sched_getattr), // 356
+
LINXY(__NR_getrandom, sys_getrandom), // 359
LINXY(__NR_memfd_create, sys_memfd_create), // 360
LINXY(__NR_process_vm_readv, sys_process_vm_readv), // 351
LINX_(__NR_process_vm_writev, sys_process_vm_writev),// 352
+ LINX_(__NR_sched_setattr, sys_sched_setattr), // 355
+ LINXY(__NR_sched_getattr, sys_sched_getattr), // 356
LINX_(__NR_renameat2, sys_renameat2), // 357
LINXY(__NR_getrandom, sys_getrandom), // 359
LINX_(__NR_kcmp, sys_kcmp), // 343
// ?????(__NR_finit_module, ), // 344
-// ?????(__NR_sched_setattr, ), // 345
-// ?????(__NR_sched_getattr, ), // 346
+ LINX_(__NR_sched_setattr, sys_sched_setattr), // 345
+ LINXY(__NR_sched_getattr, sys_sched_getattr), // 346
LINX_(__NR_renameat2, sys_renameat2), // 347
// ?????(__NR_seccomp, ), // 348
LINXY(__NR_getrandom, sys_getrandom), // 349
LINX_(__NR_kcmp, sys_kcmp), // 349
// LIN__(__NR_finit_module, sys_ni_syscall), // 350
-// LIN__(__NR_sched_setattr, sys_ni_syscall), // 351
-// LIN__(__NR_sched_getattr, sys_ni_syscall), // 352
+ LINX_(__NR_sched_setattr, sys_sched_setattr), // 351
+ LINXY(__NR_sched_getattr, sys_sched_getattr), // 352
LINX_(__NR_renameat2, sys_renameat2), // 353
// LIN__(__NR_seccomp, sys_ni_syscall), // 354
int sched_priority;
};
+struct vki_sched_attr {
+ vki_uint32_t size;
+ vki_uint32_t sched_policy;
+ vki_uint64_t sched_flags;
+
+ /* SCHED_NORMAL, SCHED_BATCH */
+ vki_int32_t sched_nice;
+
+ /* SCHED_FIFO, SCHED_RR */
+ vki_uint32_t sched_priority;
+
+ /* SCHED_DEADLINE */
+ vki_uint64_t sched_runtime;
+ vki_uint64_t sched_deadline;
+ vki_uint64_t sched_period;
+};
+
#define VKI_TASK_COMM_LEN 16
//----------------------------------------------------------------------