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