1*d7729643SMarc Zyngier# SPDX-License-Identifier: GPL-2.0 2b53dde9dSIngo Molnar 3b53dde9dSIngo Molnar# Do not instrument the tracer itself: 4b53dde9dSIngo Molnar 515d5761aSMasahiro Yamadaccflags-remove-$(CONFIG_FUNCTION_TRACER) += $(CC_FLAGS_FTRACE) 615d5761aSMasahiro Yamada 7606576ceSSteven Rostedtifdef CONFIG_FUNCTION_TRACER 8d05cdb25SSteven Rostedt 9f5d2313bSMarco Elver# Avoid recursion due to instrumentation. 10f5d2313bSMarco ElverKCSAN_SANITIZE := n 11f5d2313bSMarco Elver 1247239c4dSSteven Rostedtifdef CONFIG_FTRACE_SELFTEST 13d05cdb25SSteven Rostedt# selftest needs instrumentation 14c0a80c0cSHeiko CarstensCFLAGS_trace_selftest_dynamic.o = $(CC_FLAGS_FTRACE) 15d05cdb25SSteven Rostedtobj-y += trace_selftest_dynamic.o 16b53dde9dSIngo Molnarendif 1747239c4dSSteven Rostedtendif 18b53dde9dSIngo Molnar 19f93a7d0cSSteven Rostedt# Allow some files to be function traced 20f93a7d0cSSteven Rostedtifdef CONFIG_FUNCTION_SELF_TRACING 21f93a7d0cSSteven RostedtCFLAGS_trace_output.o = $(CC_FLAGS_FTRACE) 22f93a7d0cSSteven RostedtCFLAGS_trace_seq.o = $(CC_FLAGS_FTRACE) 23f93a7d0cSSteven RostedtCFLAGS_trace_stat.o = $(CC_FLAGS_FTRACE) 24f93a7d0cSSteven RostedtCFLAGS_tracing_map.o = $(CC_FLAGS_FTRACE) 25f93a7d0cSSteven RostedtCFLAGS_synth_event_gen_test.o = $(CC_FLAGS_FTRACE) 26f93a7d0cSSteven RostedtCFLAGS_trace_events.o = $(CC_FLAGS_FTRACE) 27f93a7d0cSSteven RostedtCFLAGS_trace_syscalls.o = $(CC_FLAGS_FTRACE) 28f93a7d0cSSteven RostedtCFLAGS_trace_events_filter.o = $(CC_FLAGS_FTRACE) 29f93a7d0cSSteven RostedtCFLAGS_trace_events_trigger.o = $(CC_FLAGS_FTRACE) 30f93a7d0cSSteven RostedtCFLAGS_trace_events_synth.o = $(CC_FLAGS_FTRACE) 31f93a7d0cSSteven RostedtCFLAGS_trace_events_hist.o = $(CC_FLAGS_FTRACE) 32f93a7d0cSSteven RostedtCFLAGS_trace_events_user.o = $(CC_FLAGS_FTRACE) 33f93a7d0cSSteven RostedtCFLAGS_trace_dynevent.o = $(CC_FLAGS_FTRACE) 34f93a7d0cSSteven Rostedtendif 35f93a7d0cSSteven Rostedt 36d899926fSFrancis Deslauriersifdef CONFIG_FTRACE_STARTUP_TEST 37d899926fSFrancis DeslauriersCFLAGS_trace_kprobe_selftest.o = $(CC_FLAGS_FTRACE) 38d899926fSFrancis Deslauriersobj-$(CONFIG_KPROBE_EVENTS) += trace_kprobe_selftest.o 39d899926fSFrancis Deslauriersendif 40d899926fSFrancis Deslauriers 4152f232cbSSteven Rostedt# If unlikely tracing is enabled, do not trace these files 422ed84eebSSteven Rostedtifdef CONFIG_TRACING_BRANCHES 432ed84eebSSteven RostedtKBUILD_CFLAGS += -DDISABLE_BRANCH_PROFILING 4452f232cbSSteven Rostedtendif 4552f232cbSSteven Rostedt 466b7dca40SMasami Hiramatsu# for GCOV coverage profiling 476b7dca40SMasami Hiramatsuifdef CONFIG_GCOV_PROFILE_FTRACE 486b7dca40SMasami HiramatsuGCOV_PROFILE := y 496b7dca40SMasami Hiramatsuendif 506b7dca40SMasami Hiramatsu 51bb5eb8f3SCongyu Liu# Functions in this file could be invoked from early interrupt 52bb5eb8f3SCongyu Liu# code and produce random code coverage. 53bb5eb8f3SCongyu LiuKCOV_INSTRUMENT_trace_preemptirq.o := n 54bb5eb8f3SCongyu Liu 55ac5a72eaSAlan MaguireCFLAGS_bpf_trace.o := -I$(src) 56ac5a72eaSAlan Maguire 5781dc9f0eSSteven Rostedt (Red Hat)CFLAGS_trace_benchmark.o := -I$(src) 581d0e78e3SJiri OlsaCFLAGS_trace_events_filter.o := -I$(src) 591d0e78e3SJiri Olsa 60ea632e9fSJosh Triplettobj-$(CONFIG_TRACE_CLOCK) += trace_clock.o 6156449f43SIngo Molnar 62606576ceSSteven Rostedtobj-$(CONFIG_FUNCTION_TRACER) += libftrace.o 637a8e76a3SSteven Rostedtobj-$(CONFIG_RING_BUFFER) += ring_buffer.o 645092dbc9SSteven Rostedtobj-$(CONFIG_RING_BUFFER_BENCHMARK) += ring_buffer_benchmark.o 6516444a8aSArnaldo Carvalho de Melo 66bc0c38d1SSteven Rostedtobj-$(CONFIG_TRACING) += trace.o 67f0868d1eSSteven Rostedtobj-$(CONFIG_TRACING) += trace_output.o 6812306276SSteven Rostedt (Red Hat)obj-$(CONFIG_TRACING) += trace_seq.o 69dbd0b4b3SFrederic Weisbeckerobj-$(CONFIG_TRACING) += trace_stat.o 70769b0441SFrederic Weisbeckerobj-$(CONFIG_TRACING) += trace_printk.o 7198021e37SSteven Rostedtobj-$(CONFIG_TRACING) += trace_pid.o 726954e415SSteven Rostedt (VMware)obj-$(CONFIG_TRACING) += pid_list.o 7308d43a5fSTom Zanussiobj-$(CONFIG_TRACING_MAP) += tracing_map.o 74f96e8577SJoel Fernandes (Google)obj-$(CONFIG_PREEMPTIRQ_DELAY_TEST) += preemptirq_delay_test.o 759fe41efaSTom Zanussiobj-$(CONFIG_SYNTH_EVENT_GEN_TEST) += synth_event_gen_test.o 7664836248STom Zanussiobj-$(CONFIG_KPROBE_EVENT_GEN_TEST) += kprobe_event_gen_test.o 7735e8e302SSteven Rostedtobj-$(CONFIG_CONTEXT_SWITCH_TRACER) += trace_sched_switch.o 78606576ceSSteven Rostedtobj-$(CONFIG_FUNCTION_TRACER) += trace_functions.o 79c3bc8fd6SJoel Fernandes (Google)obj-$(CONFIG_PREEMPTIRQ_TRACEPOINTS) += trace_preemptirq.o 8081d68a96SSteven Rostedtobj-$(CONFIG_IRQSOFF_TRACER) += trace_irqsoff.o 816cd8a4bbSSteven Rostedtobj-$(CONFIG_PREEMPT_TRACER) += trace_irqsoff.o 82352ad25aSSteven Rostedtobj-$(CONFIG_SCHED_TRACER) += trace_sched_wakeup.o 83e7c15cd8SSteven Rostedt (Red Hat)obj-$(CONFIG_HWLAT_TRACER) += trace_hwlat.o 84bce29ac9SDaniel Bristot de Oliveiraobj-$(CONFIG_OSNOISE_TRACER) += trace_osnoise.o 85fb1b6d8bSSteven Noonanobj-$(CONFIG_NOP_TRACER) += trace_nop.o 86e5a81b62SSteven Rostedtobj-$(CONFIG_STACK_TRACER) += trace_stack.o 87f984b51eSPekka Paalanenobj-$(CONFIG_MMIOTRACE) += trace_mmiotrace.o 88fb52607aSFrederic Weisbeckerobj-$(CONFIG_FUNCTION_GRAPH_TRACER) += trace_functions_graph.o 8994b80ffdSSteven Rostedtobj-$(CONFIG_TRACE_BRANCH_PROFILING) += trace_branch.o 902db270a8SFrederic Weisbeckerobj-$(CONFIG_BLK_DEV_IO_TRACE) += blktrace.o 91d864a3caSSteven Rostedt (VMware)obj-$(CONFIG_FUNCTION_GRAPH_TRACER) += fgraph.o 9255782138SLi Zefanifeq ($(CONFIG_BLOCK),y) 9355782138SLi Zefanobj-$(CONFIG_EVENT_TRACING) += blktrace.o 9455782138SLi Zefanendif 955f77a88bSTom Zanussiobj-$(CONFIG_EVENT_TRACING) += trace_events.o 965f77a88bSTom Zanussiobj-$(CONFIG_EVENT_TRACING) += trace_export.o 97ee08c6ecSFrederic Weisbeckerobj-$(CONFIG_FTRACE_SYSCALLS) += trace_syscalls.o 9807b139c8SLi Zefanifeq ($(CONFIG_PERF_EVENTS),y) 9997d5a220SFrederic Weisbeckerobj-$(CONFIG_EVENT_TRACING) += trace_event_perf.o 10007b139c8SLi Zefanendif 1015f77a88bSTom Zanussiobj-$(CONFIG_EVENT_TRACING) += trace_events_filter.o 10285f2b082STom Zanussiobj-$(CONFIG_EVENT_TRACING) += trace_events_trigger.o 1030dd1274aSSteven Rostedtobj-$(CONFIG_EPROBE_EVENTS) += trace_eprobe.o 1046c3edaf9SCong Wangobj-$(CONFIG_TRACE_EVENT_INJECT) += trace_events_inject.o 105726721a5STom Zanussiobj-$(CONFIG_SYNTH_EVENTS) += trace_events_synth.o 1067ef224d1STom Zanussiobj-$(CONFIG_HIST_TRIGGERS) += trace_events_hist.o 1077f5a08c7SBeau Belgraveobj-$(CONFIG_USER_EVENTS) += trace_events_user.o 108e1abf2ccSIngo Molnarobj-$(CONFIG_BPF_EVENTS) += bpf_trace.o 1096b0b7551SAnton Blanchardobj-$(CONFIG_KPROBE_EVENTS) += trace_kprobe.o 1109c0dee54SAlexander Potapenkoobj-$(CONFIG_TRACEPOINTS) += error_report-traces.o 111870915e0SMathieu Desnoyersobj-$(CONFIG_TRACEPOINTS) += power-traces.o 112798bc6d8SRafael J. Wysockiifeq ($(CONFIG_PM),y) 11353b615ccSMing Leiobj-$(CONFIG_TRACEPOINTS) += rpm-traces.o 1142a5306ccSMing Leiendif 115955b61e5SJason Wesselifeq ($(CONFIG_TRACING),y) 116955b61e5SJason Wesselobj-$(CONFIG_KGDB_KDB) += trace_kdb.o 117955b61e5SJason Wesselendif 1185448d44cSMasami Hiramatsuobj-$(CONFIG_DYNAMIC_EVENTS) += trace_dynevent.o 1198ab83f56SSrikar Dronamrajuobj-$(CONFIG_PROBE_EVENTS) += trace_probe.o 120ebeed8d4SMasami Hiramatsu (Google)obj-$(CONFIG_PROBE_EVENTS_BTF_ARGS) += trace_btf.o 1216b0b7551SAnton Blanchardobj-$(CONFIG_UPROBE_EVENTS) += trace_uprobe.o 1229c5b9d3dSMasami Hiramatsuobj-$(CONFIG_BOOTTIME_TRACING) += trace_boot.o 123773c1670SSteven Rostedt (VMware)obj-$(CONFIG_FTRACE_RECORD_RECURSION) += trace_recursion_record.o 124cad9931fSMasami Hiramatsuobj-$(CONFIG_FPROBE) += fprobe.o 12554ecbe6fSMasami Hiramatsuobj-$(CONFIG_RETHOOK) += rethook.o 126334e5519SMasami Hiramatsu (Google)obj-$(CONFIG_FPROBE_EVENTS) += trace_fprobe.o 127bc0c38d1SSteven Rostedt 12881dc9f0eSSteven Rostedt (Red Hat)obj-$(CONFIG_TRACEPOINT_BENCHMARK) += trace_benchmark.o 129102227b9SDaniel Bristot de Oliveiraobj-$(CONFIG_RV) += rv/ 13081dc9f0eSSteven Rostedt (Red Hat) 13196e43537SVincent Donnefortobj-$(CONFIG_TRACE_REMOTE) += trace_remote.o 13234e5b958SVincent Donnefortobj-$(CONFIG_SIMPLE_RING_BUFFER) += simple_ring_buffer.o 133ea908a2bSVincent Donnefortobj-$(CONFIG_TRACE_REMOTE_TEST) += remote_test.o 134ea908a2bSVincent Donnefort 135a717943dSVincent Donnefort# 136a717943dSVincent Donnefort# simple_ring_buffer is used by the pKVM hypervisor which does not have access 137a717943dSVincent Donnefort# to all kernel symbols. Fail the build if forbidden symbols are found. 138a717943dSVincent Donnefort# 1391211907aSVincent Donnefort# undefsyms_base generates a set of compiler and tooling-generated symbols that can 1401211907aSVincent Donnefort# safely be ignored for simple_ring_buffer. 1411211907aSVincent Donnefort# 1421211907aSVincent Donnefortfilechk_undefsyms_base = \ 1431211907aSVincent Donnefort echo '$(pound)include <linux/atomic.h>'; \ 1441211907aSVincent Donnefort echo '$(pound)include <linux/string.h>'; \ 1451211907aSVincent Donnefort echo '$(pound)include <asm/page.h>'; \ 1461211907aSVincent Donnefort echo 'static char page[PAGE_SIZE] __aligned(PAGE_SIZE);'; \ 1471211907aSVincent Donnefort echo 'void undefsyms_base(void *p, int n);'; \ 1481211907aSVincent Donnefort echo 'void undefsyms_base(void *p, int n) {'; \ 1491211907aSVincent Donnefort echo ' char buffer[256] = { 0 };'; \ 1501211907aSVincent Donnefort echo ' u32 u = 0;'; \ 1511211907aSVincent Donnefort echo ' memset((char * volatile)page, 8, PAGE_SIZE);'; \ 1521211907aSVincent Donnefort echo ' memset((char * volatile)buffer, 8, sizeof(buffer));'; \ 1531211907aSVincent Donnefort echo ' memcpy((void * volatile)p, buffer, sizeof(buffer));'; \ 1541211907aSVincent Donnefort echo ' cmpxchg((u32 * volatile)&u, 0, 8);'; \ 1551211907aSVincent Donnefort echo ' WARN_ON(n == 0xdeadbeef);'; \ 1561211907aSVincent Donnefort echo '}' 1571211907aSVincent Donnefort 1581211907aSVincent Donnefort$(obj)/undefsyms_base.c: FORCE 1591211907aSVincent Donnefort $(call filechk,undefsyms_base) 1601211907aSVincent Donnefort 1611211907aSVincent Donnefortclean-files += undefsyms_base.c 1621211907aSVincent Donnefort 1631211907aSVincent Donnefort$(obj)/undefsyms_base.o: $(obj)/undefsyms_base.c 1641211907aSVincent Donnefort 1651211907aSVincent Donneforttargets += undefsyms_base.o 1661211907aSVincent Donnefort 1671211907aSVincent Donnefort# Ensure KASAN is enabled to avoid logic that may disable FORTIFY_SOURCE when 1681211907aSVincent Donnefort# KASAN is not enabled. undefsyms_base.o does not automatically get KASAN flags 1691211907aSVincent Donnefort# because it is not linked into vmlinux. 1701211907aSVincent DonnefortKASAN_SANITIZE_undefsyms_base.o := y 1711211907aSVincent Donnefort 1721211907aSVincent DonnefortUNDEFINED_ALLOWLIST = __asan __gcov __kasan __kcsan __hwasan __sancov __sanitizer __tsan __ubsan __x86_indirect_thunk \ 1731211907aSVincent Donnefort __msan simple_ring_buffer \ 1741211907aSVincent Donnefort $(shell $(NM) -u $(obj)/undefsyms_base.o 2>/dev/null | awk '{print $$2}') 175a717943dSVincent Donnefort 176a717943dSVincent Donnefortquiet_cmd_check_undefined = NM $< 1771211907aSVincent Donnefort cmd_check_undefined = test -z "`$(NM) -u $< | grep -v $(addprefix -e , $(UNDEFINED_ALLOWLIST))`" 178a717943dSVincent Donnefort 1791211907aSVincent Donnefort$(obj)/%.o.checked: $(obj)/%.o $(obj)/undefsyms_base.o FORCE 180a717943dSVincent Donnefort $(call if_changed,check_undefined) 181a717943dSVincent Donnefort 182a717943dSVincent Donnefortalways-$(CONFIG_SIMPLE_RING_BUFFER) += simple_ring_buffer.o.checked 183a717943dSVincent Donnefort 18416444a8aSArnaldo Carvalho de Melolibftrace-y := ftrace.o 185