xref: /aosp_15_r20/external/trace-cmd/features.mk (revision 58e6ee5f017f6a8912852c892d18457e4bafb554)
1*58e6ee5fSAndroid Build Coastguard Worker# SPDX-License-Identifier: GPL-2.0
2*58e6ee5fSAndroid Build Coastguard Worker
3*58e6ee5fSAndroid Build Coastguard Worker# taken from perf which was based on Linux Kbuild
4*58e6ee5fSAndroid Build Coastguard Worker# try-cc
5*58e6ee5fSAndroid Build Coastguard Worker# Usage: option = $(call try-cc, source-to-build, cc-options)
6*58e6ee5fSAndroid Build Coastguard Workertry-cc = $(shell sh -c							\
7*58e6ee5fSAndroid Build Coastguard Worker	'TMP="$(BUILD_OUTPUT)$(TMPOUT).$$$$";						\
8*58e6ee5fSAndroid Build Coastguard Worker	echo "$(1)" |							\
9*58e6ee5fSAndroid Build Coastguard Worker	$(CC) -x c - $(2) -o "$$TMP" > /dev/null 2>&1 && echo y;	\
10*58e6ee5fSAndroid Build Coastguard Worker	rm -f "$$TMP"')
11*58e6ee5fSAndroid Build Coastguard Worker
12*58e6ee5fSAndroid Build Coastguard Workerdefine SOURCE_PTRACE
13*58e6ee5fSAndroid Build Coastguard Worker#include <stdio.h>
14*58e6ee5fSAndroid Build Coastguard Worker#include <sys/ptrace.h>
15*58e6ee5fSAndroid Build Coastguard Worker
16*58e6ee5fSAndroid Build Coastguard Workerint main (void)
17*58e6ee5fSAndroid Build Coastguard Worker{
18*58e6ee5fSAndroid Build Coastguard Worker	int ret;
19*58e6ee5fSAndroid Build Coastguard Worker	ret = ptrace(PTRACE_ATTACH, 0, NULL, 0);
20*58e6ee5fSAndroid Build Coastguard Worker	ptrace(PTRACE_TRACEME, 0, NULL, 0);
21*58e6ee5fSAndroid Build Coastguard Worker	ptrace(PTRACE_GETSIGINFO, 0, NULL, NULL);
22*58e6ee5fSAndroid Build Coastguard Worker	ptrace(PTRACE_GETEVENTMSG, 0, NULL, NULL);
23*58e6ee5fSAndroid Build Coastguard Worker	ptrace(PTRACE_SETOPTIONS, NULL, NULL,
24*58e6ee5fSAndroid Build Coastguard Worker		       PTRACE_O_TRACEFORK |
25*58e6ee5fSAndroid Build Coastguard Worker		       PTRACE_O_TRACEVFORK |
26*58e6ee5fSAndroid Build Coastguard Worker		       PTRACE_O_TRACECLONE |
27*58e6ee5fSAndroid Build Coastguard Worker		       PTRACE_O_TRACEEXIT);
28*58e6ee5fSAndroid Build Coastguard Worker	ptrace(PTRACE_CONT, NULL, NULL, 0);
29*58e6ee5fSAndroid Build Coastguard Worker	ptrace(PTRACE_DETACH, 0, NULL, NULL);
30*58e6ee5fSAndroid Build Coastguard Worker	ptrace(PTRACE_SETOPTIONS, 0, NULL,
31*58e6ee5fSAndroid Build Coastguard Worker	       PTRACE_O_TRACEFORK |
32*58e6ee5fSAndroid Build Coastguard Worker	       PTRACE_O_TRACEVFORK |
33*58e6ee5fSAndroid Build Coastguard Worker	       PTRACE_O_TRACECLONE |
34*58e6ee5fSAndroid Build Coastguard Worker	       PTRACE_O_TRACEEXIT);
35*58e6ee5fSAndroid Build Coastguard Worker	return ret;
36*58e6ee5fSAndroid Build Coastguard Worker}
37*58e6ee5fSAndroid Build Coastguard Workerendef
38*58e6ee5fSAndroid Build Coastguard Worker
39*58e6ee5fSAndroid Build Coastguard Workerdefine SOURCE_AUDIT
40*58e6ee5fSAndroid Build Coastguard Worker#include <stdio.h>
41*58e6ee5fSAndroid Build Coastguard Worker#include <libaudit.h>
42*58e6ee5fSAndroid Build Coastguard Worker
43*58e6ee5fSAndroid Build Coastguard Workerint main (void)
44*58e6ee5fSAndroid Build Coastguard Worker{
45*58e6ee5fSAndroid Build Coastguard Worker	char *name;
46*58e6ee5fSAndroid Build Coastguard Worker	int ret;
47*58e6ee5fSAndroid Build Coastguard Worker	ret = audit_detect_machine();
48*58e6ee5fSAndroid Build Coastguard Worker	if (ret < 0)
49*58e6ee5fSAndroid Build Coastguard Worker		return ret;
50*58e6ee5fSAndroid Build Coastguard Worker	name = audit_syscall_to_name(1, ret);
51*58e6ee5fSAndroid Build Coastguard Worker	if (!name)
52*58e6ee5fSAndroid Build Coastguard Worker		return -1;
53*58e6ee5fSAndroid Build Coastguard Worker	return ret;
54*58e6ee5fSAndroid Build Coastguard Worker}
55*58e6ee5fSAndroid Build Coastguard Workerendef
56