mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-04 16:23:55 -06:00
tests/tcg: Add two follow-fork-mode tests
Add follow-fork-mode child and and follow-fork-mode parent tests. Check for the obvious pitfalls, such as lingering breakpoints, catchpoints, and single-step mode. Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com> Message-Id: <20240219141628.246823-13-iii@linux.ibm.com> Signed-off-by: Alex Bennée <alex.bennee@linaro.org> Message-Id: <20240305121005.3528075-14-alex.bennee@linaro.org>
This commit is contained in:
parent
d547e711a8
commit
b9504c9ad9
4 changed files with 128 additions and 1 deletions
56
tests/tcg/multiarch/follow-fork-mode.c
Normal file
56
tests/tcg/multiarch/follow-fork-mode.c
Normal file
|
@ -0,0 +1,56 @@
|
|||
/*
|
||||
* Test GDB's follow-fork-mode.
|
||||
*
|
||||
* fork() a chain of processes.
|
||||
* Parents sends one byte to their children, and children return their
|
||||
* position in the chain, in order to prove that they survived GDB's fork()
|
||||
* handling.
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0-or-later
|
||||
*/
|
||||
#include <assert.h>
|
||||
#include <stdlib.h>
|
||||
#include <sys/wait.h>
|
||||
#include <unistd.h>
|
||||
|
||||
void break_after_fork(void)
|
||||
{
|
||||
}
|
||||
|
||||
int main(void)
|
||||
{
|
||||
int depth = 42, err, i, fd[2], status;
|
||||
pid_t child, pid;
|
||||
ssize_t n;
|
||||
char b;
|
||||
|
||||
for (i = 0; i < depth; i++) {
|
||||
err = pipe(fd);
|
||||
assert(err == 0);
|
||||
child = fork();
|
||||
break_after_fork();
|
||||
assert(child != -1);
|
||||
if (child == 0) {
|
||||
close(fd[1]);
|
||||
|
||||
n = read(fd[0], &b, 1);
|
||||
close(fd[0]);
|
||||
assert(n == 1);
|
||||
assert(b == (char)i);
|
||||
} else {
|
||||
close(fd[0]);
|
||||
|
||||
b = (char)i;
|
||||
n = write(fd[1], &b, 1);
|
||||
close(fd[1]);
|
||||
assert(n == 1);
|
||||
|
||||
pid = waitpid(child, &status, 0);
|
||||
assert(pid == child);
|
||||
assert(WIFEXITED(status));
|
||||
return WEXITSTATUS(status) - 1;
|
||||
}
|
||||
}
|
||||
|
||||
return depth;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue