[v4,01/13] gdb/record: Add testcases for a few syscalls.

Message ID 1446203624-12700-1-git-send-email-koriakin@0x04.net
State New, archived
Headers

Commit Message

Marcin Kościelnicki Oct. 30, 2015, 11:13 a.m. UTC
  gdb/testsuite/ChangeLog:

	* gdb.reverse/fstatat-reverse.c: New test.
	* gdb.reverse/fstatat-reverse.exp: New file.
	* gdb.reverse/getresuid-reverse.c: New test.
	* gdb.reverse/getresuid-reverse.exp: New file.
	* gdb.reverse/pipe-reverse.c: New test.
	* gdb.reverse/pipe-reverse.exp: New file.
	* gdb.reverse/readv-reverse.c: New test.
	* gdb.reverse/readv-reverse.exp: New file.
	* gdb.reverse/recvmsg-reverse.c: New test.
	* gdb.reverse/recvmsg-reverse.exp: New file.
	* gdb.reverse/time-reverse.c: New test.
	* gdb.reverse/time-reverse.exp: New file.
	* gdb.reverse/waitpid-reverse.c: New test.
	* gdb.reverse/waitpid-reverse.exp: New file.
---
Nits fixed.  I do not have push rights (this is, in fact, my first gdb patch).

 gdb/testsuite/ChangeLog                         | 17 +++++
 gdb/testsuite/gdb.reverse/fstatat-reverse.c     | 43 +++++++++++
 gdb/testsuite/gdb.reverse/fstatat-reverse.exp   | 55 +++++++++++++++
 gdb/testsuite/gdb.reverse/getresuid-reverse.c   | 42 +++++++++++
 gdb/testsuite/gdb.reverse/getresuid-reverse.exp | 62 ++++++++++++++++
 gdb/testsuite/gdb.reverse/pipe-reverse.c        | 40 +++++++++++
 gdb/testsuite/gdb.reverse/pipe-reverse.exp      | 55 +++++++++++++++
 gdb/testsuite/gdb.reverse/readv-reverse.c       | 50 +++++++++++++
 gdb/testsuite/gdb.reverse/readv-reverse.exp     | 58 +++++++++++++++
 gdb/testsuite/gdb.reverse/recvmsg-reverse.c     | 94 +++++++++++++++++++++++++
 gdb/testsuite/gdb.reverse/recvmsg-reverse.exp   | 65 +++++++++++++++++
 gdb/testsuite/gdb.reverse/time-reverse.c        | 42 +++++++++++
 gdb/testsuite/gdb.reverse/time-reverse.exp      | 55 +++++++++++++++
 gdb/testsuite/gdb.reverse/waitpid-reverse.c     | 44 ++++++++++++
 gdb/testsuite/gdb.reverse/waitpid-reverse.exp   | 55 +++++++++++++++
 15 files changed, 777 insertions(+)
 create mode 100644 gdb/testsuite/gdb.reverse/fstatat-reverse.c
 create mode 100644 gdb/testsuite/gdb.reverse/fstatat-reverse.exp
 create mode 100644 gdb/testsuite/gdb.reverse/getresuid-reverse.c
 create mode 100644 gdb/testsuite/gdb.reverse/getresuid-reverse.exp
 create mode 100644 gdb/testsuite/gdb.reverse/pipe-reverse.c
 create mode 100644 gdb/testsuite/gdb.reverse/pipe-reverse.exp
 create mode 100644 gdb/testsuite/gdb.reverse/readv-reverse.c
 create mode 100644 gdb/testsuite/gdb.reverse/readv-reverse.exp
 create mode 100644 gdb/testsuite/gdb.reverse/recvmsg-reverse.c
 create mode 100644 gdb/testsuite/gdb.reverse/recvmsg-reverse.exp
 create mode 100644 gdb/testsuite/gdb.reverse/time-reverse.c
 create mode 100644 gdb/testsuite/gdb.reverse/time-reverse.exp
 create mode 100644 gdb/testsuite/gdb.reverse/waitpid-reverse.c
 create mode 100644 gdb/testsuite/gdb.reverse/waitpid-reverse.exp
  

Comments

