xref: /freebsd/tools/test/stress2/misc/kcmp.sh (revision ef777be98543f7daae90bd123d4fc1ec4a54efc2)
1*ef777be9SPeter Holm#!/bin/sh
2*ef777be9SPeter Holm
3*ef777be9SPeter Holm#
4*ef777be9SPeter Holm# Copyright (c) 2025 Peter Holm <pho@FreeBSD.org>
5*ef777be9SPeter Holm#
6*ef777be9SPeter Holm# SPDX-License-Identifier: BSD-2-Clause
7*ef777be9SPeter Holm#
8*ef777be9SPeter Holm
9*ef777be9SPeter Holm# Seen:
10*ef777be9SPeter Holm# UID  PID PPID  C PRI NI   VSZ  RSS MWCHAN   STAT TT     TIME COMMAND
11*ef777be9SPeter Holm#   0 3730 3668 11  20  0 13596 2904 exithold DE+   0  1:59.68 ./kcmp
12*ef777be9SPeter Holm
13*ef777be9SPeter Holm# Fixed by: 5b3e5c6ce3e5
14*ef777be9SPeter Holm
15*ef777be9SPeter Holm. ../default.cfg
16*ef777be9SPeter Holm
17*ef777be9SPeter Holmset -u
18*ef777be9SPeter Holmprog=$(basename "$0" .sh)
19*ef777be9SPeter Holmcat > /tmp/$prog.c <<EOF
20*ef777be9SPeter Holm#include <sys/types.h>
21*ef777be9SPeter Holm
22*ef777be9SPeter Holm#include <err.h>
23*ef777be9SPeter Holm#include <fcntl.h>
24*ef777be9SPeter Holm#include <pthread.h>
25*ef777be9SPeter Holm#include <signal.h>
26*ef777be9SPeter Holm#include <stdlib.h>
27*ef777be9SPeter Holm#include <time.h>
28*ef777be9SPeter Holm#include <unistd.h>
29*ef777be9SPeter Holm
30*ef777be9SPeter Holmstatic void *
31*ef777be9SPeter Holmt1(void *data __unused)
32*ef777be9SPeter Holm{
33*ef777be9SPeter Holm	for (;;)
34*ef777be9SPeter Holm		pause();
35*ef777be9SPeter Holm
36*ef777be9SPeter Holm	return (NULL);
37*ef777be9SPeter Holm}
38*ef777be9SPeter Holm
39*ef777be9SPeter Holmint
40*ef777be9SPeter Holmmain(void)
41*ef777be9SPeter Holm{
42*ef777be9SPeter Holm	pid_t p1, p2;
43*ef777be9SPeter Holm	pthread_t tid[2];
44*ef777be9SPeter Holm	time_t start;
45*ef777be9SPeter Holm	uintptr_t idx1, idx2;
46*ef777be9SPeter Holm	int r;
47*ef777be9SPeter Holm
48*ef777be9SPeter Holm	if ((r = pthread_create(&tid[0], NULL, t1, NULL)) != 0)
49*ef777be9SPeter Holm		errc(1, r, "pthread_create");
50*ef777be9SPeter Holm	if ((r = pthread_create(&tid[1], NULL, t1, NULL)) != 0)
51*ef777be9SPeter Holm		errc(1, r, "pthread_create");
52*ef777be9SPeter Holm
53*ef777be9SPeter Holm	start = time(NULL);
54*ef777be9SPeter Holm	while (time(NULL) - start < 60) {
55*ef777be9SPeter Holm		idx1 = idx2 = 0;
56*ef777be9SPeter Holm		p1 = arc4random() % 1000000;
57*ef777be9SPeter Holm		p2 = arc4random() % 1000000;
58*ef777be9SPeter Holm		kcmp(p1, p2, KCMP_VM, idx1, idx2);
59*ef777be9SPeter Holm	}
60*ef777be9SPeter Holm}
61*ef777be9SPeter HolmEOF
62*ef777be9SPeter Holmmycc -o /tmp/$prog -Wall -Wextra -O0 /tmp/$prog.c -lpthread || exit 1
63*ef777be9SPeter Holm
64*ef777be9SPeter Holm/tmp/$prog
65*ef777be9SPeter Holm
66*ef777be9SPeter Holmrm /tmp/$prog.c /tmp/$prog
67*ef777be9SPeter Holmexit 0
68