1#!/bin/gawk
2#
3# Copyright (c) 2014-2015 Dmitry V. Levin <ldv@altlinux.org>
4# Copyright (c) 2016 Elvira Khabirova <lineprinter0@gmail.com>
5# Copyright (c) 2016-2017 The strace developers.
6# All rights reserved.
7#
8# Redistribution and use in source and binary forms, with or without
9# modification, are permitted provided that the following conditions
10# are met:
11# 1. Redistributions of source code must retain the above copyright
12#    notice, this list of conditions and the following disclaimer.
13# 2. Redistributions in binary form must reproduce the above copyright
14#    notice, this list of conditions and the following disclaimer in the
15#    documentation and/or other materials provided with the distribution.
16# 3. The name of the author may not be used to endorse or promote products
17#    derived from this software without specific prior written permission.
18#
19# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
20# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
21# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
22# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
23# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
24# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
28# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29
30BEGIN {
31	n1[1][1] = n2[1][1] = "SIG_IGN"
32	n1[1][2] = n2[1][2] = "\\[HUP INT\\]"
33	n1[1][3] = "SA_RESTORER\\|SA_RESTART"
34	n2[1][3] = "SA_RESTART"
35	n1[1][4] = ", sa_restorer=0x[0-9a-f]+"
36	n2[1][4] = ""
37
38	n1[2][1] = n2[2][1] = "0x[0-9a-f]+"
39	n1[2][2] = n2[2][2] = "\\[QUIT TERM\\]"
40	n1[2][3] = "SA_RESTORER\\|SA_SIGINFO"
41	n2[2][3] = "SA_SIGINFO"
42	n1[2][4] = ", sa_restorer=0x[0-9a-f]+"
43	n2[2][4] = ""
44
45	n1[3][1] = n2[3][1] = "SIG_DFL"
46	n1[3][2] = n2[3][2] = "\\[\\]"
47	n1[3][3] = "SA_RESTORER"
48	n2[3][3] = "0"
49	n1[3][4] = ", sa_restorer=0x[0-9a-f]+"
50	n2[3][4] = ""
51
52	n1[4][1] = n2[4][1] = "SIG_DFL"
53	n1[4][2] = n2[4][2] = "~\\[HUP( ((RT|SIGRT)[^] ]+|[3-9][0-9]|1[0-9][0-9]))*\\]"
54	n1[4][3] = "SA_RESTORER"
55	n2[4][3] = "0"
56	n1[4][4] = ", sa_restorer=0x[0-9a-f]+"
57	n2[4][4] = ""
58
59	o1[1][1] = o2[1][1] = "SIG_DFL"
60	o1[1][2] = o2[1][2] = "\\[\\]"
61	o1[1][3] = o2[1][3] = "0"
62	o1[1][4] = o2[1][4] = ""
63
64	for (i = 2; i < 5; i++) {
65		for (j = 1; j < 5; j++) {
66			o1[i][j] = n1[i - 1][j]
67			o2[i][j] = n2[i - 1][j]
68		}
69	}
70
71	a1 = "(0x[0-9a-f]+, )?(4|8|16)"
72	a2 = "(4|8|16)(, 0x[0-9a-f]+)?"
73	a3 = "0x[0-9a-f]+, (4|8|16)"
74
75	for (i = 1; i < 5; i++) {
76		r[i] = "^rt_sigaction\\(SIGUSR2, (" \
77			"\\{sa_handler=" n1[i][1] ", sa_mask=" n1[i][2] \
78			", sa_flags=" n1[i][3] n1[i][4] "\\}, \\{sa_handler=" \
79			o1[i][1] ", sa_mask=" o1[i][2] ", sa_flags=" o1[i][3] \
80			o1[i][4] "\\}, " a1 "|" \
81			"\\{sa_handler=" n2[i][1] ", sa_mask=" n2[i][2] \
82			", sa_flags=" n2[i][3] n2[i][4] "\\}, \\{sa_handler=" \
83			o2[i][1] ", sa_mask=" o2[i][2] ", sa_flags=" o2[i][3] \
84			o2[i][4] "\\}, " a2 "|" \
85			"\\{sa_handler=" n2[i][1] ", sa_mask=" n2[i][2] \
86			", sa_flags=" n2[i][3] n2[i][4] "\\}, \\{sa_handler=" \
87			o2[i][1] ", sa_mask=" o2[i][2] ", sa_flags=" o2[i][3] \
88			o2[i][4] "\\}, " a3 ")\\) = 0$"
89	}
90	s[5] = "+++ exited with 0 +++"
91
92	lines = 5
93	fail = 0
94}
95
96@include "match.awk"
97