]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Add support for the clock_adjtime system call.
authorTom Hughes <tom@compton.nu>
Thu, 30 Jan 2014 22:33:02 +0000 (22:33 +0000)
committerTom Hughes <tom@compton.nu>
Thu, 30 Jan 2014 22:33:02 +0000 (22:33 +0000)
Based on a patch from Stefan Sørensen on BZ#330469.

git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13785

12 files changed:
NEWS
coregrind/m_syswrap/priv_syswrap-linux.h
coregrind/m_syswrap/syswrap-amd64-linux.c
coregrind/m_syswrap/syswrap-arm-linux.c
coregrind/m_syswrap/syswrap-arm64-linux.c
coregrind/m_syswrap/syswrap-linux.c
coregrind/m_syswrap/syswrap-mips32-linux.c
coregrind/m_syswrap/syswrap-mips64-linux.c
coregrind/m_syswrap/syswrap-ppc32-linux.c
coregrind/m_syswrap/syswrap-ppc64-linux.c
coregrind/m_syswrap/syswrap-s390x-linux.c
coregrind/m_syswrap/syswrap-x86-linux.c

diff --git a/NEWS b/NEWS
index cac1d70cf8fdbbb7047b14926dabf3a2dafb9fce..44b1887c114030098f7bd00c91690512da9cc196 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -47,6 +47,7 @@ where XXXXXX is the bug number as listed below.
 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)
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
index 5db490058cb2faea50244c2526e05dd8453d4246..0bdf6609486a2db0414cea3628caab0b2124f84a 100644 (file)
@@ -146,6 +146,7 @@ DECL_TEMPLATE(linux, sys_clock_settime);
 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);
index 82cbb327c706893d18b5124e71b986dda569b440..c4e65d5579ef483de0f23ca4def3179b142bcb66 100644 (file)
@@ -1074,7 +1074,7 @@ static SyscallTableEntry syscall_table[] = {
    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
index d6c5530c6c1657a43d9b02263cb3b334ea5a37d4..431c1ca0e876b28a62638767fc50f620a876f362 100644 (file)
@@ -1226,7 +1226,8 @@ static SyscallTableEntry syscall_main_table[] = {
    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
 };
 
 
index 94aac68ceb6cb2bbc1dde0285fb90262cabb23b3..669bad01713460c118fa2b8d1f6fcc07ebd99c60 100644 (file)
@@ -1295,7 +1295,8 @@ static SyscallTableEntry syscall_main_table[] = {
 //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
 };
 
 
index c0b336782cd86390ba57c385299e63e2d258fe13..b50cdd89db86f99279733d2609872c9b574ce1b9 100644 (file)
@@ -814,6 +814,40 @@ POST(sys_adjtimex)
    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 );
index e5f4f30c8e994bed5fddf839756bfcc68bdc2563..c0cd811bfcd5a008bce0d120a40f6bcc0cf8bd2c 100644 (file)
@@ -1128,6 +1128,8 @@ static SyscallTableEntry syscall_main_table[] = {
    //..
    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
 };
index bab3aaa72f0578bd7fe6f8edc1685aed1c898c16..fb5067c39376161c19f36abdf0c4078ba83b1b41 100644 (file)
@@ -921,6 +921,7 @@ static SyscallTableEntry syscall_main_table[] = {
    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)
 };
index e808c4254908e2b6292370160654c657d752f886..c79156c41f18282f23821b397cfc57d8fd27b289 100644 (file)
@@ -1257,6 +1257,8 @@ static SyscallTableEntry syscall_table[] = {
    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
 };
index 234778cb089fdc8ffc39ba7ff878480f70bac878..86c67d4be68beb2b5d9e1962305b872e8c2ebee4 100644 (file)
@@ -1050,6 +1050,8 @@ static SyscallTableEntry syscall_table[] = {
    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
 };
index 686f7f2d3ce6abec3d9e468732c274c6f89bf912..f9bc1361367c1757c1b473fabf13174416f32f59 100644 (file)
@@ -1056,7 +1056,7 @@ static SyscallTableEntry syscall_table[] = {
    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
index 5e45f0c8e467d61551368e7fb7779806e3f77b8f..e5b78afeb5dd3eba8a30845a1da6d4ac33ce30d0 100644 (file)
@@ -1827,7 +1827,7 @@ static SyscallTableEntry syscall_table[] = {
    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