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