xref: /aosp_15_r20/external/libtraceevent/scripts/features.mk (revision 436bf2bcd5202612ffffe471bbcc1f277cc8d28e)
1*436bf2bcSAndroid Build Coastguard Worker# SPDX-License-Identifier: GPL-2.0
2*436bf2bcSAndroid Build Coastguard Worker
3*436bf2bcSAndroid Build Coastguard Worker# taken from perf which was based on Linux Kbuild
4*436bf2bcSAndroid Build Coastguard Worker# try-cc
5*436bf2bcSAndroid Build Coastguard Worker# Usage: option = $(call try-cc, source-to-build, cc-options)
6*436bf2bcSAndroid Build Coastguard Workertry-cc = $(shell sh -c							\
7*436bf2bcSAndroid Build Coastguard Worker	'TMP="$(BUILD_OUTPUT)$(TMPOUT).$$$$";						\
8*436bf2bcSAndroid Build Coastguard Worker	echo "$(1)" |							\
9*436bf2bcSAndroid Build Coastguard Worker	$(CC) -x c - $(2) -o "$$TMP" > /dev/null 2>&1 && echo y;	\
10*436bf2bcSAndroid Build Coastguard Worker	rm -f "$$TMP"')
11*436bf2bcSAndroid Build Coastguard Worker
12*436bf2bcSAndroid Build Coastguard Workerdefine SOURCE_PTRACE
13*436bf2bcSAndroid Build Coastguard Worker#include <stdio.h>
14*436bf2bcSAndroid Build Coastguard Worker#include <sys/ptrace.h>
15*436bf2bcSAndroid Build Coastguard Worker
16*436bf2bcSAndroid Build Coastguard Workerint main (void)
17*436bf2bcSAndroid Build Coastguard Worker{
18*436bf2bcSAndroid Build Coastguard Worker	int ret;
19*436bf2bcSAndroid Build Coastguard Worker	ret = ptrace(PTRACE_ATTACH, 0, NULL, 0);
20*436bf2bcSAndroid Build Coastguard Worker	ptrace(PTRACE_TRACEME, 0, NULL, 0);
21*436bf2bcSAndroid Build Coastguard Worker	ptrace(PTRACE_GETSIGINFO, 0, NULL, NULL);
22*436bf2bcSAndroid Build Coastguard Worker	ptrace(PTRACE_GETEVENTMSG, 0, NULL, NULL);
23*436bf2bcSAndroid Build Coastguard Worker	ptrace(PTRACE_SETOPTIONS, NULL, NULL,
24*436bf2bcSAndroid Build Coastguard Worker		       PTRACE_O_TRACEFORK |
25*436bf2bcSAndroid Build Coastguard Worker		       PTRACE_O_TRACEVFORK |
26*436bf2bcSAndroid Build Coastguard Worker		       PTRACE_O_TRACECLONE |
27*436bf2bcSAndroid Build Coastguard Worker		       PTRACE_O_TRACEEXIT);
28*436bf2bcSAndroid Build Coastguard Worker	ptrace(PTRACE_CONT, NULL, NULL, 0);
29*436bf2bcSAndroid Build Coastguard Worker	ptrace(PTRACE_DETACH, 0, NULL, NULL);
30*436bf2bcSAndroid Build Coastguard Worker	ptrace(PTRACE_SETOPTIONS, 0, NULL,
31*436bf2bcSAndroid Build Coastguard Worker	       PTRACE_O_TRACEFORK |
32*436bf2bcSAndroid Build Coastguard Worker	       PTRACE_O_TRACEVFORK |
33*436bf2bcSAndroid Build Coastguard Worker	       PTRACE_O_TRACECLONE |
34*436bf2bcSAndroid Build Coastguard Worker	       PTRACE_O_TRACEEXIT);
35*436bf2bcSAndroid Build Coastguard Worker	return ret;
36*436bf2bcSAndroid Build Coastguard Worker}
37*436bf2bcSAndroid Build Coastguard Workerendef
38