xref: /aosp_15_r20/external/strace/mpers_test.sh (revision cf84ac9a129d8ea9952db616b4e9b904c4bdde56)
1*cf84ac9aSAndroid Build Coastguard Worker#!/bin/sh -efu
2*cf84ac9aSAndroid Build Coastguard Worker#
3*cf84ac9aSAndroid Build Coastguard Worker# Copyright (c) 2015 Elvira Khabirova <[email protected]>
4*cf84ac9aSAndroid Build Coastguard Worker# Copyright (c) 2015 Dmitry V. Levin <[email protected]>
5*cf84ac9aSAndroid Build Coastguard Worker# Copyright (c) 2015-2018 The strace developers.
6*cf84ac9aSAndroid Build Coastguard Worker# All rights reserved.
7*cf84ac9aSAndroid Build Coastguard Worker#
8*cf84ac9aSAndroid Build Coastguard Worker# Redistribution and use in source and binary forms, with or without
9*cf84ac9aSAndroid Build Coastguard Worker# modification, are permitted provided that the following conditions
10*cf84ac9aSAndroid Build Coastguard Worker# are met:
11*cf84ac9aSAndroid Build Coastguard Worker# 1. Redistributions of source code must retain the above copyright
12*cf84ac9aSAndroid Build Coastguard Worker#    notice, this list of conditions and the following disclaimer.
13*cf84ac9aSAndroid Build Coastguard Worker# 2. Redistributions in binary form must reproduce the above copyright
14*cf84ac9aSAndroid Build Coastguard Worker#    notice, this list of conditions and the following disclaimer in the
15*cf84ac9aSAndroid Build Coastguard Worker#    documentation and/or other materials provided with the distribution.
16*cf84ac9aSAndroid Build Coastguard Worker# 3. The name of the author may not be used to endorse or promote products
17*cf84ac9aSAndroid Build Coastguard Worker#    derived from this software without specific prior written permission.
18*cf84ac9aSAndroid Build Coastguard Worker#
19*cf84ac9aSAndroid Build Coastguard Worker# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
20*cf84ac9aSAndroid Build Coastguard Worker# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
21*cf84ac9aSAndroid Build Coastguard Worker# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
22*cf84ac9aSAndroid Build Coastguard Worker# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
23*cf84ac9aSAndroid Build Coastguard Worker# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
24*cf84ac9aSAndroid Build Coastguard Worker# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25*cf84ac9aSAndroid Build Coastguard Worker# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26*cf84ac9aSAndroid Build Coastguard Worker# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27*cf84ac9aSAndroid Build Coastguard Worker# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
28*cf84ac9aSAndroid Build Coastguard Worker# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29*cf84ac9aSAndroid Build Coastguard Worker
30*cf84ac9aSAndroid Build Coastguard Workermpers_name="$1"; shift
31*cf84ac9aSAndroid Build Coastguard Workermpers_cc_flags="$1"; shift
32*cf84ac9aSAndroid Build Coastguard Workersize="$(printf %s "$mpers_name" |tr -cd '[0-9]')"
33*cf84ac9aSAndroid Build Coastguard Worker[ "$size" -gt 0 ]
34*cf84ac9aSAndroid Build Coastguard Worker
35*cf84ac9aSAndroid Build Coastguard Workersrcdir=${0%/*}
36*cf84ac9aSAndroid Build Coastguard Workermpers_sh="${srcdir}/mpers.sh"
37*cf84ac9aSAndroid Build Coastguard Worker
38*cf84ac9aSAndroid Build Coastguard Workermpers_dir="mpers-$mpers_name"
39*cf84ac9aSAndroid Build Coastguard Workermkdir -p "$mpers_dir"
40*cf84ac9aSAndroid Build Coastguard Worker
41*cf84ac9aSAndroid Build Coastguard Workersample="$mpers_dir/sample.c"
42*cf84ac9aSAndroid Build Coastguard Workercat > "$sample" <<EOF
43*cf84ac9aSAndroid Build Coastguard Worker#include "mpers_type.h"
44*cf84ac9aSAndroid Build Coastguard Worker#include DEF_MPERS_TYPE(sample_struct)
45*cf84ac9aSAndroid Build Coastguard Workertypedef struct {
46*cf84ac9aSAndroid Build Coastguard Worker	struct {
47*cf84ac9aSAndroid Build Coastguard Worker		void *p;
48*cf84ac9aSAndroid Build Coastguard Worker		char sc;
49*cf84ac9aSAndroid Build Coastguard Worker		/* unsigned char mpers_filler_1[1]; */
50*cf84ac9aSAndroid Build Coastguard Worker		short ss;
51*cf84ac9aSAndroid Build Coastguard Worker		unsigned char uc;
52*cf84ac9aSAndroid Build Coastguard Worker		/* unsigned char mpers_filler_2[3]; */
53*cf84ac9aSAndroid Build Coastguard Worker		int si;
54*cf84ac9aSAndroid Build Coastguard Worker		unsigned ui;
55*cf84ac9aSAndroid Build Coastguard Worker		long sl;
56*cf84ac9aSAndroid Build Coastguard Worker		unsigned short us;
57*cf84ac9aSAndroid Build Coastguard Worker		/* unsigned char mpers_filler_3[6]; */
58*cf84ac9aSAndroid Build Coastguard Worker		long long sll __attribute__((__aligned__(8)));
59*cf84ac9aSAndroid Build Coastguard Worker		unsigned long long ull;
60*cf84ac9aSAndroid Build Coastguard Worker		unsigned long ul;
61*cf84ac9aSAndroid Build Coastguard Worker		long asl[3][5][7];
62*cf84ac9aSAndroid Build Coastguard Worker		char f;
63*cf84ac9aSAndroid Build Coastguard Worker		/* unsigned char mpers_end_filler_4[7]; */
64*cf84ac9aSAndroid Build Coastguard Worker	} s;
65*cf84ac9aSAndroid Build Coastguard Worker	union {
66*cf84ac9aSAndroid Build Coastguard Worker		long long sll;
67*cf84ac9aSAndroid Build Coastguard Worker		unsigned long long ull;
68*cf84ac9aSAndroid Build Coastguard Worker		void *p;
69*cf84ac9aSAndroid Build Coastguard Worker		long sl;
70*cf84ac9aSAndroid Build Coastguard Worker		unsigned long ul;
71*cf84ac9aSAndroid Build Coastguard Worker		int si;
72*cf84ac9aSAndroid Build Coastguard Worker		unsigned ui;
73*cf84ac9aSAndroid Build Coastguard Worker		short ss[7][9];
74*cf84ac9aSAndroid Build Coastguard Worker		unsigned short us[4];
75*cf84ac9aSAndroid Build Coastguard Worker		char sc;
76*cf84ac9aSAndroid Build Coastguard Worker		unsigned char uc;
77*cf84ac9aSAndroid Build Coastguard Worker	} u[3][2];
78*cf84ac9aSAndroid Build Coastguard Worker	short f[0];
79*cf84ac9aSAndroid Build Coastguard Worker} sample_struct;
80*cf84ac9aSAndroid Build Coastguard Worker#include MPERS_DEFS
81*cf84ac9aSAndroid Build Coastguard WorkerEOF
82*cf84ac9aSAndroid Build Coastguard Worker
83*cf84ac9aSAndroid Build Coastguard Workerexpected="$mpers_dir/sample.expected"
84*cf84ac9aSAndroid Build Coastguard Workermpers_ptr_t="uint${size}_t"
85*cf84ac9aSAndroid Build Coastguard Workercat > "$expected" <<EOF
86*cf84ac9aSAndroid Build Coastguard Worker#include <stdint.h>
87*cf84ac9aSAndroid Build Coastguard Worker#ifndef mpers_ptr_t_is_${mpers_ptr_t}
88*cf84ac9aSAndroid Build Coastguard Workertypedef ${mpers_ptr_t} mpers_ptr_t;
89*cf84ac9aSAndroid Build Coastguard Worker#define mpers_ptr_t_is_${mpers_ptr_t}
90*cf84ac9aSAndroid Build Coastguard Worker#endif
91*cf84ac9aSAndroid Build Coastguard Workertypedef
92*cf84ac9aSAndroid Build Coastguard Workerstruct {
93*cf84ac9aSAndroid Build Coastguard Workerstruct {
94*cf84ac9aSAndroid Build Coastguard Workermpers_ptr_t p;
95*cf84ac9aSAndroid Build Coastguard Workerchar sc;
96*cf84ac9aSAndroid Build Coastguard Workerunsigned char mpers_filler_1[1];
97*cf84ac9aSAndroid Build Coastguard Workerint16_t ss;
98*cf84ac9aSAndroid Build Coastguard Workerunsigned char uc;
99*cf84ac9aSAndroid Build Coastguard Workerunsigned char mpers_filler_2[3];
100*cf84ac9aSAndroid Build Coastguard Workerint32_t si;
101*cf84ac9aSAndroid Build Coastguard Workeruint32_t ui;
102*cf84ac9aSAndroid Build Coastguard Workerint${size}_t sl;
103*cf84ac9aSAndroid Build Coastguard Workeruint16_t us;
104*cf84ac9aSAndroid Build Coastguard Workerunsigned char mpers_filler_3[6];
105*cf84ac9aSAndroid Build Coastguard Workerint64_t sll;
106*cf84ac9aSAndroid Build Coastguard Workeruint64_t ull;
107*cf84ac9aSAndroid Build Coastguard Workeruint${size}_t ul;
108*cf84ac9aSAndroid Build Coastguard Workerint${size}_t asl[3][5][7];
109*cf84ac9aSAndroid Build Coastguard Workerchar f;
110*cf84ac9aSAndroid Build Coastguard Workerunsigned char mpers_end_filler_4[7];
111*cf84ac9aSAndroid Build Coastguard Worker} ATTRIBUTE_PACKED s;
112*cf84ac9aSAndroid Build Coastguard Workerunion {
113*cf84ac9aSAndroid Build Coastguard Workerint64_t sll;
114*cf84ac9aSAndroid Build Coastguard Workeruint64_t ull;
115*cf84ac9aSAndroid Build Coastguard Workermpers_ptr_t p;
116*cf84ac9aSAndroid Build Coastguard Workerint${size}_t sl;
117*cf84ac9aSAndroid Build Coastguard Workeruint${size}_t ul;
118*cf84ac9aSAndroid Build Coastguard Workerint32_t si;
119*cf84ac9aSAndroid Build Coastguard Workeruint32_t ui;
120*cf84ac9aSAndroid Build Coastguard Workerint16_t ss[7][9];
121*cf84ac9aSAndroid Build Coastguard Workeruint16_t us[4];
122*cf84ac9aSAndroid Build Coastguard Workerchar sc;
123*cf84ac9aSAndroid Build Coastguard Workerunsigned char uc;
124*cf84ac9aSAndroid Build Coastguard Worker} u[3][2];
125*cf84ac9aSAndroid Build Coastguard Workerint16_t f[0];
126*cf84ac9aSAndroid Build Coastguard Worker} ATTRIBUTE_PACKED ${mpers_name}_sample_struct;
127*cf84ac9aSAndroid Build Coastguard Worker#define MPERS_${mpers_name}_sample_struct ${mpers_name}_sample_struct
128*cf84ac9aSAndroid Build Coastguard WorkerEOF
129*cf84ac9aSAndroid Build Coastguard Worker
130*cf84ac9aSAndroid Build Coastguard WorkerCFLAGS="$CPPFLAGS -I${srcdir} -DMPERS_IS_${mpers_name}" \
131*cf84ac9aSAndroid Build Coastguard WorkerCPPFLAGS="$CPPFLAGS -I${srcdir} -DIN_MPERS -DMPERS_IS_${mpers_name}" \
132*cf84ac9aSAndroid Build Coastguard Worker"$mpers_sh" "$mpers_name" "$mpers_cc_flags" "$sample"
133*cf84ac9aSAndroid Build Coastguard Workercmp "$expected" "$mpers_dir"/sample_struct.h > /dev/null
134