]> granicus.if.org Git - strace/blob - mpers_test.sh
tests/umount2.c: use libtests
[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 # 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 # 1. Redistributions of source code must retain the above copyright
11 #    notice, this list of conditions and the following disclaimer.
12 # 2. Redistributions in binary form must reproduce the above copyright
13 #    notice, this list of conditions and the following disclaimer in the
14 #    documentation and/or other materials provided with the distribution.
15 # 3. The name of the author may not be used to endorse or promote products
16 #    derived from this software without specific prior written permission.
17 #
18 # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
19 # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
20 # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
21 # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
22 # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
23 # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27 # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
29 mpers_name="$1"; shift
30 size="$(printf %s "$mpers_name" |tr -cd '[0-9]')"
31 [ "$size" -gt 0 ]
32
33 srcdir=${0%/*}
34 mpers_sh="${srcdir}/mpers.sh"
35
36 mpers_dir="mpers-$mpers_name"
37 mkdir -p "$mpers_dir"
38
39 sample="$mpers_dir/sample.c"
40 cat > "$sample" <<EOF
41 #include "mpers_type.h"
42 #include DEF_MPERS_TYPE(sample_struct)
43 typedef struct {
44         struct {
45                 void *p;
46                 char sc;
47                 /* unsigned char mpers_filler_1[1]; */
48                 short ss;
49                 unsigned char uc;
50                 /* unsigned char mpers_filler_2[3]; */
51                 int si;
52                 unsigned ui;
53                 long sl;
54                 unsigned short us;
55                 /* unsigned char mpers_filler_3[6]; */
56                 long long sll __attribute__((__aligned__(8)));
57                 unsigned long long ull;
58                 unsigned long ul;
59                 long asl[3];
60                 char f;
61                 /* unsigned char mpers_end_filler_4[7]; */
62         } s;
63         union {
64                 long long sll;
65                 unsigned long long ull;
66                 void *p;
67                 long sl;
68                 unsigned long ul;
69                 int si;
70                 unsigned ui;
71                 short ss;
72                 unsigned short us;
73                 char sc;
74                 unsigned char uc;
75         } u[3];
76         short f[0];
77 } sample_struct;
78 #include MPERS_DEFS
79 EOF
80
81 expected="$mpers_dir/sample.expected"
82 cat > "$expected" <<EOF
83 #include <inttypes.h>
84 typedef uint${size}_t mpers_ptr_t;
85 typedef
86 struct {
87 struct {
88 mpers_ptr_t p;
89 char sc;
90 unsigned char mpers_filler_1[1];
91 int16_t ss;
92 unsigned char uc;
93 unsigned char mpers_filler_2[3];
94 int32_t si;
95 uint32_t ui;
96 int${size}_t sl;
97 uint16_t us;
98 unsigned char mpers_filler_3[6];
99 int64_t sll;
100 uint64_t ull;
101 uint${size}_t ul;
102 int${size}_t asl[3];
103 char f;
104 unsigned char mpers_end_filler_4[7];
105 } ATTRIBUTE_PACKED s;
106 union {
107 int64_t sll;
108 uint64_t ull;
109 mpers_ptr_t p;
110 int${size}_t sl;
111 uint${size}_t ul;
112 int32_t si;
113 uint32_t ui;
114 int16_t ss;
115 uint16_t us;
116 char sc;
117 unsigned char uc;
118 } u[3];
119 int16_t f[0];
120 } ATTRIBUTE_PACKED ${mpers_name}_sample_struct;
121 #define MPERS_${mpers_name}_sample_struct ${mpers_name}_sample_struct
122 EOF
123
124 CFLAGS="$CPPFLAGS -I${srcdir}" \
125 CPPFLAGS="$CPPFLAGS -I${srcdir} -DIN_MPERS -DMPERS_IS_${mpers_name}" \
126 "$mpers_sh" "-$mpers_name" "$sample"
127 cmp "$expected" "$mpers_dir"/sample_struct.h > /dev/null