#!/bin/sh -efu # # Copyright (c) 2015 Elvira Khabirova # Copyright (c) 2015 Dmitry V. Levin # Copyright (c) 2015-2019 The strace developers. # All rights reserved. # # SPDX-License-Identifier: LGPL-2.1-or-later [ "x${D:-0}" != x1 ] || set -x mpers_name="$1"; shift mpers_cc_flags="$1"; shift size="$(printf %s "$mpers_name" |tr -cd '[0-9]')" [ "$size" -gt 0 ] srcdir=${0%/*} mpers_sh="${srcdir}/mpers.sh" mpers_dir="mpers-$mpers_name" mkdir -p "$mpers_dir" sample="$mpers_dir/sample.c" cat > "$sample" < "$expected" < #ifndef mpers_ptr_t_is_${mpers_ptr_t} typedef ${mpers_ptr_t} mpers_ptr_t; #define mpers_ptr_t_is_${mpers_ptr_t} #endif typedef struct { struct { mpers_ptr_t p; char sc; unsigned char mpers_filler_1[1]; int16_t ss; unsigned char uc; unsigned char mpers_filler_2[3]; int32_t si; uint32_t ui; int${size}_t sl; uint16_t us; unsigned char mpers_filler_3[6]; int64_t sll; uint64_t ull; uint${size}_t ul; int${size}_t asl[3][5][7]; char f; unsigned char mpers_end_filler_4[7]; } ATTRIBUTE_PACKED s; union { int64_t sll; uint64_t ull; mpers_ptr_t p; int${size}_t sl; uint${size}_t ul; int32_t si; uint32_t ui; int16_t ss[7][9]; uint16_t us[4]; char sc; unsigned char uc; } u[3][2]; int16_t f[0]; } ATTRIBUTE_PACKED ${mpers_name}_sample_struct; #define MPERS_${mpers_name}_sample_struct ${mpers_name}_sample_struct EOF CFLAGS="$CPPFLAGS -I${srcdir} -DMPERS_IS_${mpers_name}" \ CPPFLAGS="$CPPFLAGS -I${srcdir} -DIN_MPERS -DMPERS_IS_${mpers_name}" \ "$mpers_sh" "$mpers_name" "$mpers_cc_flags" "$sample" cmp "$expected" "$mpers_dir"/sample_struct.h > /dev/null