Pedro Alves Oct. 30, 2015, 3:30 p.m. UTC | #1
On 10/30/2015 11:13 AM, Marcin Kościelnicki wrote:
> gdb/testsuite/ChangeLog:
> 
> 	* gdb.reverse/fstatat-reverse.c: New test.
> 	* gdb.reverse/fstatat-reverse.exp: New file.
> 	* gdb.reverse/getresuid-reverse.c: New test.
> 	* gdb.reverse/getresuid-reverse.exp: New file.
> 	* gdb.reverse/pipe-reverse.c: New test.
> 	* gdb.reverse/pipe-reverse.exp: New file.
> 	* gdb.reverse/readv-reverse.c: New test.
> 	* gdb.reverse/readv-reverse.exp: New file.
> 	* gdb.reverse/recvmsg-reverse.c: New test.
> 	* gdb.reverse/recvmsg-reverse.exp: New file.
> 	* gdb.reverse/time-reverse.c: New test.
> 	* gdb.reverse/time-reverse.exp: New file.
> 	* gdb.reverse/waitpid-reverse.c: New test.
> 	* gdb.reverse/waitpid-reverse.exp: New file.
> ---
> Nits fixed.  I do not have push rights (this is, in fact, my first gdb patch).

Looks perfect now.

The rule for write access is just to have copyright in order, and
send at least one good patch.  So you now qualify for write access.

If you intend to keep working on gdb, it'd be good to have you
push your own patches.  Let me know if you'd like that.

Thanks,
Pedro Alves
  
Pedro Alves Oct. 30, 2015, 3:55 p.m. UTC | #2
On 10/30/2015 11:13 AM, Marcin Kościelnicki wrote:
> gdb/testsuite/ChangeLog:
> 
> 	* gdb.reverse/fstatat-reverse.c: New test.
> 	* gdb.reverse/fstatat-reverse.exp: New file.
> 	* gdb.reverse/getresuid-reverse.c: New test.
> 	* gdb.reverse/getresuid-reverse.exp: New file.
> 	* gdb.reverse/pipe-reverse.c: New test.
> 	* gdb.reverse/pipe-reverse.exp: New file.
> 	* gdb.reverse/readv-reverse.c: New test.
> 	* gdb.reverse/readv-reverse.exp: New file.
> 	* gdb.reverse/recvmsg-reverse.c: New test.
> 	* gdb.reverse/recvmsg-reverse.exp: New file.
> 	* gdb.reverse/time-reverse.c: New test.
> 	* gdb.reverse/time-reverse.exp: New file.
> 	* gdb.reverse/waitpid-reverse.c: New test.
> 	* gdb.reverse/waitpid-reverse.exp: New file.
> ---
> Nits fixed.  I do not have push rights (this is, in fact, my first gdb patch).

I pushed in the whole series for you now.

Thanks,
Pedro Alves
  

Patch

diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index 1313aa2..07ec548 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,3 +1,20 @@ 
+2015-10-22  Marcin Kościelnicki  <koriakin@0x04.net>
+
+	* gdb.reverse/fstatat-reverse.c: New test.
+	* gdb.reverse/fstatat-reverse.exp: New file.
+	* gdb.reverse/getresuid-reverse.c: New test.
+	* gdb.reverse/getresuid-reverse.exp: New file.
+	* gdb.reverse/pipe-reverse.c: New test.
+	* gdb.reverse/pipe-reverse.exp: New file.
+	* gdb.reverse/readv-reverse.c: New test.
+	* gdb.reverse/readv-reverse.exp: New file.
+	* gdb.reverse/recvmsg-reverse.c: New test.
+	* gdb.reverse/recvmsg-reverse.exp: New file.
+	* gdb.reverse/time-reverse.c: New test.
+	* gdb.reverse/time-reverse.exp: New file.
+	* gdb.reverse/waitpid-reverse.c: New test.
+	* gdb.reverse/waitpid-reverse.exp: New file.
+
 2015-10-21  Simon Marchi  <simon.marchi@polymtl.ca>
 
 	PR python/18073
