mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-29 16:38:05 +08:00
gdb/record: Add testcases for a few syscalls.
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.
This commit is contained in:

committed by
Pedro Alves

parent
7ea45d72f9
commit
452b4ba5f7
@ -1,3 +1,20 @@
|
|||||||
|
2015-10-30 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-27 Jan Kratochvil <jan.kratochvil@redhat.com>
|
2015-10-27 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||||
|
|
||||||
* gdb.ada/access_to_packed_array.exp: Fix typos erroring the testfile.
|
* gdb.ada/access_to_packed_array.exp: Fix typos erroring the testfile.
|
||||||
|
43
gdb/testsuite/gdb.reverse/fstatat-reverse.c
Normal file
43
gdb/testsuite/gdb.reverse/fstatat-reverse.c
Normal file
@ -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;
|
||||||
|
}
|
55
gdb/testsuite/gdb.reverse/fstatat-reverse.exp
Normal file
55
gdb/testsuite/gdb.reverse/fstatat-reverse.exp
Normal file
@ -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"
|
42
gdb/testsuite/gdb.reverse/getresuid-reverse.c
Normal file
42
gdb/testsuite/gdb.reverse/getresuid-reverse.c
Normal file
@ -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;
|
||||||
|
}
|
62
gdb/testsuite/gdb.reverse/getresuid-reverse.exp
Normal file
62
gdb/testsuite/gdb.reverse/getresuid-reverse.exp
Normal file
@ -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"
|
40
gdb/testsuite/gdb.reverse/pipe-reverse.c
Normal file
40
gdb/testsuite/gdb.reverse/pipe-reverse.c
Normal file
@ -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;
|
||||||
|
}
|
55
gdb/testsuite/gdb.reverse/pipe-reverse.exp
Normal file
55
gdb/testsuite/gdb.reverse/pipe-reverse.exp
Normal file
@ -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"
|
50
gdb/testsuite/gdb.reverse/readv-reverse.c
Normal file
50
gdb/testsuite/gdb.reverse/readv-reverse.c
Normal file
@ -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;
|
||||||
|
}
|
58
gdb/testsuite/gdb.reverse/readv-reverse.exp
Normal file
58
gdb/testsuite/gdb.reverse/readv-reverse.exp
Normal file
@ -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"
|
94
gdb/testsuite/gdb.reverse/recvmsg-reverse.c
Normal file
94
gdb/testsuite/gdb.reverse/recvmsg-reverse.c
Normal file
@ -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;
|
||||||
|
}
|
65
gdb/testsuite/gdb.reverse/recvmsg-reverse.exp
Normal file
65
gdb/testsuite/gdb.reverse/recvmsg-reverse.exp
Normal file
@ -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"
|
42
gdb/testsuite/gdb.reverse/time-reverse.c
Normal file
42
gdb/testsuite/gdb.reverse/time-reverse.c
Normal file
@ -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;
|
||||||
|
}
|
55
gdb/testsuite/gdb.reverse/time-reverse.exp
Normal file
55
gdb/testsuite/gdb.reverse/time-reverse.exp
Normal file
@ -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"
|
44
gdb/testsuite/gdb.reverse/waitpid-reverse.c
Normal file
44
gdb/testsuite/gdb.reverse/waitpid-reverse.c
Normal file
@ -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;
|
||||||
|
}
|
55
gdb/testsuite/gdb.reverse/waitpid-reverse.exp
Normal file
55
gdb/testsuite/gdb.reverse/waitpid-reverse.exp
Normal file
@ -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"
|
Reference in New Issue
Block a user