Based on a patch from Stefan Sørensen on BZ#330469.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13785
328711 valgrind.1 manpage "memcheck options" section is badly generated
329612 Incorrect handling of AT_BASE for image execution
330459 --track-fds=yes doesn't track eventfds
+330469 Add clock_adjtime syscall support
Release 3.9.0 (31 October 2013)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
DECL_TEMPLATE(linux, sys_clock_gettime);
DECL_TEMPLATE(linux, sys_clock_getres);
DECL_TEMPLATE(linux, sys_clock_nanosleep);
+DECL_TEMPLATE(linux, sys_clock_adjtime);
DECL_TEMPLATE(linux, sys_timer_create); // Linux: varies across archs?
DECL_TEMPLATE(linux, sys_timer_settime);
LINXY(__NR_name_to_handle_at, sys_name_to_handle_at),// 303
LINXY(__NR_open_by_handle_at, sys_open_by_handle_at),// 304
-// LINX_(__NR_clock_adjtime, sys_ni_syscall), // 305
+ LINXY(__NR_clock_adjtime, sys_clock_adjtime), // 305
// LINX_(__NR_syncfs, sys_ni_syscall), // 306
LINXY(__NR_sendmmsg, sys_sendmmsg), // 307
// LINX_(__NR_setns, sys_ni_syscall), // 308
LINX_(__NR_fanotify_mark, sys_fanotify_mark), // 368
LINXY(__NR_prlimit64, sys_prlimit64), // 369
LINXY(__NR_name_to_handle_at, sys_name_to_handle_at),// 370
- LINXY(__NR_open_by_handle_at, sys_open_by_handle_at) // 371
+ LINXY(__NR_open_by_handle_at, sys_open_by_handle_at),// 371
+ LINXY(__NR_clock_adjtime, sys_clock_adjtime) // 372
};
//ZZ LINXY(__NR_accept4, sys_accept4), // 366
//ZZ
//ZZ LINXY(__NR_name_to_handle_at, sys_name_to_handle_at),// 370
-//ZZ LINXY(__NR_open_by_handle_at, sys_open_by_handle_at) // 371
+//ZZ LINXY(__NR_open_by_handle_at, sys_open_by_handle_at),// 371
+//ZZ LINXY(__NR_clock_adjtime, sys_clock_adjtime) // 372
};
POST_MEM_WRITE( ARG1, sizeof(struct vki_timex) );
}
+PRE(sys_clock_adjtime)
+{
+ struct vki_timex *tx = (struct vki_timex *)ARG2;
+ PRINT("sys_clock_adjtime ( %ld, %#lx )", ARG1,ARG2);
+ PRE_REG_READ2(long, "clock_adjtime", vki_clockid_t, id, struct timex *, buf);
+ PRE_MEM_READ( "clock_adjtime(timex->modes)", ARG2, sizeof(tx->modes));
+
+#define ADJX(bits,field) \
+ if (tx->modes & (bits)) \
+ PRE_MEM_READ( "clock_adjtime(timex->"#field")", \
+ (Addr)&tx->field, sizeof(tx->field))
+
+ if (tx->modes & VKI_ADJ_ADJTIME) {
+ if (!(tx->modes & VKI_ADJ_OFFSET_READONLY))
+ PRE_MEM_READ( "clock_adjtime(timex->offset)", (Addr)&tx->offset, sizeof(tx->offset));
+ } else {
+ ADJX(VKI_ADJ_OFFSET, offset);
+ ADJX(VKI_ADJ_FREQUENCY, freq);
+ ADJX(VKI_ADJ_MAXERROR, maxerror);
+ ADJX(VKI_ADJ_ESTERROR, esterror);
+ ADJX(VKI_ADJ_STATUS, status);
+ ADJX(VKI_ADJ_TIMECONST|VKI_ADJ_TAI, constant);
+ ADJX(VKI_ADJ_TICK, tick);
+ }
+#undef ADJX
+
+ PRE_MEM_WRITE( "adjtimex(timex)", ARG2, sizeof(struct vki_timex));
+}
+
+POST(sys_clock_adjtime)
+{
+ POST_MEM_WRITE( ARG2, sizeof(struct vki_timex) );
+}
+
PRE(sys_ioperm)
{
PRINT("sys_ioperm ( %ld, %ld, %ld )", ARG1, ARG2, ARG3 );
//..
LINXY (__NR_prlimit64, sys_prlimit64), // 338
//..
+ LINXY (__NR_clock_adjtime, sys_clock_adjtime), // 341
+ //..
LINXY (__NR_process_vm_readv, sys_process_vm_readv), // 345
LINX_ (__NR_process_vm_writev, sys_process_vm_writev) // 346
};
LINXY (__NR_timerfd_settime, sys_timerfd_settime),
LINXY (__NR_newfstatat, sys_newfstatat),
LINXY (__NR_prlimit64, sys_prlimit64),
+ 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_pwritev, sys_pwritev), // 321
LINXY(__NR_rt_tgsigqueueinfo, sys_rt_tgsigqueueinfo),// 322
+ LINX_(__NR_clock_adjtime, sys_clock_adjtime), // 347
+
LINXY(__NR_process_vm_readv, sys_process_vm_readv), // 351
LINX_(__NR_process_vm_writev, sys_process_vm_writev) // 352
};
LINX_(__NR_pwritev, sys_pwritev), // 321
LINXY(__NR_rt_tgsigqueueinfo, sys_rt_tgsigqueueinfo),// 322
+ LINXY(__NR_clock_adjtime, sys_clock_adjtime), // 347
+
LINXY(__NR_process_vm_readv, sys_process_vm_readv), // 351
LINX_(__NR_process_vm_writev, sys_process_vm_writev) // 352
};
LINXY(__NR_prlimit64, sys_prlimit64), // 334
// ?????(__NR_name_to_handle_at, ), // 335
// ?????(__NR_open_by_handle_at, ), // 336
-// ?????(__NR_clock_adjtime, ), // 337
+ LINXY(__NR_clock_adjtime, sys_clock_adjtime), // 337
// ?????(__NR_syncfs, ), // 338
// ?????(__NR_setns, ), // 339
LINXY(__NR_process_vm_readv, sys_process_vm_readv), // 340
LINXY(__NR_prlimit64, sys_prlimit64), // 340
LINXY(__NR_name_to_handle_at, sys_name_to_handle_at),// 341
LINXY(__NR_open_by_handle_at, sys_open_by_handle_at),// 342
-// LINX_(__NR_clock_adjtime, sys_ni_syscall), // 343
+ LINXY(__NR_clock_adjtime, sys_clock_adjtime), // 343
// LINX_(__NR_syncfs, sys_ni_syscall), // 344
LINXY(__NR_sendmmsg, sys_sendmmsg), // 345