diff --git a/gdb/testsuite/gdb.reverse/fstatat-reverse.c b/gdb/testsuite/gdb.reverse/fstatat-reverse.c
new file mode 100644
index 0000000..109f8ae
--- /dev/null
+++ b/gdb/testsuite/gdb.reverse/fstatat-reverse.c
@@ -0,0 +1,43 @@ 
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright 2008-2015 Free Software Foundation, Inc.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+#define _GNU_SOURCE
+#include <unistd.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+
+void
+marker1 (void)
+{
+}
+
+void
+marker2 (void)
+{
+}
+
+struct stat buf;
+
+int
+main (void)
+{
+  marker1 ();
+  int fd = open ("/", O_PATH);
+  fstatat( fd, ".", &buf, 0);
+  marker2 ();
+  return 0;
+}
diff --git a/gdb/testsuite/gdb.reverse/fstatat-reverse.exp b/gdb/testsuite/gdb.reverse/fstatat-reverse.exp
new file mode 100644
index 0000000..09deb6c
--- /dev/null
+++ b/gdb/testsuite/gdb.reverse/fstatat-reverse.exp
@@ -0,0 +1,55 @@ 
+# Copyright 2015 Free Software Foundation, Inc.
+
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+# This file is part of the gdb testsuite.
+
+#
+# This test tests fstatat syscall for reverse execution.
+#
+
+if ![supports_reverse] {
+    return
+}
+
+standard_testfile
+
+if { [prepare_for_testing $testfile.exp $testfile $srcfile] } {
+    return -1
+}
+
+runto main
+
+if [supports_process_record] {
+    # Activate process record/replay
+    gdb_test_no_output "record" "Turn on process record"
+}
+
+gdb_test "break marker1" \
+    "Breakpoint $decimal at $hex: file .*$srcfile, line $decimal.*" \
+    "set breakpoint at marker1"
+
+gdb_test "break marker2" \
+    "Breakpoint $decimal at $hex: file .*$srcfile, line $decimal.*" \
+    "set breakpoint at marker2"
+
+gdb_continue_to_breakpoint "marker2" ".*$srcfile:.*"
+
+gdb_test "reverse-continue" ".*$srcfile:$decimal.*" "reverse to marker1"
+
+# If the variable was recorded properly on syscall, the old contents (0)
+# will be remembered.  If not, new contents (mode of /) will be used,
+# and the test will fail.
+
+gdb_test "print buf.st_mode" ".* = 0" "check fstatat record"
diff --git a/gdb/testsuite/gdb.reverse/getresuid-reverse.c b/gdb/testsuite/gdb.reverse/getresuid-reverse.c
new file mode 100644
index 0000000..f44692a
--- /dev/null
+++ b/gdb/testsuite/gdb.reverse/getresuid-reverse.c
@@ -0,0 +1,42 @@ 
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright 2008-2015 Free Software Foundation, Inc.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+#define _GNU_SOURCE
+#include <unistd.h>
+
+void
+marker1 (void)
+{
+}
+
+void
+marker2 (void)
+{
+}
+
+uid_t ruid = -1, euid = -1, suid = -1;
+gid_t rgid = -1, egid = -1, sgid = -1;
+
+int
+main (void)
+{
+  marker1 ();
+  getresuid (&ruid, &euid, &suid);
+  getresgid (&rgid, &egid, &sgid);
+  marker2 ();
+  return 0;
+}
diff --git a/gdb/testsuite/gdb.reverse/getresuid-reverse.exp b/gdb/testsuite/gdb.reverse/getresuid-reverse.exp
new file mode 100644
index 0000000..b93fb91
--- /dev/null
+++ b/gdb/testsuite/gdb.reverse/getresuid-reverse.exp
@@ -0,0 +1,62 @@ 
+# Copyright 2015 Free Software Foundation, Inc.
+
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+# This file is part of the gdb testsuite.
+
+#
+# This test tests getresuid/getresgid syscalls for reverse execution.
+#
+
+if ![supports_reverse] {
+    return
+}
+
+standard_testfile
+
+if { [prepare_for_testing $testfile.exp $testfile $srcfile] } {
+    return -1
+}
+
+runto main
+
+if [supports_process_record] {
+    # Activate process record/replay
+    gdb_test_no_output "record" "Turn on process record"
+}
+
+gdb_test "break marker1" \
+    "Breakpoint $decimal at $hex: file .*$srcfile, line $decimal.*" \
+    "set breakpoint at marker1"
+
+gdb_test "break marker2" \
+    "Breakpoint $decimal at $hex: file .*$srcfile, line $decimal.*" \
+    "set breakpoint at marker2"
+
+gdb_continue_to_breakpoint "marker2" ".*$srcfile:.*"
+
+gdb_test "reverse-continue" ".*$srcfile:$decimal.*" "reverse to marker1"
+
+# If the variables were recorded properly on syscall, the old contents (-1)
+# will be remembered.  If not, new contents (the actual uid/gid) will be used,
+# and the test will fail (we hope the test user doesn't actually have uid of
+# -1).  Do it this way instead of printing uid/gid directly, since uid_t/gid_t
+# is likely to be unsigned.
+
+gdb_test "print ruid == (uid_t)-1" ".* = 1" "check ruid record"
+gdb_test "print euid == (uid_t)-1" ".* = 1" "check euid record"
+gdb_test "print suid == (uid_t)-1" ".* = 1" "check suid record"
+gdb_test "print rgid == (gid_t)-1" ".* = 1" "check rgid record"
+gdb_test "print egid == (gid_t)-1" ".* = 1" "check egid record"
+gdb_test "print sgid == (gid_t)-1" ".* = 1" "check sgid record"
diff --git a/gdb/testsuite/gdb.reverse/pipe-reverse.c b/gdb/testsuite/gdb.reverse/pipe-reverse.c
new file mode 100644
index 0000000..cb8e1c3
--- /dev/null
+++ b/gdb/testsuite/gdb.reverse/pipe-reverse.c
@@ -0,0 +1,40 @@ 
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright 2008-2015 Free Software Foundation, Inc.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+#define _GNU_SOURCE
+#include <unistd.h>
+
+void
+marker1 (void)
+{
+}
+
+void
+marker2 (void)
+{
+}
+
+int fds[2] = { -1, -1 };
+
+int
+main (void)
+{
+  marker1 ();
+  pipe (fds);
+  marker2 ();
+  return 0;
+}
diff --git a/gdb/testsuite/gdb.reverse/pipe-reverse.exp b/gdb/testsuite/gdb.reverse/pipe-reverse.exp
new file mode 100644
index 0000000..482893a
--- /dev/null
+++ b/gdb/testsuite/gdb.reverse/pipe-reverse.exp
@@ -0,0 +1,55 @@ 
+# Copyright 2015 Free Software Foundation, Inc.
+
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+# This file is part of the gdb testsuite.
+
+#
+# This test tests pipe syscall for reverse execution.
+#
+
+if ![supports_reverse] {
+    return
+}
+
+standard_testfile
+
+if { [prepare_for_testing $testfile.exp $testfile $srcfile] } {
+    return -1
+}
+
+runto main
+
+if [supports_process_record] {
+    # Activate process record/replay
+    gdb_test_no_output "record" "Turn on process record"
+}
+
+gdb_test "break marker1" \
+    "Breakpoint $decimal at $hex: file .*$srcfile, line $decimal.*" \
+    "set breakpoint at marker1"
+
+gdb_test "break marker2" \
+    "Breakpoint $decimal at $hex: file .*$srcfile, line $decimal.*" \
+    "set breakpoint at marker2"
+
+gdb_continue_to_breakpoint "marker2" ".*$srcfile:.*"
+
+gdb_test "reverse-continue" ".*$srcfile:$decimal.*" "reverse to marker1"
+
+# If the variables were recorded properly on syscall, the old contents (-1)
+# will be remembered.  If not, new contents (the file fds from pipe) will be
+# used, and the test will fail.
+
+gdb_test "print fds" ".* = {-1, -1}" "check pipe record"
diff --git a/gdb/testsuite/gdb.reverse/readv-reverse.c b/gdb/testsuite/gdb.reverse/readv-reverse.c
new file mode 100644
index 0000000..71f2843
--- /dev/null
+++ b/gdb/testsuite/gdb.reverse/readv-reverse.c
@@ -0,0 +1,50 @@ 
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright 2008-2015 Free Software Foundation, Inc.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+#define _GNU_SOURCE
+#include <unistd.h>
+#include <sys/uio.h>
+
+void
+marker1 (void)
+{
+}
+
+void
+marker2 (void)
+{
+}
+
+int fds[2] = { -1, -1 };
+char buf[5];
+const struct iovec v[4] = {
+  { &buf[1], 1 },
+  { &buf[0], 1 },
+  { &buf[3], 1 },
+  { &buf[2], 1 },
+};
+
+int
+main (void)
+{
+  marker1 ();
+  pipe (fds);
+  write (fds[1], "UNIX", 4);
+  readv (fds[0], v, 4);
+  marker2 ();
+  return 0;
+}
diff --git a/gdb/testsuite/gdb.reverse/readv-reverse.exp b/gdb/testsuite/gdb.reverse/readv-reverse.exp
new file mode 100644
index 0000000..4158c10
--- /dev/null
+++ b/gdb/testsuite/gdb.reverse/readv-reverse.exp
@@ -0,0 +1,58 @@ 
+# Copyright 2015 Free Software Foundation, Inc.
+
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+# This file is part of the gdb testsuite.
+
+#
+# This test tests pipe syscall for reverse execution.
+#
+
+if ![supports_reverse] {
+    return
+}
+
+standard_testfile
+
+if { [prepare_for_testing $testfile.exp $testfile $srcfile] } {
+    return -1
+}
+
+runto main
+
+if [supports_process_record] {
+    # Activate process record/replay
+    gdb_test_no_output "record" "Turn on process record"
+}
+
+gdb_test "break marker1" \
+    "Breakpoint $decimal at $hex: file .*$srcfile, line $decimal.*" \
+    "set breakpoint at marker1"
+
+gdb_test "break marker2" \
+    "Breakpoint $decimal at $hex: file .*$srcfile, line $decimal.*" \
+    "set breakpoint at marker2"
+
+gdb_continue_to_breakpoint "marker2" ".*$srcfile:.*"
+
+gdb_test "reverse-continue" ".*$srcfile:$decimal.*" "reverse to marker1"
+
+# If the variables were recorded properly on syscall, the old contents ("")
+# will be remembered.  If not, new contents ("NUXI") will be
+# used, and the test will fail.
+
+gdb_test "print (int)buf\[0]" ".* = 0" "check readv record"
+gdb_test "print (int)buf\[1]" ".* = 0" "check readv record"
+gdb_test "print (int)buf\[2]" ".* = 0" "check readv record"
+gdb_test "print (int)buf\[3]" ".* = 0" "check readv record"
diff --git a/gdb/testsuite/gdb.reverse/recvmsg-reverse.c b/gdb/testsuite/gdb.reverse/recvmsg-reverse.c
new file mode 100644
index 0000000..4dd9cfd
--- /dev/null
+++ b/gdb/testsuite/gdb.reverse/recvmsg-reverse.c
@@ -0,0 +1,94 @@ 
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright 2008-2015 Free Software Foundation, Inc.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+#define _GNU_SOURCE
+#include <sys/socket.h>
+#include <sys/types.h>
+#include <sys/un.h>
+#include <unistd.h>
+
+void
+marker1 (void)
+{
+}
+
+void
+marker2 (void)
+{
+}
+
+char wdata[] = "abcdef";
+
+struct iovec wv[1] = {
+  { wdata, 6 },
+};
+
+char wc[CMSG_SPACE (sizeof (struct ucred)) + CMSG_SPACE (sizeof (int))];
+
+struct msghdr wmsg = {
+  0, 0,
+  wv, 1,
+  wc, sizeof wc,
+  0,
+};
+
+char rdata[5] = "xxxx";
+
+struct iovec rv[2] = {
+  {&rdata[2], 2},
+  {&rdata[0], 2},
+};
+
+char rc[CMSG_SPACE (sizeof (struct ucred)) + 7];
+
+struct msghdr rmsg = {
+  0, 0,
+  rv, 2,
+  rc, sizeof rc,
+  0,
+};
+
+int fds[2];
+
+int
+main (void)
+{
+  int itrue = 1;
+  /* prepare cmsg to send */
+  struct cmsghdr *cm1 = CMSG_FIRSTHDR (&wmsg);
+  cm1->cmsg_len = CMSG_LEN (sizeof (struct ucred));
+  cm1->cmsg_level = AF_UNIX;
+  cm1->cmsg_type = SCM_CREDENTIALS;
+  struct ucred *uc = (void *) CMSG_DATA (cm1);
+  uc->pid = getpid ();
+  uc->uid = getuid ();
+  uc->gid = getgid ();
+  struct cmsghdr *cm2 = CMSG_NXTHDR (&wmsg, cm1);
+  cm2->cmsg_len = CMSG_LEN (sizeof (int));
+  cm2->cmsg_level = AF_UNIX;
+  cm2->cmsg_type = SCM_RIGHTS;
+  int *pfd = (void *) CMSG_DATA (cm2);
+  *pfd = 2;
+  /* do the syscalls */
+  marker1 ();
+  socketpair (AF_UNIX, SOCK_DGRAM, 0, fds);
+  setsockopt (fds[0], SOL_SOCKET, SO_PASSCRED, &itrue, sizeof itrue);
+  sendmsg (fds[1], &wmsg, 0);
+  recvmsg (fds[0], &rmsg, 0);
+  marker2 ();
+  return 0;
+}
diff --git a/gdb/testsuite/gdb.reverse/recvmsg-reverse.exp b/gdb/testsuite/gdb.reverse/recvmsg-reverse.exp
new file mode 100644
index 0000000..7293a3d
--- /dev/null
+++ b/gdb/testsuite/gdb.reverse/recvmsg-reverse.exp
@@ -0,0 +1,65 @@ 
+# Copyright 2015 Free Software Foundation, Inc.
+
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+# This file is part of the gdb testsuite.
+
+#
+# This test tests socketpair and recvmsg syscalls for reverse execution.
+#
+
+if ![supports_reverse] {
+    return
+}
+
+standard_testfile
+
+if { [prepare_for_testing $testfile.exp $testfile $srcfile] } {
+    return -1
+}
+
+runto main
+
+if [supports_process_record] {
+    # Activate process record/replay
+    gdb_test_no_output "record" "Turn on process record"
+}
+
+gdb_test "break marker1" \
+    "Breakpoint $decimal at $hex: file .*$srcfile, line $decimal.*" \
+    "set breakpoint at marker1"
+
+gdb_test "break marker2" \
+    "Breakpoint $decimal at $hex: file .*$srcfile, line $decimal.*" \
+    "set breakpoint at marker2"
+
+gdb_continue_to_breakpoint "marker2" ".*$srcfile:.*"
+
+gdb_test "reverse-continue" ".*$srcfile:$decimal.*" "reverse to marker1"
+
+# If the variables were recorded properly on syscall, the old contents will
+# be remembered.  If not, new contents will be used, and the test will fail.
+
+# rdata should be "xxxx", not "cdab"
+gdb_test "print rdata" ".* = \"xxxx\"" "check recvmsg record - rdata"
+
+# rmsg.msg_flags should be zeros, not MSG_TRUNC | MSG_CTRUNC
+gdb_test "print rmsg.msg_flags" ".* = 0" "check recvmsg record - rmsg"
+
+# rmsg.msg_controllen should be sizeof rc, not actual size of control data
+# (7 bytes less)
+gdb_test "print rmsg.msg_controllen - sizeof rc" ".* = 0" "check recvmsg record - rmsg"
+
+# rc should be zeros, not received cmsg
+gdb_test "print ((struct cmsghdr *)rc)->cmsg_len" ".* = 0" "check recvmsg record - cmsg"
diff --git a/gdb/testsuite/gdb.reverse/time-reverse.c b/gdb/testsuite/gdb.reverse/time-reverse.c
new file mode 100644
index 0000000..1c457c4
--- /dev/null
+++ b/gdb/testsuite/gdb.reverse/time-reverse.c
@@ -0,0 +1,42 @@ 
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright 2008-2015 Free Software Foundation, Inc.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+#define _GNU_SOURCE
+#include <time.h>
+#include <sys/syscall.h>
+#include <unistd.h>
+
+void
+marker1 (void)
+{
+}
+
+void
+marker2 (void)
+{
+}
+
+time_t time_global = -1;
+
+int
+main (void)
+{
+  marker1 ();
+  syscall (SYS_time, &time_global);
+  marker2 ();
+  return 0;
+}
diff --git a/gdb/testsuite/gdb.reverse/time-reverse.exp b/gdb/testsuite/gdb.reverse/time-reverse.exp
new file mode 100644
index 0000000..9cec3c3
--- /dev/null
+++ b/gdb/testsuite/gdb.reverse/time-reverse.exp
@@ -0,0 +1,55 @@ 
+# Copyright 2015 Free Software Foundation, Inc.
+
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+# This file is part of the gdb testsuite.
+
+#
+# This test tests time syscall for reverse execution.
+#
+
+if ![supports_reverse] {
+    return
+}
+
+standard_testfile
+
+if { [prepare_for_testing $testfile.exp $testfile $srcfile] } {
+    return -1
+}
+
+runto main
+
+if [supports_process_record] {
+    # Activate process record/replay
+    gdb_test_no_output "record" "Turn on process record"
+}
+
+gdb_test "break marker1" \
+    "Breakpoint $decimal at $hex: file .*$srcfile, line $decimal.*" \
+    "set breakpoint at marker1"
+
+gdb_test "break marker2" \
+    "Breakpoint $decimal at $hex: file .*$srcfile, line $decimal.*" \
+    "set breakpoint at marker2"
+
+gdb_continue_to_breakpoint "marker2" ".*$srcfile:.*"
+
+gdb_test "reverse-continue" ".*$srcfile:$decimal.*" "reverse to marker1"
+
+# If the variable was recorded properly on syscall, the old contents (-1)
+# will be remembered.  If not, new contents (current time) will be used,
+# and the test will fail.
+
+gdb_test "print time_global" ".* = -1" "check time record"
diff --git a/gdb/testsuite/gdb.reverse/waitpid-reverse.c b/gdb/testsuite/gdb.reverse/waitpid-reverse.c
new file mode 100644
index 0000000..5b3b8c3
--- /dev/null
+++ b/gdb/testsuite/gdb.reverse/waitpid-reverse.c
@@ -0,0 +1,44 @@ 
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright 2008-2015 Free Software Foundation, Inc.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+#include <unistd.h>
+#include <stdlib.h>
+#include <sys/wait.h>
+
+void
+marker1 (void)
+{
+}
+
+void
+marker2 (void)
+{
+}
+
+int status = -1;
+
+int
+main (void)
+{
+  marker1 ();
+  if (!fork ())
+    _exit (123);
+  else
+    waitpid (-1, &status, 0);
+  marker2 ();
+  return 0;
+}
diff --git a/gdb/testsuite/gdb.reverse/waitpid-reverse.exp b/gdb/testsuite/gdb.reverse/waitpid-reverse.exp
new file mode 100644
index 0000000..f4a4403
--- /dev/null
+++ b/gdb/testsuite/gdb.reverse/waitpid-reverse.exp
@@ -0,0 +1,55 @@ 
+# Copyright 2015 Free Software Foundation, Inc.
+
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+# This file is part of the gdb testsuite.
+
+#
+# This test tests waitpid syscall for reverse execution.
+#
+
+if ![supports_reverse] {
+    return
+}
+
+standard_testfile
+
+if { [prepare_for_testing $testfile.exp $testfile $srcfile] } {
+    return -1
+}
+
+runto main
+
+if [supports_process_record] {
+    # Activate process record/replay
+    gdb_test_no_output "record" "Turn on process record"
+}
+
+gdb_test "break marker1" \
+    "Breakpoint $decimal at $hex: file .*$srcfile, line $decimal.*" \
+    "set breakpoint at marker1"
+
+gdb_test "break marker2" \
+    "Breakpoint $decimal at $hex: file .*$srcfile, line $decimal.*" \
+    "set breakpoint at marker2"
+
+gdb_continue_to_breakpoint "marker2" ".*$srcfile:.*"
+
+gdb_test "reverse-continue" ".*$srcfile:$decimal.*" "reverse to marker1"
+
+# If the variable was recorded properly on syscall, the old contents (-1)
+# will be remembered.  If not, new contents (status) will be used, and
+# the test will fail.
+
+gdb_test "print status" ".* = -1" "check waitpid record"