xref: /aosp_15_r20/external/strace/m4/mpers.m4 (revision cf84ac9a129d8ea9952db616b4e9b904c4bdde56)
1*cf84ac9aSAndroid Build Coastguard Worker#!/usr/bin/m4
2*cf84ac9aSAndroid Build Coastguard Worker#
3*cf84ac9aSAndroid Build Coastguard Worker# Copyright (c) 2015-2017 Dmitry V. Levin <[email protected]>
4*cf84ac9aSAndroid Build Coastguard Worker# Copyright (c) 2015 Elvira Khabirova <[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 WorkerAC_DEFUN([st_MPERS_LOAD_AC_CV], [
31*cf84ac9aSAndroid Build Coastguard Worker
32*cf84ac9aSAndroid Build Coastguard Workerpushdef([var], [ac_cv_$1])
33*cf84ac9aSAndroid Build Coastguard Workerpushdef([saved], [saved_ac_cv_$1])
34*cf84ac9aSAndroid Build Coastguard Workerpushdef([mpers], [ac_cv_]mpers_name[_$1])
35*cf84ac9aSAndroid Build Coastguard Worker
36*cf84ac9aSAndroid Build Coastguard WorkerAS_IF([test -n "${var+set}"], [saved="${var}"; unset var])
37*cf84ac9aSAndroid Build Coastguard WorkerAS_IF([test -n "${mpers+set}"], [var="${mpers}"])
38*cf84ac9aSAndroid Build Coastguard Worker
39*cf84ac9aSAndroid Build Coastguard Workerpopdef([mpers])
40*cf84ac9aSAndroid Build Coastguard Workerpopdef([saved])
41*cf84ac9aSAndroid Build Coastguard Workerpopdef([var])
42*cf84ac9aSAndroid Build Coastguard Worker
43*cf84ac9aSAndroid Build Coastguard Worker])
44*cf84ac9aSAndroid Build Coastguard Worker
45*cf84ac9aSAndroid Build Coastguard WorkerAC_DEFUN([st_MPERS_SAVE_AC_CV], [
46*cf84ac9aSAndroid Build Coastguard Worker
47*cf84ac9aSAndroid Build Coastguard Workerpushdef([var], [ac_cv_$1])
48*cf84ac9aSAndroid Build Coastguard Workerpushdef([saved], [saved_ac_cv_$1])
49*cf84ac9aSAndroid Build Coastguard Workerpushdef([mpers], [ac_cv_]mpers_name[_$1])
50*cf84ac9aSAndroid Build Coastguard Worker
51*cf84ac9aSAndroid Build Coastguard WorkerAS_IF([test -n "${var+set}"], [mpers="${var}"])
52*cf84ac9aSAndroid Build Coastguard WorkerAS_IF([test -n "${saved+set}"], [var="${saved}"; unset saved])
53*cf84ac9aSAndroid Build Coastguard Worker
54*cf84ac9aSAndroid Build Coastguard Workerpopdef([mpers])
55*cf84ac9aSAndroid Build Coastguard Workerpopdef([saved])
56*cf84ac9aSAndroid Build Coastguard Workerpopdef([var])
57*cf84ac9aSAndroid Build Coastguard Worker
58*cf84ac9aSAndroid Build Coastguard Worker])
59*cf84ac9aSAndroid Build Coastguard Worker
60*cf84ac9aSAndroid Build Coastguard WorkerAC_DEFUN([st_MPERS_STRUCT_STAT], [
61*cf84ac9aSAndroid Build Coastguard Worker
62*cf84ac9aSAndroid Build Coastguard Workerst_MPERS_LOAD_AC_CV([type_struct_stat$1])
63*cf84ac9aSAndroid Build Coastguard WorkerAC_CHECK_TYPE([struct stat$1],
64*cf84ac9aSAndroid Build Coastguard Worker	      AC_DEFINE([HAVE_]MPERS_NAME[_STRUCT_STAT$1], [1],
65*cf84ac9aSAndroid Build Coastguard Worker			[Define to 1 if ]mpers_name[ has the type 'struct stat$1'.]),,
66*cf84ac9aSAndroid Build Coastguard Worker[#include <sys/types.h>
67*cf84ac9aSAndroid Build Coastguard Worker#include <asm/stat.h>])
68*cf84ac9aSAndroid Build Coastguard Workerst_MPERS_SAVE_AC_CV([type_struct_stat$1])
69*cf84ac9aSAndroid Build Coastguard Worker
70*cf84ac9aSAndroid Build Coastguard Workerst_MPERS_LOAD_AC_CV([member_struct_stat$1_st_mtime_nsec])
71*cf84ac9aSAndroid Build Coastguard WorkerAC_CHECK_MEMBER([struct stat$1.st_mtime_nsec],
72*cf84ac9aSAndroid Build Coastguard Worker		AC_DEFINE([HAVE_]MPERS_NAME[_STRUCT_STAT$1_ST_MTIME_NSEC], [1],
73*cf84ac9aSAndroid Build Coastguard Worker			  [Define to 1 if 'st_mtime_nsec' is a member of ]mpers_name[ 'struct stat$1'.]),,
74*cf84ac9aSAndroid Build Coastguard Worker[#include <sys/types.h>
75*cf84ac9aSAndroid Build Coastguard Worker#include <asm/stat.h>])
76*cf84ac9aSAndroid Build Coastguard Workerst_MPERS_SAVE_AC_CV([member_struct_stat$1_st_mtime_nsec])
77*cf84ac9aSAndroid Build Coastguard Worker
78*cf84ac9aSAndroid Build Coastguard Worker])
79*cf84ac9aSAndroid Build Coastguard Worker
80*cf84ac9aSAndroid Build Coastguard WorkerAC_DEFUN([st_MPERS],[
81*cf84ac9aSAndroid Build Coastguard Worker
82*cf84ac9aSAndroid Build Coastguard Workerpushdef([mpers_name], [$1])
83*cf84ac9aSAndroid Build Coastguard Workerpushdef([MPERS_NAME], translit([$1], [a-z], [A-Z]))
84*cf84ac9aSAndroid Build Coastguard Workerpushdef([HAVE_MPERS], [HAVE_]MPERS_NAME[_MPERS])
85*cf84ac9aSAndroid Build Coastguard Workerpushdef([HAVE_RUNTIME], [HAVE_]MPERS_NAME[_RUNTIME])
86*cf84ac9aSAndroid Build Coastguard Workerpushdef([MPERS_CFLAGS], [$cc_flags_$1])
87*cf84ac9aSAndroid Build Coastguard Workerpushdef([st_cv_cc], [st_cv_$1_cc])
88*cf84ac9aSAndroid Build Coastguard Workerpushdef([st_cv_runtime], [st_cv_$1_runtime])
89*cf84ac9aSAndroid Build Coastguard Workerpushdef([st_cv_mpers], [st_cv_$1_mpers])
90*cf84ac9aSAndroid Build Coastguard Worker
91*cf84ac9aSAndroid Build Coastguard Workercase "$arch" in
92*cf84ac9aSAndroid Build Coastguard Worker	[$2])
93*cf84ac9aSAndroid Build Coastguard Worker	case "$enable_mpers" in
94*cf84ac9aSAndroid Build Coastguard Worker	yes|check|[$1])
95*cf84ac9aSAndroid Build Coastguard Worker
96*cf84ac9aSAndroid Build Coastguard Worker	AH_TEMPLATE([HAVE_GNU_STUBS_32_H],
97*cf84ac9aSAndroid Build Coastguard Worker		    [Define to 1 if you have the <gnu/stubs-32.h> header file.])
98*cf84ac9aSAndroid Build Coastguard Worker	AH_TEMPLATE([HAVE_GNU_STUBS_X32_H],
99*cf84ac9aSAndroid Build Coastguard Worker		    [Define to 1 if you have the <gnu/stubs-x32.h> header file.])
100*cf84ac9aSAndroid Build Coastguard Worker	pushdef([gnu_stubs], [gnu/stubs-][m4_substr([$1], 1)][.h])
101*cf84ac9aSAndroid Build Coastguard Worker	AC_CHECK_HEADERS([gnu_stubs], [IFLAG=],
102*cf84ac9aSAndroid Build Coastguard Worker			 [mkdir -p gnu
103*cf84ac9aSAndroid Build Coastguard Worker			  : > gnu_stubs
104*cf84ac9aSAndroid Build Coastguard Worker			  AC_MSG_NOTICE([Created empty gnu_stubs])
105*cf84ac9aSAndroid Build Coastguard Worker			  IFLAG=-I.])
106*cf84ac9aSAndroid Build Coastguard Worker	popdef([gnu_stubs])
107*cf84ac9aSAndroid Build Coastguard Worker	saved_CFLAGS="$CFLAGS"
108*cf84ac9aSAndroid Build Coastguard Worker	CFLAGS="$CFLAGS MPERS_CFLAGS $IFLAG"
109*cf84ac9aSAndroid Build Coastguard Worker	AC_CACHE_CHECK([for mpers_name personality compile support], [st_cv_cc],
110*cf84ac9aSAndroid Build Coastguard Worker		[AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#include <stdint.h>
111*cf84ac9aSAndroid Build Coastguard Worker						     int main(){return 0;}]])],
112*cf84ac9aSAndroid Build Coastguard Worker				   [st_cv_cc=yes],
113*cf84ac9aSAndroid Build Coastguard Worker				   [st_cv_cc=no])])
114*cf84ac9aSAndroid Build Coastguard Worker	if test $st_cv_cc = yes; then
115*cf84ac9aSAndroid Build Coastguard Worker		AC_CACHE_CHECK([for mpers_name personality runtime support],
116*cf84ac9aSAndroid Build Coastguard Worker			[st_cv_runtime],
117*cf84ac9aSAndroid Build Coastguard Worker			[AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <stdint.h>
118*cf84ac9aSAndroid Build Coastguard Worker							 int main(){return 0;}]])],
119*cf84ac9aSAndroid Build Coastguard Worker				       [st_cv_runtime=yes],
120*cf84ac9aSAndroid Build Coastguard Worker				       [st_cv_runtime=no],
121*cf84ac9aSAndroid Build Coastguard Worker				       [st_cv_runtime=no])])
122*cf84ac9aSAndroid Build Coastguard Worker		AC_CACHE_CHECK([whether mpers.sh mpers_name MPERS_CFLAGS works],
123*cf84ac9aSAndroid Build Coastguard Worker			[st_cv_mpers],
124*cf84ac9aSAndroid Build Coastguard Worker			[if READELF="$READELF" \
125*cf84ac9aSAndroid Build Coastguard Worker			    CC="$CC" CPP="$CPP" CPPFLAGS="$CPPFLAGS $IFLAG" \
126*cf84ac9aSAndroid Build Coastguard Worker			    $srcdir/mpers_test.sh [$1] MPERS_CFLAGS; then
127*cf84ac9aSAndroid Build Coastguard Worker				st_cv_mpers=yes
128*cf84ac9aSAndroid Build Coastguard Worker			 else
129*cf84ac9aSAndroid Build Coastguard Worker				st_cv_mpers=no
130*cf84ac9aSAndroid Build Coastguard Worker			 fi])
131*cf84ac9aSAndroid Build Coastguard Worker		if test $st_cv_mpers = yes; then
132*cf84ac9aSAndroid Build Coastguard Worker			AC_DEFINE(HAVE_MPERS, [1],
133*cf84ac9aSAndroid Build Coastguard Worker				  [Define to 1 if you have mpers_name mpers support])
134*cf84ac9aSAndroid Build Coastguard Worker			st_MPERS_STRUCT_STAT([])
135*cf84ac9aSAndroid Build Coastguard Worker			st_MPERS_STRUCT_STAT([64])
136*cf84ac9aSAndroid Build Coastguard Worker
137*cf84ac9aSAndroid Build Coastguard Worker			if test $st_cv_runtime = yes; then
138*cf84ac9aSAndroid Build Coastguard Worker				pushdef([SIZEOF_LONG],
139*cf84ac9aSAndroid Build Coastguard Worker					MPERS_NAME[_SIZEOF_LONG])
140*cf84ac9aSAndroid Build Coastguard Worker				st_MPERS_LOAD_AC_CV([sizeof_long])
141*cf84ac9aSAndroid Build Coastguard Worker				AC_CHECK_SIZEOF([long])
142*cf84ac9aSAndroid Build Coastguard Worker				st_MPERS_SAVE_AC_CV([sizeof_long])
143*cf84ac9aSAndroid Build Coastguard Worker				popdef([SIZEOF_LONG])
144*cf84ac9aSAndroid Build Coastguard Worker
145*cf84ac9aSAndroid Build Coastguard Worker				pushdef([SIZEOF_KERNEL_LONG_T],
146*cf84ac9aSAndroid Build Coastguard Worker					MPERS_NAME[_SIZEOF_KERNEL_LONG_T])
147*cf84ac9aSAndroid Build Coastguard Worker				st_MPERS_LOAD_AC_CV([sizeof_kernel_long_t])
148*cf84ac9aSAndroid Build Coastguard Worker				AC_CHECK_SIZEOF([kernel_long_t],,
149*cf84ac9aSAndroid Build Coastguard Worker						[#include "$srcdir/kernel_types.h"])
150*cf84ac9aSAndroid Build Coastguard Worker				st_MPERS_SAVE_AC_CV([sizeof_kernel_long_t])
151*cf84ac9aSAndroid Build Coastguard Worker				popdef([SIZEOF_KERNEL_LONG_T])
152*cf84ac9aSAndroid Build Coastguard Worker			fi
153*cf84ac9aSAndroid Build Coastguard Worker		fi
154*cf84ac9aSAndroid Build Coastguard Worker	fi
155*cf84ac9aSAndroid Build Coastguard Worker	CFLAGS="$saved_CFLAGS"
156*cf84ac9aSAndroid Build Coastguard Worker	;;
157*cf84ac9aSAndroid Build Coastguard Worker
158*cf84ac9aSAndroid Build Coastguard Worker	*) # case "$enable_mpers"
159*cf84ac9aSAndroid Build Coastguard Worker	st_cv_runtime=no
160*cf84ac9aSAndroid Build Coastguard Worker	st_cv_mpers=no
161*cf84ac9aSAndroid Build Coastguard Worker	;;
162*cf84ac9aSAndroid Build Coastguard Worker	esac
163*cf84ac9aSAndroid Build Coastguard Worker
164*cf84ac9aSAndroid Build Coastguard Worker	test "$st_cv_mpers" = yes ||
165*cf84ac9aSAndroid Build Coastguard Worker		st_cv_mpers=no
166*cf84ac9aSAndroid Build Coastguard Worker	AC_MSG_CHECKING([whether to enable $1 personality support])
167*cf84ac9aSAndroid Build Coastguard Worker	AC_MSG_RESULT([$st_cv_mpers])
168*cf84ac9aSAndroid Build Coastguard Worker
169*cf84ac9aSAndroid Build Coastguard Worker	case "$enable_mpers,$st_cv_mpers" in
170*cf84ac9aSAndroid Build Coastguard Worker	yes,no|[$1],no)
171*cf84ac9aSAndroid Build Coastguard Worker		AC_MSG_ERROR([Cannot enable $1 personality support])
172*cf84ac9aSAndroid Build Coastguard Worker		;;
173*cf84ac9aSAndroid Build Coastguard Worker	esac
174*cf84ac9aSAndroid Build Coastguard Worker	;;
175*cf84ac9aSAndroid Build Coastguard Worker
176*cf84ac9aSAndroid Build Coastguard Worker	*) # case "$arch"
177*cf84ac9aSAndroid Build Coastguard Worker	st_cv_runtime=no
178*cf84ac9aSAndroid Build Coastguard Worker	st_cv_mpers=no
179*cf84ac9aSAndroid Build Coastguard Worker	;;
180*cf84ac9aSAndroid Build Coastguard Workeresac
181*cf84ac9aSAndroid Build Coastguard Worker
182*cf84ac9aSAndroid Build Coastguard WorkerAM_CONDITIONAL(HAVE_RUNTIME, [test "$st_cv_mpers$st_cv_runtime" = yesyes])
183*cf84ac9aSAndroid Build Coastguard WorkerAM_CONDITIONAL(HAVE_MPERS, [test "$st_cv_mpers" = yes])
184*cf84ac9aSAndroid Build Coastguard Worker
185*cf84ac9aSAndroid Build Coastguard Workerpopdef([st_cv_mpers])
186*cf84ac9aSAndroid Build Coastguard Workerpopdef([st_cv_runtime])
187*cf84ac9aSAndroid Build Coastguard Workerpopdef([st_cv_cc])
188*cf84ac9aSAndroid Build Coastguard Workerpopdef([MPERS_CFLAGS])
189*cf84ac9aSAndroid Build Coastguard Workerpopdef([HAVE_RUNTIME])
190*cf84ac9aSAndroid Build Coastguard Workerpopdef([HAVE_MPERS])
191*cf84ac9aSAndroid Build Coastguard Workerpopdef([MPERS_NAME])
192*cf84ac9aSAndroid Build Coastguard Workerpopdef([mpers_name])
193*cf84ac9aSAndroid Build Coastguard Worker
194*cf84ac9aSAndroid Build Coastguard Worker])
195