|
From: <sv...@va...> - 2009-01-19 03:44:37
|
Author: njn
Date: 2009-01-19 03:44:19 +0000 (Mon, 19 Jan 2009)
New Revision: 8975
Log:
Create memcheck/tests/linux/ and move some Linux-specific tests
into it. Partial merge from DARWIN branch, r8943.
Added:
trunk/memcheck/tests/linux/
trunk/memcheck/tests/linux/Makefile.am
trunk/memcheck/tests/linux/capget.c
trunk/memcheck/tests/linux/capget.stderr.exp
trunk/memcheck/tests/linux/capget.vgtest
trunk/memcheck/tests/linux/filter_stderr
trunk/memcheck/tests/linux/timerfd-syscall.c
trunk/memcheck/tests/linux/timerfd-syscall.stderr.exp
trunk/memcheck/tests/linux/timerfd-syscall.stdout.exp
trunk/memcheck/tests/linux/timerfd-syscall.vgtest
Removed:
trunk/memcheck/tests/linux-capget.c
trunk/memcheck/tests/linux-capget.stderr.exp
trunk/memcheck/tests/linux-capget.vgtest
trunk/memcheck/tests/linux-timerfd-syscall.c
trunk/memcheck/tests/linux-timerfd-syscall.stderr.exp
trunk/memcheck/tests/linux-timerfd-syscall.stdout.exp
trunk/memcheck/tests/linux-timerfd-syscall.vgtest
Modified:
trunk/configure.in
trunk/memcheck/tests/Makefile.am
Modified: trunk/configure.in
===================================================================
--- trunk/configure.in 2009-01-19 03:16:59 UTC (rev 8974)
+++ trunk/configure.in 2009-01-19 03:44:19 UTC (rev 8975)
@@ -1629,6 +1629,7 @@
memcheck/tests/ppc32/Makefile
memcheck/tests/ppc64/Makefile
memcheck/tests/x86/Makefile
+ memcheck/tests/linux/Makefile
memcheck/tests/x86-linux/Makefile
memcheck/docs/Makefile
cachegrind/Makefile
Modified: trunk/memcheck/tests/Makefile.am
===================================================================
--- trunk/memcheck/tests/Makefile.am 2009-01-19 03:16:59 UTC (rev 8974)
+++ trunk/memcheck/tests/Makefile.am 2009-01-19 03:44:19 UTC (rev 8975)
@@ -18,6 +18,11 @@
SUBDIRS += ppc64
endif
+# OS-specific tests
+if VGO_LINUX
+SUBDIRS += linux
+endif
+
# Platform-specific tests
if VGP_X86_LINUX
SUBDIRS += x86-linux
@@ -73,10 +78,8 @@
leak-tree.stderr.exp2 leak-tree.stderr.exp64 \
leak-regroot.vgtest leak-regroot.stderr.exp \
leakotron.vgtest leakotron.stdout.exp leakotron.stderr.exp \
- linux-capget linux-capget.stderr.exp \
linux-syslog-syscall linux-syslog-syscall.stderr.exp \
linux-syscalls-2007 linux-syscalls-2007.stderr.exp \
- linux-timerfd-syscall linux-timerfd-syscall.stderr.exp \
long_namespace_xml.vgtest long_namespace_xml.stdout.exp \
long_namespace_xml.stderr.exp \
lsframe1.vgtest lsframe1.stdout.exp lsframe1.stderr.exp \
@@ -199,10 +202,8 @@
file_locking \
fprw fwrite hello inits inline \
leak-0 leak-cycle leak-pool leak-tree leak-regroot leakotron \
- linux-capget \
linux-syslog-syscall \
linux-syscalls-2007 \
- linux-timerfd-syscall \
long_namespace_xml \
lsframe1 lsframe2 \
mallinfo \
@@ -246,7 +247,6 @@
oset_test_CFLAGS = $(AM_FLAG_M3264_PRI) \
-DVGA_$(VG_ARCH_PRI)=1 -DVGO_$(VG_OS)=1 \
-DVGP_$(VG_ARCH_PRI)_$(VG_OS)=1
-linux_timerfd_syscall_LDADD = -lrt
vcpu_bz2_CFLAGS = $(AM_FLAG_M3264_PRI) $(AM_CFLAGS) -O2 -g
vcpu_fbench_CFLAGS = $(AM_FLAG_M3264_PRI) $(AM_CFLAGS) -O2 -g
vcpu_fnfns_CFLAGS = $(AM_FLAG_M3264_PRI) $(AM_CFLAGS) -O2 -g
Added: trunk/memcheck/tests/linux/Makefile.am
===================================================================
--- trunk/memcheck/tests/linux/Makefile.am (rev 0)
+++ trunk/memcheck/tests/linux/Makefile.am 2009-01-19 03:44:19 UTC (rev 8975)
@@ -0,0 +1,17 @@
+noinst_SCRIPTS = filter_stderr
+
+EXTRA_DIST = $(noinst_SCRIPTS) \
+ capget capget.stderr.exp \
+ timerfd-syscall timerfd-syscall.stderr.exp
+
+check_PROGRAMS = \
+ capget \
+ timerfd-syscall
+
+AM_CPPFLAGS = -I$(top_srcdir)/include
+AM_CFLAGS = $(WERROR) @FLAG_M32@ -Winline -Wall -Wshadow -g \
+ $(FLAG_MMMX) $(FLAG_MSSE)
+AM_CXXFLAGS = $(AM_CFLAGS)
+AM_CCASFLAGS = @FLAG_M32@
+
+timerfd_syscall_LDADD = -lrt
Copied: trunk/memcheck/tests/linux/capget.c (from rev 8969, trunk/memcheck/tests/linux-capget.c)
===================================================================
--- trunk/memcheck/tests/linux/capget.c (rev 0)
+++ trunk/memcheck/tests/linux/capget.c 2009-01-19 03:44:19 UTC (rev 8975)
@@ -0,0 +1,50 @@
+#if defined(linux)
+
+
+#include <stdio.h> /* printf() */
+#include <unistd.h> /* syscall() */
+#include <sys/syscall.h> /* __NR_capget */
+#include <linux/capability.h> /* _LINUX_CAPABILITY_VERSION */
+
+
+int main()
+{
+ struct __user_cap_header_struct h;
+ struct __user_cap_data_struct d;
+ int syscall_result;
+
+ h.version = _LINUX_CAPABILITY_VERSION;
+ h.pid = 0;
+ syscall_result = syscall(__NR_capget, &h, &d);
+ if (syscall_result >= 0)
+ {
+ fprintf(stderr,
+ "capget result:\n"
+ "effective %#x\n"
+ "permitted %#x\n"
+ "inheritable %#x\n",
+ d.effective,
+ d.permitted,
+ d.inheritable);
+ }
+ else
+ {
+ perror("capget");
+ }
+ return 0;
+}
+
+
+#else
+
+
+#include <stdio.h>
+
+int main()
+{
+ fprintf(stderr, "This program is Linux-specific\n");
+ return 0;
+}
+
+
+#endif
Property changes on: trunk/memcheck/tests/linux/capget.c
___________________________________________________________________
Name: svn:mergeinfo
+
Copied: trunk/memcheck/tests/linux/capget.stderr.exp (from rev 8969, trunk/memcheck/tests/linux-capget.stderr.exp)
===================================================================
--- trunk/memcheck/tests/linux/capget.stderr.exp (rev 0)
+++ trunk/memcheck/tests/linux/capget.stderr.exp 2009-01-19 03:44:19 UTC (rev 8975)
@@ -0,0 +1,11 @@
+
+capget result:
+effective 0
+permitted 0
+inheritable 0
+
+ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
+malloc/free: in use at exit: ... bytes in ... blocks.
+malloc/free: ... allocs, ... frees, ... bytes allocated.
+For a detailed leak analysis, rerun with: --leak-check=yes
+For counts of detected errors, rerun with: -v
Property changes on: trunk/memcheck/tests/linux/capget.stderr.exp
___________________________________________________________________
Name: svn:mergeinfo
+
Copied: trunk/memcheck/tests/linux/capget.vgtest (from rev 8969, trunk/memcheck/tests/linux-capget.vgtest)
===================================================================
--- trunk/memcheck/tests/linux/capget.vgtest (rev 0)
+++ trunk/memcheck/tests/linux/capget.vgtest 2009-01-19 03:44:19 UTC (rev 8975)
@@ -0,0 +1,2 @@
+prog: capget
+stderr_filter: ../filter_allocs
Property changes on: trunk/memcheck/tests/linux/capget.vgtest
___________________________________________________________________
Name: svn:mergeinfo
+
Added: trunk/memcheck/tests/linux/filter_stderr
===================================================================
--- trunk/memcheck/tests/linux/filter_stderr (rev 0)
+++ trunk/memcheck/tests/linux/filter_stderr 2009-01-19 03:44:19 UTC (rev 8975)
@@ -0,0 +1,3 @@
+#! /bin/sh
+
+../filter_stderr
Property changes on: trunk/memcheck/tests/linux/filter_stderr
___________________________________________________________________
Name: svn:executable
+ *
Copied: trunk/memcheck/tests/linux/timerfd-syscall.c (from rev 8969, trunk/memcheck/tests/linux-timerfd-syscall.c)
===================================================================
--- trunk/memcheck/tests/linux/timerfd-syscall.c (rev 0)
+++ trunk/memcheck/tests/linux/timerfd-syscall.c 2009-01-19 03:44:19 UTC (rev 8975)
@@ -0,0 +1,310 @@
+/** Test Valgrind's interception of the Linux syscalls timerfd_create(),
+ * timerfd_gettime() and timerfd_settime().
+ *
+ * This is a modified version of
+ * timerfd-test2 by Davide Libenzi (test app for timerfd)
+ * Copyright (C) 2007 Davide Libenzi <da...@xm...>
+ * Modified for inclusion in Valgrind.
+ * Copyright (C) 2008 Bart Van Assche <bar...@gm...>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * See also http://www.xmailserver.org/timerfd-test2.c
+ */
+
+#if defined(__linux__)
+
+#define _GNU_SOURCE
+
+#include "../../../config.h"
+#include <errno.h>
+#include <fcntl.h>
+#include <poll.h>
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+#include <unistd.h>
+#if defined(HAVE_SYS_SIGNAL_H)
+#include <sys/signal.h>
+#endif
+#if defined(HAVE_SYS_SYSCALL_H)
+#include <sys/syscall.h>
+#endif
+#if defined(HAVE_SYS_TIME_H)
+#include <sys/time.h>
+#endif
+#if defined(HAVE_SYS_TYPES_H)
+#include <sys/types.h>
+#endif
+
+
+/*
+ * timerfd_* system call numbers introduced in 2.6.23. These constants are
+ * not yet in the glibc 2.7 headers, that is why they are defined here.
+ */
+#ifndef __NR_timerfd_create
+#if defined(__x86_64__)
+#define __NR_timerfd_create 283
+#define __NR_timerfd_settime 286
+#define __NR_timerfd_gettime 287
+#elif defined(__i386__)
+#define __NR_timerfd_create 322
+#define __NR_timerfd_settime 325
+#define __NR_timerfd_gettime 326
+#elif defined(__powerpc__)
+#define __NR_timerfd_create 306
+#define __NR_timerfd_settime 311
+#define __NR_timerfd_gettime 312
+#else
+#error Cannot detect your architecture!
+#endif
+#endif
+
+
+
+/* Definitions from include/linux/timerfd.h */
+#define TFD_TIMER_ABSTIME (1 << 0)
+
+
+
+struct tmr_type
+{
+ int id;
+ char const *name;
+};
+
+
+#if defined(HAVE_CLOCK_GETTIME)
+unsigned long long getustime(int clockid)
+{
+ struct timespec tp;
+
+ if (clock_gettime((clockid_t) clockid, &tp))
+ {
+ perror("clock_gettime");
+ return 0;
+ }
+
+ return 1000000ULL * tp.tv_sec + tp.tv_nsec / 1000;
+}
+#else
+unsigned long long getustime(int clockid)
+{
+ fprintf(stderr, "error: clock_gettime\n");
+ return 0;
+}
+#endif
+
+void set_timespec(struct timespec *tmr, unsigned long long ustime)
+{
+ tmr->tv_sec = (time_t) (ustime / 1000000ULL);
+ tmr->tv_nsec = (long) (1000ULL * (ustime % 1000000ULL));
+}
+
+int timerfd_create(int clockid, int flags)
+{
+ return syscall(__NR_timerfd_create, clockid, flags);
+}
+
+int timerfd_settime(int ufc, int flags, const struct itimerspec *utmr,
+ struct itimerspec *otmr)
+{
+ return syscall(__NR_timerfd_settime, ufc, flags, utmr, otmr);
+}
+
+int timerfd_gettime(int ufc, struct itimerspec *otmr)
+{
+ return syscall(__NR_timerfd_gettime, ufc, otmr);
+}
+
+long waittmr(int tfd, int timeo)
+{
+ u_int64_t ticks;
+ struct pollfd pfd;
+
+ pfd.fd = tfd;
+ pfd.events = POLLIN;
+ pfd.revents = 0;
+ if (poll(&pfd, 1, timeo) < 0)
+ {
+ perror("poll");
+ return -1;
+ }
+ if ((pfd.revents & POLLIN) == 0)
+ {
+ fprintf(stdout, "no ticks happened\n");
+ return -1;
+ }
+ if (read(tfd, &ticks, sizeof(ticks)) != sizeof(ticks))
+ {
+ perror("timerfd read");
+ return -1;
+ }
+
+ return ticks;
+}
+
+int main(int ac, char **av)
+{
+ int i, tfd;
+ long ticks;
+ unsigned long long tnow, ttmr;
+ u_int64_t uticks;
+ struct itimerspec tmr;
+ struct tmr_type clks[] =
+ {
+#if defined(HAVE_CLOCK_MONOTONIC)
+ { CLOCK_MONOTONIC, "CLOCK MONOTONIC" },
+#endif
+ { CLOCK_REALTIME, "CLOCK REALTIME" },
+ };
+
+ for (i = 0; i < sizeof(clks) / sizeof(clks[0]); i++)
+ {
+ fprintf(stdout, "\n\n---------------------------------------\n");
+ fprintf(stdout, "| testing %s\n", clks[i].name);
+ fprintf(stdout, "---------------------------------------\n\n");
+
+ fprintf(stdout, "relative timer test (at 500 ms) ...\n");
+ set_timespec(&tmr.it_value, 500 * 1000);
+ set_timespec(&tmr.it_interval, 0);
+ tnow = getustime(clks[i].id);
+ if ((tfd = timerfd_create(clks[i].id, 0)) == -1)
+ {
+ perror("timerfd_create");
+ return 1;
+ }
+
+ if (timerfd_settime(tfd, 0, &tmr, NULL))
+ {
+ perror("timerfd_settime");
+ return 1;
+ }
+
+ fprintf(stdout, "wating timer ...\n");
+ ticks = waittmr(tfd, -1);
+ ttmr = getustime(clks[i].id);
+ if (ticks <= 0)
+ fprintf(stdout, "whooops! no timer showed up!\n");
+ else
+ fprintf(stdout, "got timer ticks (%ld) after %.1f s\n",
+ ticks, (ttmr - tnow) * 1e-6);
+
+
+ fprintf(stdout, "absolute timer test (at 500 ms) ...\n");
+ tnow = getustime(clks[i].id);
+ set_timespec(&tmr.it_value, tnow + 500 * 1000);
+ set_timespec(&tmr.it_interval, 0);
+ if (timerfd_settime(tfd, TFD_TIMER_ABSTIME, &tmr, NULL))
+ {
+ perror("timerfd_settime");
+ return 1;
+ }
+
+ fprintf(stdout, "wating timer ...\n");
+ ticks = waittmr(tfd, -1);
+ ttmr = getustime(clks[i].id);
+ if (ticks <= 0)
+ fprintf(stdout, "whooops! no timer showed up!\n");
+ else
+ fprintf(stdout, "got timer ticks (%ld) after %.1f s\n",
+ ticks, (ttmr - tnow) * 1e-6);
+
+ fprintf(stdout, "sequential timer test (100 ms clock) ...\n");
+ tnow = getustime(clks[i].id);
+ set_timespec(&tmr.it_value, tnow + 100 * 1000);
+ set_timespec(&tmr.it_interval, 100 * 1000);
+ if (timerfd_settime(tfd, TFD_TIMER_ABSTIME, &tmr, NULL))
+ {
+ perror("timerfd_settime");
+ return 1;
+ }
+
+ fprintf(stdout, "sleeping one second ...\n");
+ sleep(1);
+ if (timerfd_gettime(tfd, &tmr))
+ {
+ perror("timerfd_gettime");
+ return 1;
+ }
+ fprintf(stdout, "timerfd_gettime returned:\n"
+ "\tit_value = %.1f it_interval = %.1f\n",
+ tmr.it_value.tv_sec + 1e-9 * tmr.it_value.tv_nsec,
+ tmr.it_interval.tv_sec + 1e-9 * tmr.it_interval.tv_nsec);
+ fprintf(stdout, "sleeping 1 second ...\n");
+ sleep(1);
+
+ fprintf(stdout, "wating timer ...\n");
+ ticks = waittmr(tfd, -1);
+ ttmr = getustime(clks[i].id);
+ if (ticks <= 0)
+ fprintf(stdout, "whooops! no timer showed up!\n");
+ else
+ fprintf(stdout, "got timer ticks (%ld) after %.1f s\n",
+ ticks, (ttmr - tnow) * 1e-6);
+
+
+ fprintf(stdout, "O_NONBLOCK test ...\n");
+ tnow = getustime(clks[i].id);
+ set_timespec(&tmr.it_value, 100 * 1000);
+ set_timespec(&tmr.it_interval, 0);
+ if (timerfd_settime(tfd, 0, &tmr, NULL))
+ {
+ perror("timerfd_settime");
+ return 1;
+ }
+#if 0
+ fprintf(stdout, "timerfd = %d\n", tfd);
+#endif
+
+ fprintf(stdout, "wating timer (flush the single tick) ...\n");
+ ticks = waittmr(tfd, -1);
+ ttmr = getustime(clks[i].id);
+ if (ticks <= 0)
+ fprintf(stdout, "whooops! no timer showed up!\n");
+ else
+ fprintf(stdout, "got timer ticks (%ld) after %.1f s\n",
+ ticks, (ttmr - tnow) * 1e-6);
+
+ fcntl(tfd, F_SETFL, fcntl(tfd, F_GETFL, 0) | O_NONBLOCK);
+
+ if (read(tfd, &uticks, sizeof(uticks)) > 0)
+ fprintf(stdout, "whooops! timer ticks not zero when should have been\n");
+ else if (errno != EAGAIN)
+ fprintf(stdout, "whooops! bad errno value (%d = '%s')!\n",
+ errno, strerror(errno));
+ else
+ fprintf(stdout, "success\n");
+
+ fcntl(tfd, F_SETFL, fcntl(tfd, F_GETFL, 0) & ~O_NONBLOCK);
+
+ close(tfd);
+ }
+
+ return 0;
+}
+
+#endif /* __linux__ */
+
+#if defined(_AIX)
+#include <stdio.h>
+int main(int ac, char **av)
+{
+ fprintf(stderr, "This test does not work on AIX5.\n");
+ return 0;
+}
+#endif /* _AIX */
Property changes on: trunk/memcheck/tests/linux/timerfd-syscall.c
___________________________________________________________________
Name: svn:mergeinfo
+
Copied: trunk/memcheck/tests/linux/timerfd-syscall.stderr.exp (from rev 8969, trunk/memcheck/tests/linux-timerfd-syscall.stderr.exp)
===================================================================
--- trunk/memcheck/tests/linux/timerfd-syscall.stderr.exp (rev 0)
+++ trunk/memcheck/tests/linux/timerfd-syscall.stderr.exp 2009-01-19 03:44:19 UTC (rev 8975)
@@ -0,0 +1,7 @@
+
+
+ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
+malloc/free: in use at exit: 0 bytes in 0 blocks.
+malloc/free: 0 allocs, 0 frees, 0 bytes allocated.
+For a detailed leak analysis, rerun with: --leak-check=yes
+For counts of detected errors, rerun with: -v
Property changes on: trunk/memcheck/tests/linux/timerfd-syscall.stderr.exp
___________________________________________________________________
Name: svn:mergeinfo
+
Copied: trunk/memcheck/tests/linux/timerfd-syscall.stdout.exp (from rev 8969, trunk/memcheck/tests/linux-timerfd-syscall.stdout.exp)
===================================================================
--- trunk/memcheck/tests/linux/timerfd-syscall.stdout.exp (rev 0)
+++ trunk/memcheck/tests/linux/timerfd-syscall.stdout.exp 2009-01-19 03:44:19 UTC (rev 8975)
@@ -0,0 +1,46 @@
+
+
+---------------------------------------
+| testing CLOCK MONOTONIC
+---------------------------------------
+
+relative timer test (at 500 ms) ...
+wating timer ...
+got timer ticks (1) after 0.5 s
+absolute timer test (at 500 ms) ...
+wating timer ...
+got timer ticks (1) after 0.5 s
+sequential timer test (100 ms clock) ...
+sleeping one second ...
+timerfd_gettime returned:
+ it_value = 0.1 it_interval = 0.1
+sleeping 1 second ...
+wating timer ...
+got timer ticks (20) after 2.0 s
+O_NONBLOCK test ...
+wating timer (flush the single tick) ...
+got timer ticks (1) after 0.1 s
+success
+
+
+---------------------------------------
+| testing CLOCK REALTIME
+---------------------------------------
+
+relative timer test (at 500 ms) ...
+wating timer ...
+got timer ticks (1) after 0.5 s
+absolute timer test (at 500 ms) ...
+wating timer ...
+got timer ticks (1) after 0.5 s
+sequential timer test (100 ms clock) ...
+sleeping one second ...
+timerfd_gettime returned:
+ it_value = 0.1 it_interval = 0.1
+sleeping 1 second ...
+wating timer ...
+got timer ticks (20) after 2.0 s
+O_NONBLOCK test ...
+wating timer (flush the single tick) ...
+got timer ticks (1) after 0.1 s
+success
Property changes on: trunk/memcheck/tests/linux/timerfd-syscall.stdout.exp
___________________________________________________________________
Name: svn:mergeinfo
+
Copied: trunk/memcheck/tests/linux/timerfd-syscall.vgtest (from rev 8969, trunk/memcheck/tests/linux-timerfd-syscall.vgtest)
===================================================================
--- trunk/memcheck/tests/linux/timerfd-syscall.vgtest (rev 0)
+++ trunk/memcheck/tests/linux/timerfd-syscall.vgtest 2009-01-19 03:44:19 UTC (rev 8975)
@@ -0,0 +1,2 @@
+prereq: [ "$(uname)" = "Linux" ] && awk 'END{exit("'$(uname -r)'" >= "2.6.25" ? 0 : 1)}' </dev/null
+prog: timerfd-syscall
Property changes on: trunk/memcheck/tests/linux/timerfd-syscall.vgtest
___________________________________________________________________
Name: svn:mergeinfo
+
Deleted: trunk/memcheck/tests/linux-capget.c
===================================================================
--- trunk/memcheck/tests/linux-capget.c 2009-01-19 03:16:59 UTC (rev 8974)
+++ trunk/memcheck/tests/linux-capget.c 2009-01-19 03:44:19 UTC (rev 8975)
@@ -1,50 +0,0 @@
-#if defined(linux)
-
-
-#include <stdio.h> /* printf() */
-#include <unistd.h> /* syscall() */
-#include <sys/syscall.h> /* __NR_capget */
-#include <linux/capability.h> /* _LINUX_CAPABILITY_VERSION */
-
-
-int main()
-{
- struct __user_cap_header_struct h;
- struct __user_cap_data_struct d;
- int syscall_result;
-
- h.version = _LINUX_CAPABILITY_VERSION;
- h.pid = 0;
- syscall_result = syscall(__NR_capget, &h, &d);
- if (syscall_result >= 0)
- {
- fprintf(stderr,
- "capget result:\n"
- "effective %#x\n"
- "permitted %#x\n"
- "inheritable %#x\n",
- d.effective,
- d.permitted,
- d.inheritable);
- }
- else
- {
- perror("capget");
- }
- return 0;
-}
-
-
-#else
-
-
-#include <stdio.h>
-
-int main()
-{
- fprintf(stderr, "This program is Linux-specific\n");
- return 0;
-}
-
-
-#endif
Deleted: trunk/memcheck/tests/linux-capget.stderr.exp
===================================================================
--- trunk/memcheck/tests/linux-capget.stderr.exp 2009-01-19 03:16:59 UTC (rev 8974)
+++ trunk/memcheck/tests/linux-capget.stderr.exp 2009-01-19 03:44:19 UTC (rev 8975)
@@ -1,11 +0,0 @@
-
-capget result:
-effective 0
-permitted 0
-inheritable 0
-
-ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
-malloc/free: in use at exit: ... bytes in ... blocks.
-malloc/free: ... allocs, ... frees, ... bytes allocated.
-For a detailed leak analysis, rerun with: --leak-check=yes
-For counts of detected errors, rerun with: -v
Deleted: trunk/memcheck/tests/linux-capget.vgtest
===================================================================
--- trunk/memcheck/tests/linux-capget.vgtest 2009-01-19 03:16:59 UTC (rev 8974)
+++ trunk/memcheck/tests/linux-capget.vgtest 2009-01-19 03:44:19 UTC (rev 8975)
@@ -1,2 +0,0 @@
-prog: linux-capget
-stderr_filter: filter_allocs
Deleted: trunk/memcheck/tests/linux-timerfd-syscall.c
===================================================================
--- trunk/memcheck/tests/linux-timerfd-syscall.c 2009-01-19 03:16:59 UTC (rev 8974)
+++ trunk/memcheck/tests/linux-timerfd-syscall.c 2009-01-19 03:44:19 UTC (rev 8975)
@@ -1,310 +0,0 @@
-/** Test Valgrind's interception of the Linux syscalls timerfd_create(),
- * timerfd_gettime() and timerfd_settime().
- *
- * This is a modified version of
- * timerfd-test2 by Davide Libenzi (test app for timerfd)
- * Copyright (C) 2007 Davide Libenzi <da...@xm...>
- * Modified for inclusion in Valgrind.
- * Copyright (C) 2008 Bart Van Assche <bar...@gm...>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * See also http://www.xmailserver.org/timerfd-test2.c
- */
-
-#if defined(__linux__)
-
-#define _GNU_SOURCE
-
-#include "../../config.h"
-#include <errno.h>
-#include <fcntl.h>
-#include <poll.h>
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-#include <unistd.h>
-#if defined(HAVE_SYS_SIGNAL_H)
-#include <sys/signal.h>
-#endif
-#if defined(HAVE_SYS_SYSCALL_H)
-#include <sys/syscall.h>
-#endif
-#if defined(HAVE_SYS_TIME_H)
-#include <sys/time.h>
-#endif
-#if defined(HAVE_SYS_TYPES_H)
-#include <sys/types.h>
-#endif
-
-
-/*
- * timerfd_* system call numbers introduced in 2.6.23. These constants are
- * not yet in the glibc 2.7 headers, that is why they are defined here.
- */
-#ifndef __NR_timerfd_create
-#if defined(__x86_64__)
-#define __NR_timerfd_create 283
-#define __NR_timerfd_settime 286
-#define __NR_timerfd_gettime 287
-#elif defined(__i386__)
-#define __NR_timerfd_create 322
-#define __NR_timerfd_settime 325
-#define __NR_timerfd_gettime 326
-#elif defined(__powerpc__)
-#define __NR_timerfd_create 306
-#define __NR_timerfd_settime 311
-#define __NR_timerfd_gettime 312
-#else
-#error Cannot detect your architecture!
-#endif
-#endif
-
-
-
-/* Definitions from include/linux/timerfd.h */
-#define TFD_TIMER_ABSTIME (1 << 0)
-
-
-
-struct tmr_type
-{
- int id;
- char const *name;
-};
-
-
-#if defined(HAVE_CLOCK_GETTIME)
-unsigned long long getustime(int clockid)
-{
- struct timespec tp;
-
- if (clock_gettime((clockid_t) clockid, &tp))
- {
- perror("clock_gettime");
- return 0;
- }
-
- return 1000000ULL * tp.tv_sec + tp.tv_nsec / 1000;
-}
-#else
-unsigned long long getustime(int clockid)
-{
- fprintf(stderr, "error: clock_gettime\n");
- return 0;
-}
-#endif
-
-void set_timespec(struct timespec *tmr, unsigned long long ustime)
-{
- tmr->tv_sec = (time_t) (ustime / 1000000ULL);
- tmr->tv_nsec = (long) (1000ULL * (ustime % 1000000ULL));
-}
-
-int timerfd_create(int clockid, int flags)
-{
- return syscall(__NR_timerfd_create, clockid, flags);
-}
-
-int timerfd_settime(int ufc, int flags, const struct itimerspec *utmr,
- struct itimerspec *otmr)
-{
- return syscall(__NR_timerfd_settime, ufc, flags, utmr, otmr);
-}
-
-int timerfd_gettime(int ufc, struct itimerspec *otmr)
-{
- return syscall(__NR_timerfd_gettime, ufc, otmr);
-}
-
-long waittmr(int tfd, int timeo)
-{
- u_int64_t ticks;
- struct pollfd pfd;
-
- pfd.fd = tfd;
- pfd.events = POLLIN;
- pfd.revents = 0;
- if (poll(&pfd, 1, timeo) < 0)
- {
- perror("poll");
- return -1;
- }
- if ((pfd.revents & POLLIN) == 0)
- {
- fprintf(stdout, "no ticks happened\n");
- return -1;
- }
- if (read(tfd, &ticks, sizeof(ticks)) != sizeof(ticks))
- {
- perror("timerfd read");
- return -1;
- }
-
- return ticks;
-}
-
-int main(int ac, char **av)
-{
- int i, tfd;
- long ticks;
- unsigned long long tnow, ttmr;
- u_int64_t uticks;
- struct itimerspec tmr;
- struct tmr_type clks[] =
- {
-#if defined(HAVE_CLOCK_MONOTONIC)
- { CLOCK_MONOTONIC, "CLOCK MONOTONIC" },
-#endif
- { CLOCK_REALTIME, "CLOCK REALTIME" },
- };
-
- for (i = 0; i < sizeof(clks) / sizeof(clks[0]); i++)
- {
- fprintf(stdout, "\n\n---------------------------------------\n");
- fprintf(stdout, "| testing %s\n", clks[i].name);
- fprintf(stdout, "---------------------------------------\n\n");
-
- fprintf(stdout, "relative timer test (at 500 ms) ...\n");
- set_timespec(&tmr.it_value, 500 * 1000);
- set_timespec(&tmr.it_interval, 0);
- tnow = getustime(clks[i].id);
- if ((tfd = timerfd_create(clks[i].id, 0)) == -1)
- {
- perror("timerfd_create");
- return 1;
- }
-
- if (timerfd_settime(tfd, 0, &tmr, NULL))
- {
- perror("timerfd_settime");
- return 1;
- }
-
- fprintf(stdout, "wating timer ...\n");
- ticks = waittmr(tfd, -1);
- ttmr = getustime(clks[i].id);
- if (ticks <= 0)
- fprintf(stdout, "whooops! no timer showed up!\n");
- else
- fprintf(stdout, "got timer ticks (%ld) after %.1f s\n",
- ticks, (ttmr - tnow) * 1e-6);
-
-
- fprintf(stdout, "absolute timer test (at 500 ms) ...\n");
- tnow = getustime(clks[i].id);
- set_timespec(&tmr.it_value, tnow + 500 * 1000);
- set_timespec(&tmr.it_interval, 0);
- if (timerfd_settime(tfd, TFD_TIMER_ABSTIME, &tmr, NULL))
- {
- perror("timerfd_settime");
- return 1;
- }
-
- fprintf(stdout, "wating timer ...\n");
- ticks = waittmr(tfd, -1);
- ttmr = getustime(clks[i].id);
- if (ticks <= 0)
- fprintf(stdout, "whooops! no timer showed up!\n");
- else
- fprintf(stdout, "got timer ticks (%ld) after %.1f s\n",
- ticks, (ttmr - tnow) * 1e-6);
-
- fprintf(stdout, "sequential timer test (100 ms clock) ...\n");
- tnow = getustime(clks[i].id);
- set_timespec(&tmr.it_value, tnow + 100 * 1000);
- set_timespec(&tmr.it_interval, 100 * 1000);
- if (timerfd_settime(tfd, TFD_TIMER_ABSTIME, &tmr, NULL))
- {
- perror("timerfd_settime");
- return 1;
- }
-
- fprintf(stdout, "sleeping one second ...\n");
- sleep(1);
- if (timerfd_gettime(tfd, &tmr))
- {
- perror("timerfd_gettime");
- return 1;
- }
- fprintf(stdout, "timerfd_gettime returned:\n"
- "\tit_value = %.1f it_interval = %.1f\n",
- tmr.it_value.tv_sec + 1e-9 * tmr.it_value.tv_nsec,
- tmr.it_interval.tv_sec + 1e-9 * tmr.it_interval.tv_nsec);
- fprintf(stdout, "sleeping 1 second ...\n");
- sleep(1);
-
- fprintf(stdout, "wating timer ...\n");
- ticks = waittmr(tfd, -1);
- ttmr = getustime(clks[i].id);
- if (ticks <= 0)
- fprintf(stdout, "whooops! no timer showed up!\n");
- else
- fprintf(stdout, "got timer ticks (%ld) after %.1f s\n",
- ticks, (ttmr - tnow) * 1e-6);
-
-
- fprintf(stdout, "O_NONBLOCK test ...\n");
- tnow = getustime(clks[i].id);
- set_timespec(&tmr.it_value, 100 * 1000);
- set_timespec(&tmr.it_interval, 0);
- if (timerfd_settime(tfd, 0, &tmr, NULL))
- {
- perror("timerfd_settime");
- return 1;
- }
-#if 0
- fprintf(stdout, "timerfd = %d\n", tfd);
-#endif
-
- fprintf(stdout, "wating timer (flush the single tick) ...\n");
- ticks = waittmr(tfd, -1);
- ttmr = getustime(clks[i].id);
- if (ticks <= 0)
- fprintf(stdout, "whooops! no timer showed up!\n");
- else
- fprintf(stdout, "got timer ticks (%ld) after %.1f s\n",
- ticks, (ttmr - tnow) * 1e-6);
-
- fcntl(tfd, F_SETFL, fcntl(tfd, F_GETFL, 0) | O_NONBLOCK);
-
- if (read(tfd, &uticks, sizeof(uticks)) > 0)
- fprintf(stdout, "whooops! timer ticks not zero when should have been\n");
- else if (errno != EAGAIN)
- fprintf(stdout, "whooops! bad errno value (%d = '%s')!\n",
- errno, strerror(errno));
- else
- fprintf(stdout, "success\n");
-
- fcntl(tfd, F_SETFL, fcntl(tfd, F_GETFL, 0) & ~O_NONBLOCK);
-
- close(tfd);
- }
-
- return 0;
-}
-
-#endif /* __linux__ */
-
-#if defined(_AIX)
-#include <stdio.h>
-int main(int ac, char **av)
-{
- fprintf(stderr, "This test does not work on AIX5.\n");
- return 0;
-}
-#endif /* _AIX */
Deleted: trunk/memcheck/tests/linux-timerfd-syscall.stderr.exp
===================================================================
--- trunk/memcheck/tests/linux-timerfd-syscall.stderr.exp 2009-01-19 03:16:59 UTC (rev 8974)
+++ trunk/memcheck/tests/linux-timerfd-syscall.stderr.exp 2009-01-19 03:44:19 UTC (rev 8975)
@@ -1,7 +0,0 @@
-
-
-ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
-malloc/free: in use at exit: 0 bytes in 0 blocks.
-malloc/free: 0 allocs, 0 frees, 0 bytes allocated.
-For a detailed leak analysis, rerun with: --leak-check=yes
-For counts of detected errors, rerun with: -v
Deleted: trunk/memcheck/tests/linux-timerfd-syscall.stdout.exp
===================================================================
--- trunk/memcheck/tests/linux-timerfd-syscall.stdout.exp 2009-01-19 03:16:59 UTC (rev 8974)
+++ trunk/memcheck/tests/linux-timerfd-syscall.stdout.exp 2009-01-19 03:44:19 UTC (rev 8975)
@@ -1,46 +0,0 @@
-
-
----------------------------------------
-| testing CLOCK MONOTONIC
----------------------------------------
-
-relative timer test (at 500 ms) ...
-wating timer ...
-got timer ticks (1) after 0.5 s
-absolute timer test (at 500 ms) ...
-wating timer ...
-got timer ticks (1) after 0.5 s
-sequential timer test (100 ms clock) ...
-sleeping one second ...
-timerfd_gettime returned:
- it_value = 0.1 it_interval = 0.1
-sleeping 1 second ...
-wating timer ...
-got timer ticks (20) after 2.0 s
-O_NONBLOCK test ...
-wating timer (flush the single tick) ...
-got timer ticks (1) after 0.1 s
-success
-
-
----------------------------------------
-| testing CLOCK REALTIME
----------------------------------------
-
-relative timer test (at 500 ms) ...
-wating timer ...
-got timer ticks (1) after 0.5 s
-absolute timer test (at 500 ms) ...
-wating timer ...
-got timer ticks (1) after 0.5 s
-sequential timer test (100 ms clock) ...
-sleeping one second ...
-timerfd_gettime returned:
- it_value = 0.1 it_interval = 0.1
-sleeping 1 second ...
-wating timer ...
-got timer ticks (20) after 2.0 s
-O_NONBLOCK test ...
-wating timer (flush the single tick) ...
-got timer ticks (1) after 0.1 s
-success
Deleted: trunk/memcheck/tests/linux-timerfd-syscall.vgtest
===================================================================
--- trunk/memcheck/tests/linux-timerfd-syscall.vgtest 2009-01-19 03:16:59 UTC (rev 8974)
+++ trunk/memcheck/tests/linux-timerfd-syscall.vgtest 2009-01-19 03:44:19 UTC (rev 8975)
@@ -1,2 +0,0 @@
-prereq: [ "$(uname)" = "Linux" ] && awk 'END{exit("'$(uname -r)'" >= "2.6.25" ? 0 : 1)}' </dev/null
-prog: linux-timerfd-syscall
|