xref: /OK3568_Linux_fs/kernel/arch/arm/vdso/Makefile (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun# SPDX-License-Identifier: GPL-2.0
2*4882a593Smuzhiyun
3*4882a593Smuzhiyun# Absolute relocation type $(ARCH_REL_TYPE_ABS) needs to be defined before
4*4882a593Smuzhiyun# the inclusion of generic Makefile.
5*4882a593SmuzhiyunARCH_REL_TYPE_ABS := R_ARM_JUMP_SLOT|R_ARM_GLOB_DAT|R_ARM_ABS32
6*4882a593Smuzhiyuninclude $(srctree)/lib/vdso/Makefile
7*4882a593Smuzhiyun
8*4882a593Smuzhiyunhostprogs := vdsomunge
9*4882a593Smuzhiyun
10*4882a593Smuzhiyunobj-vdso := vgettimeofday.o datapage.o note.o
11*4882a593Smuzhiyun
12*4882a593Smuzhiyun# Build rules
13*4882a593Smuzhiyuntargets := $(obj-vdso) vdso.so vdso.so.dbg vdso.so.raw vdso.lds
14*4882a593Smuzhiyunobj-vdso := $(addprefix $(obj)/, $(obj-vdso))
15*4882a593Smuzhiyun
16*4882a593Smuzhiyunccflags-y := -fPIC -fno-common -fno-builtin -fno-stack-protector
17*4882a593Smuzhiyunccflags-y += -DDISABLE_BRANCH_PROFILING -DBUILD_VDSO32
18*4882a593Smuzhiyun
19*4882a593Smuzhiyunldflags-$(CONFIG_CPU_ENDIAN_BE8) := --be8
20*4882a593Smuzhiyunldflags-y := -Bsymbolic --no-undefined -soname=linux-vdso.so.1 \
21*4882a593Smuzhiyun	    -z max-page-size=4096 -nostdlib -shared $(ldflags-y) \
22*4882a593Smuzhiyun	    --hash-style=sysv --build-id=sha1 \
23*4882a593Smuzhiyun	    -T
24*4882a593Smuzhiyun
25*4882a593Smuzhiyunobj-$(CONFIG_VDSO) += vdso.o
26*4882a593Smuzhiyunextra-$(CONFIG_VDSO) += vdso.lds
27*4882a593SmuzhiyunCPPFLAGS_vdso.lds += -P -C -U$(ARCH)
28*4882a593Smuzhiyun
29*4882a593SmuzhiyunCFLAGS_REMOVE_vdso.o = -pg
30*4882a593Smuzhiyun
31*4882a593Smuzhiyun# Force -O2 to avoid libgcc dependencies
32*4882a593SmuzhiyunCFLAGS_REMOVE_vgettimeofday.o = -pg -Os $(GCC_PLUGINS_CFLAGS)
33*4882a593Smuzhiyunifeq ($(c-gettimeofday-y),)
34*4882a593SmuzhiyunCFLAGS_vgettimeofday.o = -O2
35*4882a593Smuzhiyunelse
36*4882a593SmuzhiyunCFLAGS_vgettimeofday.o = -O2 -include $(c-gettimeofday-y)
37*4882a593Smuzhiyunendif
38*4882a593Smuzhiyun
39*4882a593Smuzhiyun# Disable gcov profiling for VDSO code
40*4882a593SmuzhiyunGCOV_PROFILE := n
41*4882a593Smuzhiyun
42*4882a593Smuzhiyun# Prevents link failures: __sanitizer_cov_trace_pc() is not linked in.
43*4882a593SmuzhiyunKCOV_INSTRUMENT := n
44*4882a593Smuzhiyun
45*4882a593Smuzhiyun# Force dependency
46*4882a593Smuzhiyun$(obj)/vdso.o : $(obj)/vdso.so
47*4882a593Smuzhiyun
48*4882a593Smuzhiyun# Link rule for the .so file
49*4882a593Smuzhiyun$(obj)/vdso.so.raw: $(obj)/vdso.lds $(obj-vdso) FORCE
50*4882a593Smuzhiyun	$(call if_changed,vdsold_and_vdso_check)
51*4882a593Smuzhiyun
52*4882a593Smuzhiyun$(obj)/vdso.so.dbg: $(obj)/vdso.so.raw $(obj)/vdsomunge FORCE
53*4882a593Smuzhiyun	$(call if_changed,vdsomunge)
54*4882a593Smuzhiyun
55*4882a593Smuzhiyun# Strip rule for the .so file
56*4882a593Smuzhiyun$(obj)/%.so: OBJCOPYFLAGS := -S
57*4882a593Smuzhiyun$(obj)/%.so: $(obj)/%.so.dbg FORCE
58*4882a593Smuzhiyun	$(call if_changed,objcopy)
59*4882a593Smuzhiyun
60*4882a593Smuzhiyun# Actual build commands
61*4882a593Smuzhiyunquiet_cmd_vdsold_and_vdso_check = LD      $@
62*4882a593Smuzhiyun      cmd_vdsold_and_vdso_check = $(cmd_ld); $(cmd_vdso_check)
63*4882a593Smuzhiyun
64*4882a593Smuzhiyunquiet_cmd_vdsomunge = MUNGE   $@
65*4882a593Smuzhiyun      cmd_vdsomunge = $(objtree)/$(obj)/vdsomunge $< $@
66*4882a593Smuzhiyun
67*4882a593Smuzhiyun#
68*4882a593Smuzhiyun# Install the unstripped copy of vdso.so.dbg.  If our toolchain
69*4882a593Smuzhiyun# supports build-id, install .build-id links as well.
70*4882a593Smuzhiyun#
71*4882a593Smuzhiyun# Cribbed from arch/x86/vdso/Makefile.
72*4882a593Smuzhiyun#
73*4882a593Smuzhiyunquiet_cmd_vdso_install = INSTALL $<
74*4882a593Smuzhiyundefine cmd_vdso_install
75*4882a593Smuzhiyun	cp $< "$(MODLIB)/vdso/vdso.so"; \
76*4882a593Smuzhiyun	if readelf -n $< | grep -q 'Build ID'; then \
77*4882a593Smuzhiyun	  buildid=`readelf -n $< |grep 'Build ID' |sed -e 's/^.*Build ID: \(.*\)$$/\1/'`; \
78*4882a593Smuzhiyun	  first=`echo $$buildid | cut -b-2`; \
79*4882a593Smuzhiyun	  last=`echo $$buildid | cut -b3-`; \
80*4882a593Smuzhiyun	  mkdir -p "$(MODLIB)/vdso/.build-id/$$first"; \
81*4882a593Smuzhiyun	  ln -sf "../../vdso.so" "$(MODLIB)/vdso/.build-id/$$first/$$last.debug"; \
82*4882a593Smuzhiyun	fi
83*4882a593Smuzhiyunendef
84*4882a593Smuzhiyun
85*4882a593Smuzhiyun$(MODLIB)/vdso: FORCE
86*4882a593Smuzhiyun	@mkdir -p $(MODLIB)/vdso
87*4882a593Smuzhiyun
88*4882a593SmuzhiyunPHONY += vdso_install
89*4882a593Smuzhiyunvdso_install: $(obj)/vdso.so.dbg $(MODLIB)/vdso
90*4882a593Smuzhiyun	$(call cmd,vdso_install)
91