From: Tom Hughes Date: Tue, 24 Nov 2009 16:38:21 +0000 (+0000) Subject: Re-enable old support for adjtimex system call based on patch X-Git-Tag: svn/VALGRIND_3_6_0~465 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e46ec05df6594c2ae27bdbc401601620244294e8;p=thirdparty%2Fvalgrind.git Re-enable old support for adjtimex system call based on patch from Dodji Seketeli. Part fix for #215973. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@10948 --- diff --git a/coregrind/m_syswrap/syswrap-amd64-linux.c b/coregrind/m_syswrap/syswrap-amd64-linux.c index 6df2867c9e..540b3b4486 100644 --- a/coregrind/m_syswrap/syswrap-amd64-linux.c +++ b/coregrind/m_syswrap/syswrap-amd64-linux.c @@ -1213,7 +1213,7 @@ const SyscallTableEntry ML_(syscall_table)[] = { LINXY(__NR__sysctl, sys_sysctl), // 156 LINXY(__NR_prctl, sys_prctl), // 157 PLAX_(__NR_arch_prctl, sys_arch_prctl), // 158 - // (__NR_adjtimex, sys_adjtimex), // 159 + LINXY(__NR_adjtimex, sys_adjtimex), // 159 GENX_(__NR_setrlimit, sys_setrlimit), // 160 GENX_(__NR_chroot, sys_chroot), // 161 diff --git a/coregrind/m_syswrap/syswrap-linux.c b/coregrind/m_syswrap/syswrap-linux.c index 3b59fd2130..928f5f1448 100644 --- a/coregrind/m_syswrap/syswrap-linux.c +++ b/coregrind/m_syswrap/syswrap-linux.c @@ -605,34 +605,34 @@ POST(sys_llseek) POST_MEM_WRITE( ARG4, sizeof(vki_loff_t) ); } -//zz PRE(sys_adjtimex, 0) -//zz { -//zz struct vki_timex *tx = (struct vki_timex *)ARG1; -//zz PRINT("sys_adjtimex ( %p )", ARG1); -//zz PRE_REG_READ1(long, "adjtimex", struct timex *, buf); -//zz PRE_MEM_READ( "adjtimex(timex->modes)", ARG1, sizeof(tx->modes)); -//zz -#if 0 //zz (avoiding warnings about multi-line comments) -zz #define ADJX(bit,field) \ -zz if (tx->modes & bit) \ -zz PRE_MEM_READ( "adjtimex(timex->"#field")", \ -zz (Addr)&tx->field, sizeof(tx->field)) -#endif -//zz ADJX(ADJ_FREQUENCY, freq); -//zz ADJX(ADJ_MAXERROR, maxerror); -//zz ADJX(ADJ_ESTERROR, esterror); -//zz ADJX(ADJ_STATUS, status); -//zz ADJX(ADJ_TIMECONST, constant); -//zz ADJX(ADJ_TICK, tick); -//zz #undef ADJX -//zz -//zz PRE_MEM_WRITE( "adjtimex(timex)", ARG1, sizeof(struct vki_timex)); -//zz } -//zz -//zz POST(sys_adjtimex) -//zz { -//zz POST_MEM_WRITE( ARG1, sizeof(struct vki_timex) ); -//zz } +PRE(sys_adjtimex) +{ + struct vki_timex *tx = (struct vki_timex *)ARG1; + PRINT("sys_adjtimex ( %#lx )", ARG1); + PRE_REG_READ1(long, "adjtimex", struct timex *, buf); + PRE_MEM_READ( "adjtimex(timex->modes)", ARG1, sizeof(tx->modes)); + +#define ADJX(bit,field) \ + if (tx->modes & bit) \ + PRE_MEM_READ( "adjtimex(timex->"#field")", \ + (Addr)&tx->field, sizeof(tx->field)) + + 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, constant); + ADJX(VKI_ADJ_TICK, tick); +#undef ADJX + + PRE_MEM_WRITE( "adjtimex(timex)", ARG1, sizeof(struct vki_timex)); +} + +POST(sys_adjtimex) +{ + POST_MEM_WRITE( ARG1, sizeof(struct vki_timex) ); +} PRE(sys_ioperm) { diff --git a/coregrind/m_syswrap/syswrap-ppc32-linux.c b/coregrind/m_syswrap/syswrap-ppc32-linux.c index bdaa5c0739..3d15f04cb9 100644 --- a/coregrind/m_syswrap/syswrap-ppc32-linux.c +++ b/coregrind/m_syswrap/syswrap-ppc32-linux.c @@ -1644,8 +1644,8 @@ const SyscallTableEntry ML_(syscall_table)[] = { //.. // (__NR_setdomainname, sys_setdomainname), // 121 */*(?) GENXY(__NR_uname, sys_newuname), // 122 //.. PLAX_(__NR_modify_ldt, sys_modify_ldt), // 123 -//.. LINXY(__NR_adjtimex, sys_adjtimex), // 124 -//.. + LINXY(__NR_adjtimex, sys_adjtimex), // 124 + GENXY(__NR_mprotect, sys_mprotect), // 125 LINXY(__NR_sigprocmask, sys_sigprocmask), // 126 GENX_(__NR_create_module, sys_ni_syscall), // 127 diff --git a/coregrind/m_syswrap/syswrap-ppc64-linux.c b/coregrind/m_syswrap/syswrap-ppc64-linux.c index 1d1699b8b3..12892a9da1 100644 --- a/coregrind/m_syswrap/syswrap-ppc64-linux.c +++ b/coregrind/m_syswrap/syswrap-ppc64-linux.c @@ -1291,7 +1291,7 @@ const SyscallTableEntry ML_(syscall_table)[] = { // _____(__NR_setdomainname, sys_setdomainname), // 121 GENXY(__NR_uname, sys_newuname), // 122 // _____(__NR_modify_ldt, sys_modify_ldt), // 123 -// _____(__NR_adjtimex, sys_adjtimex), // 124 + LINXY(__NR_adjtimex, sys_adjtimex), // 124 GENXY(__NR_mprotect, sys_mprotect), // 125 // _____(__NR_sigprocmask, sys_sigprocmask), // 126 diff --git a/coregrind/m_syswrap/syswrap-x86-linux.c b/coregrind/m_syswrap/syswrap-x86-linux.c index 6d9b49860e..2a72174a80 100644 --- a/coregrind/m_syswrap/syswrap-x86-linux.c +++ b/coregrind/m_syswrap/syswrap-x86-linux.c @@ -2001,8 +2001,8 @@ const SyscallTableEntry ML_(syscall_table)[] = { //zz // (__NR_setdomainname, sys_setdomainname), // 121 */*(?) GENXY(__NR_uname, sys_newuname), // 122 PLAX_(__NR_modify_ldt, sys_modify_ldt), // 123 -//zz LINXY(__NR_adjtimex, sys_adjtimex), // 124 -//zz + LINXY(__NR_adjtimex, sys_adjtimex), // 124 + GENXY(__NR_mprotect, sys_mprotect), // 125 LINXY(__NR_sigprocmask, sys_sigprocmask), // 126 //zz // Nb: create_module() was removed 2.4-->2.6 diff --git a/include/vki/vki-linux.h b/include/vki/vki-linux.h index 6393a43e68..20b23d73d0 100644 --- a/include/vki/vki-linux.h +++ b/include/vki/vki-linux.h @@ -277,14 +277,14 @@ struct vki_timex { int :32; int :32; int :32; int :32; }; -//#define ADJ_OFFSET 0x0001 /* time offset */ -#define ADJ_FREQUENCY 0x0002 /* frequency offset */ -#define ADJ_MAXERROR 0x0004 /* maximum time error */ -#define ADJ_ESTERROR 0x0008 /* estimated time error */ -#define ADJ_STATUS 0x0010 /* clock status */ -#define ADJ_TIMECONST 0x0020 /* pll time constant */ -#define ADJ_TICK 0x4000 /* tick value */ -//#define ADJ_OFFSET_SINGLESHOT 0x8001 /* old-fashioned adjtime */ +#define VKI_ADJ_OFFSET 0x0001 /* time offset */ +#define VKI_ADJ_FREQUENCY 0x0002 /* frequency offset */ +#define VKI_ADJ_MAXERROR 0x0004 /* maximum time error */ +#define VKI_ADJ_ESTERROR 0x0008 /* estimated time error */ +#define VKI_ADJ_STATUS 0x0010 /* clock status */ +#define VKI_ADJ_TIMECONST 0x0020 /* pll time constant */ +#define VKI_ADJ_TICK 0x4000 /* tick value */ +//#define VKI_ADJ_OFFSET_SINGLESHOT 0x8001 /* old-fashioned adjtime */ //---------------------------------------------------------------------- // From linux-2.6.8.1/include/linux/times.h