summaryrefslogtreecommitdiff
path: root/src/regress/lib/libc/atexit
diff options
context:
space:
mode:
Diffstat (limited to 'src/regress/lib/libc/atexit')
-rw-r--r--src/regress/lib/libc/atexit/Makefile16
-rw-r--r--src/regress/lib/libc/atexit/atexit_test.c140
-rw-r--r--src/regress/lib/libc/atexit/invalid.ok4
-rw-r--r--src/regress/lib/libc/atexit/valid.ok5
4 files changed, 0 insertions, 165 deletions
diff --git a/src/regress/lib/libc/atexit/Makefile b/src/regress/lib/libc/atexit/Makefile
deleted file mode 100644
index c14b3c7ac4..0000000000
--- a/src/regress/lib/libc/atexit/Makefile
+++ /dev/null
@@ -1,16 +0,0 @@
1# $OpenBSD: Makefile,v 1.5 2003/07/31 22:46:59 david Exp $
2
3NOMAN=
4PROG=atexit_test
5CPPFLAGS+=-I${.CURDIR}/../../../../lib/libc
6CLEANFILES+= invalid.out valid.out
7
8run-regress-atexit_test: ${PROG}
9 ./${PROG} -valid 2>${.OBJDIR}/valid.out
10 cmp -s ${.OBJDIR}/valid.out ${.CURDIR}/valid.ok
11 ./${PROG} -invalid-atexit 2>${.OBJDIR}/invalid.out
12 cmp -s ${.OBJDIR}/invalid.out ${.CURDIR}/invalid.ok
13 ./${PROG} -invalid-cleanup 2>${.OBJDIR}/invalid.out
14 cmp -s ${.OBJDIR}/invalid.out ${.CURDIR}/invalid.ok
15
16.include <bsd.regress.mk>
diff --git a/src/regress/lib/libc/atexit/atexit_test.c b/src/regress/lib/libc/atexit/atexit_test.c
deleted file mode 100644
index 3dd0b62c3e..0000000000
--- a/src/regress/lib/libc/atexit/atexit_test.c
+++ /dev/null
@@ -1,140 +0,0 @@
1/* $OpenBSD: atexit_test.c,v 1.6 2007/09/03 14:42:44 millert Exp $ */
2
3/*
4 * Copyright (c) 2002 Daniel Hartmeier
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
9 * are met:
10 *
11 * - Redistributions of source code must retain the above copyright
12 * notice, this list of conditions and the following disclaimer.
13 * - Redistributions in binary form must reproduce the above
14 * copyright notice, this list of conditions and the following
15 * disclaimer in the documentation and/or other materials provided
16 * with the distribution.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
21 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
22 * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
23 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
24 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
25 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
26 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
28 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29 * POSSIBILITY OF SUCH DAMAGE.
30 *
31 * Effort sponsored in part by the Defense Advanced Research Projects
32 * Agency (DARPA) and Air Force Research Laboratory, Air Force
33 * Materiel Command, USAF, under agreement number F30602-01-2-0537.
34 *
35 */
36
37#include <stdio.h>
38#include <stdlib.h>
39#include <string.h>
40#include <signal.h>
41#include "stdlib/atexit.h"
42
43void handle_first(void);
44void handle_middle(void);
45void handle_last(void);
46void handle_invalid(void);
47void handle_cleanup(void);
48void handle_signal(int);
49
50static int counter;
51
52int
53main(int argc, char *argv[])
54{
55 int i;
56
57 if (argc != 2 || (strcmp(argv[1], "-valid") &&
58 strcmp(argv[1], "-invalid-atexit") &&
59 strcmp(argv[1], "-invalid-cleanup"))) {
60 fprintf(stderr, "%s -valid/-invalid-atexit/-invalid-cleanup\n",
61 argv[0]);
62 return (1);
63 }
64 fprintf(stderr, "main()\n");
65 if (atexit(handle_last)) {
66 perror("atexit(handle_last) failed");
67 return (1);
68 }
69 for (i = 0; i < 65535; ++i) {
70 if (atexit(handle_middle)) {
71 perror("atexit(handle_middle) failed");
72 return (1);
73 }
74 }
75 if (atexit(handle_first)) {
76 perror("atexit(handle_first) failed");
77 return (1);
78 }
79 /* this is supposed to segfault */
80 if (!strcmp(argv[1], "-invalid-atexit")) {
81 signal(SIGSEGV, handle_signal);
82 __atexit->fns[0].fn_ptr.std_func = handle_invalid;
83 } else if (!strcmp(argv[1], "-invalid-cleanup")) {
84 struct atexit *p = __atexit;
85
86 signal(SIGSEGV, handle_signal);
87 while (p != NULL && p->next != NULL)
88 p = p->next;
89 if (p == NULL)
90 fprintf(stderr, "p == NULL, no page found\n");
91 p->fns[0].fn_ptr.std_func = handle_invalid;
92 }
93 __atexit_register_cleanup(handle_cleanup);
94 counter = 0;
95 fprintf(stderr, "main() returns\n");
96 return (0);
97}
98
99void
100handle_first(void)
101{
102 fprintf(stderr, "handle_first() counter == %i\n", counter);
103}
104
105void
106handle_middle(void)
107{
108 counter++;
109}
110
111void
112handle_last(void)
113{
114 fprintf(stderr, "handle_last() counter == %i\n", counter);
115}
116
117void
118handle_cleanup(void)
119{
120 fprintf(stderr, "handle_cleanup()\n");
121}
122
123void
124handle_invalid(void)
125{
126 fprintf(stderr, "handle_invalid() THIS SHOULD HAVE SEGFAULTED INSTEAD!\n");
127}
128
129void
130handle_signal(int sigraised)
131{
132 switch (sigraised) {
133 case SIGSEGV:
134 fprintf(stderr, "SIGSEGV\n");
135 exit(0);
136 default:
137 fprintf(stderr, "unexpected signal caught\n");
138 exit(1);
139 }
140}
diff --git a/src/regress/lib/libc/atexit/invalid.ok b/src/regress/lib/libc/atexit/invalid.ok
deleted file mode 100644
index 98cbf8c1de..0000000000
--- a/src/regress/lib/libc/atexit/invalid.ok
+++ /dev/null
@@ -1,4 +0,0 @@
1main()
2SIGSEGV
3handle_first() counter == 0
4handle_last() counter == 65535
diff --git a/src/regress/lib/libc/atexit/valid.ok b/src/regress/lib/libc/atexit/valid.ok
deleted file mode 100644
index 6509e827a7..0000000000
--- a/src/regress/lib/libc/atexit/valid.ok
+++ /dev/null
@@ -1,5 +0,0 @@
1main()
2main() returns
3handle_first() counter == 0
4handle_last() counter == 65535
5handle_cleanup()