]> granicus.if.org Git - strace/blob - mpers_test.sh
tests: improve setugid error diagnostics a bit
[strace] / mpers_test.sh
1 #!/bin/sh -efu
2 #
3 # Copyright (c) 2015 Elvira Khabirova <lineprinter0@gmail.com>
4 # Copyright (c) 2015 Dmitry V. Levin <ldv@altlinux.org>
5 # Copyright (c) 2015-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
30 mpers_name="$1"; shift
31 mpers_cc_flags="$1"; shift
32 size="$(printf %s "$mpers_name" |tr -cd '[0-9]')"
33 [ "$size" -gt 0 ]
34
35 srcdir=${0%/*}
36 mpers_sh="${srcdir}/mpers.sh"
37
38 mpers_dir="mpers-$mpers_name"
39 mkdir -p "$mpers_dir"
40
41 sample="$mpers_dir/sample.c"
42 cat > "$sample" <<EOF
43 #include "mpers_type.h"
44 #include DEF_MPERS_TYPE(sample_struct)
45 typedef struct {
46         struct {
47                 void *p;
48                 char sc;
49                 /* unsigned char mpers_filler_1[1]; */
50                 short ss;
51                 unsigned char uc;
52                 /* unsigned char mpers_filler_2[3]; */
53                 int si;
54                 unsigned ui;
55                 long sl;
56                 unsigned short us;
57                 /* unsigned char mpers_filler_3[6]; */
58                 long long sll __attribute__((__aligned__(8)));
59                 unsigned long long ull;
60                 unsigned long ul;
61                 long asl[3][5][7];
62                 char f;
63                 /* unsigned char mpers_end_filler_4[7]; */
64         } s;
65         union {
66                 long long sll;
67                 unsigned long long ull;
68                 void *p;
69                 long sl;
70                 unsigned long ul;
71                 int si;
72                 unsigned ui;
73                 short ss[7][9];
74                 unsigned short us[4];
75                 char sc;
76                 unsigned char uc;
77         } u[3][2];
78         short f[0];
79 } sample_struct;
80 #include MPERS_DEFS
81 EOF
82
83 expected="$mpers_dir/sample.expected"
84 cat > "$expected" <<EOF
85 #include <inttypes.h>
86 typedef uint${size}_t mpers_ptr_t;
87 typedef
88 struct {
89 struct {
90 mpers_ptr_t p;
91 char sc;
92 unsigned char mpers_filler_1[1];
93 int16_t ss;
94 unsigned char uc;
95 unsigned char mpers_filler_2[3];
96 int32_t si;
97 uint32_t ui;
98 int${size}_t sl;
99 uint16_t us;
100 unsigned char mpers_filler_3[6];
101 int64_t sll;
102 uint64_t ull;
103 uint${size}_t ul;
104 int${size}_t asl[3][5][7];
105 char f;
106 unsigned char mpers_end_filler_4[7];
107 } ATTRIBUTE_PACKED s;
108 union {
109 int64_t sll;
110 uint64_t ull;
111 mpers_ptr_t p;
112 int${size}_t sl;
113 uint${size}_t ul;
114 int32_t si;
115 uint32_t ui;
116 int16_t ss[7][9];
117 uint16_t us[4];
118 char sc;
119 unsigned char uc;
120 } u[3][2];
121 int16_t f[0];
122 } ATTRIBUTE_PACKED ${mpers_name}_sample_struct;
123 #define MPERS_${mpers_name}_sample_struct ${mpers_name}_sample_struct
124 EOF
125
126 CFLAGS="$CPPFLAGS -I${srcdir} -DMPERS_IS_${mpers_name}" \
127 CPPFLAGS="$CPPFLAGS -I${srcdir} -DIN_MPERS -DMPERS_IS_${mpers_name}" \
128 "$mpers_sh" "$mpers_name" "$mpers_cc_flags" "$sample"
129 cmp "$expected" "$mpers_dir"/sample_struct.h > /dev/null