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