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