xref: /linux/arch/mips/vdso/Makefile (revision 67faad74352d1ce0c1f411f92fdb1e0c0f3c9380)
1# SPDX-License-Identifier: GPL-2.0
2# Objects to go into the VDSO.
3
4# Include the generic Makefile to check the built vdso.
5include $(srctree)/lib/vdso/Makefile.include
6
7obj-vdso-y := elf.o vgettimeofday.o sigreturn.o
8
9# Common compiler flags between ABIs.
10ccflags-vdso := \
11	$(filter -I%,$(KBUILD_CFLAGS)) \
12	$(filter -E%,$(KBUILD_CFLAGS)) \
13	$(filter -mmicromips,$(KBUILD_CFLAGS)) \
14	$(filter -march=%,$(KBUILD_CFLAGS)) \
15	$(filter -m%-float,$(KBUILD_CFLAGS)) \
16	$(filter -mno-loongson-%,$(KBUILD_CFLAGS)) \
17	$(CLANG_FLAGS) \
18	-D__VDSO__
19
20ifndef CONFIG_64BIT
21ccflags-vdso += -DBUILD_VDSO32
22endif
23
24#
25# The -fno-jump-tables flag only prevents the compiler from generating
26# jump tables but does not prevent the compiler from emitting absolute
27# offsets.
28cflags-vdso := $(ccflags-vdso) \
29	$(filter -W%,$(filter-out -Wa$(comma)%,$(KBUILD_CFLAGS))) \
30	$(filter -std=%,$(KBUILD_CFLAGS)) \
31	-O3 -g -fPIC -fno-strict-aliasing -fno-common -fno-builtin -G 0 \
32	-mrelax-pic-calls $(call cc-option, -mexplicit-relocs) \
33	-fno-stack-protector -fno-jump-tables -DDISABLE_BRANCH_PROFILING \
34	$(call cc-option, -fno-asynchronous-unwind-tables)
35aflags-vdso := $(ccflags-vdso) \
36	-D__ASSEMBLY__ -Wa,-gdwarf-2
37
38ifneq ($(c-gettimeofday-y),)
39CFLAGS_vgettimeofday.o = -include $(c-gettimeofday-y)
40
41# config-n32-o32-env.c prepares the environment to build a 32bit vDSO
42# library on a 64bit kernel.
43# Note: Needs to be included before than the generic library.
44CFLAGS_vgettimeofday-o32.o = -include $(src)/config-n32-o32-env.c -include $(c-gettimeofday-y)
45CFLAGS_vgettimeofday-n32.o = -include $(src)/config-n32-o32-env.c -include $(c-gettimeofday-y)
46endif
47
48CFLAGS_REMOVE_vgettimeofday.o = $(CC_FLAGS_FTRACE)
49
50ifdef CONFIG_MIPS_DISABLE_VDSO
51  obj-vdso-y := $(filter-out vgettimeofday.o, $(obj-vdso-y))
52endif
53
54# VDSO linker flags.
55ldflags-y := -Bsymbolic --no-undefined -soname=linux-vdso.so.1 \
56	$(filter -E%,$(KBUILD_CFLAGS)) -shared \
57	-G 0 --eh-frame-hdr --hash-style=sysv --build-id=sha1 -T
58
59CFLAGS_REMOVE_vdso.o = $(CC_FLAGS_FTRACE)
60
61# Check that we don't have PIC 'jalr t9' calls left
62quiet_cmd_vdso_mips_check = VDSOCHK $@
63      cmd_vdso_mips_check = if $(OBJDUMP) --disassemble $@ | grep -E -h "jalr.*t9" > /dev/null; \
64		       then (echo >&2 "$@: PIC 'jalr t9' calls are not supported"; \
65			     rm -f $@; /bin/false); fi
66
67#
68# Shared build commands.
69#
70
71quiet_cmd_vdsold_and_vdso_check = LD      $@
72      cmd_vdsold_and_vdso_check = $(cmd_ld); $(cmd_vdso_check); $(cmd_vdso_mips_check)
73
74quiet_cmd_vdsoas_o_S = AS      $@
75      cmd_vdsoas_o_S = $(CC) $(a_flags) -c -o $@ $<
76
77# Strip rule for the raw .so files
78$(obj)/%.so.raw: OBJCOPYFLAGS := -S
79$(obj)/%.so.raw: $(obj)/%.so.dbg.raw FORCE
80	$(call if_changed,objcopy)
81
82hostprogs := genvdso
83
84quiet_cmd_genvdso = GENVDSO $@
85define cmd_genvdso
86	$(foreach file,$(filter %.raw,$^),cp $(file) $(file:%.raw=%) &&) \
87	$(obj)/genvdso $(<:%.raw=%) $(<:%.dbg.raw=%) $@ $(VDSO_NAME)
88endef
89
90#
91# Build native VDSO.
92#
93
94native-abi := $(filter -mabi=%,$(KBUILD_CFLAGS))
95
96targets += $(obj-vdso-y)
97targets += vdso.lds
98targets += vdso.so.dbg.raw vdso.so.raw
99targets += vdso.so.dbg vdso.so
100targets += vdso-image.c
101
102obj-vdso := $(obj-vdso-y:%.o=$(obj)/%.o)
103
104$(obj-vdso): KBUILD_CFLAGS := $(cflags-vdso) $(native-abi)
105$(obj-vdso): KBUILD_AFLAGS := $(aflags-vdso) $(native-abi)
106
107$(obj)/vdso.lds: KBUILD_CPPFLAGS := $(ccflags-vdso) $(native-abi)
108
109$(obj)/vdso.so.dbg.raw: $(obj)/vdso.lds $(obj-vdso) FORCE
110	$(call if_changed,vdsold_and_vdso_check)
111
112$(obj)/vdso-image.c: $(obj)/vdso.so.dbg.raw $(obj)/vdso.so.raw \
113                     $(obj)/genvdso FORCE
114	$(call if_changed,genvdso)
115
116obj-y += vdso-image.o
117
118#
119# Build O32 VDSO.
120#
121
122# Define these outside the ifdef to ensure they are picked up by clean.
123targets += $(obj-vdso-y:%.o=%-o32.o)
124targets += vdso-o32.lds
125targets += vdso-o32.so.dbg.raw vdso-o32.so.raw
126targets += vdso-o32.so.dbg vdso-o32.so
127targets += vdso-o32-image.c
128
129ifdef CONFIG_MIPS32_O32
130
131obj-vdso-o32 := $(obj-vdso-y:%.o=$(obj)/%-o32.o)
132
133$(obj-vdso-o32): KBUILD_CFLAGS := $(cflags-vdso) -mabi=32
134$(obj-vdso-o32): KBUILD_AFLAGS := $(aflags-vdso) -mabi=32
135
136$(obj)/%-o32.o: $(src)/%.S FORCE
137	$(call if_changed_dep,vdsoas_o_S)
138
139$(obj)/%-o32.o: $(src)/%.c FORCE
140	$(call cmd,force_checksrc)
141	$(call if_changed_rule,cc_o_c)
142
143$(obj)/vdso-o32.lds: KBUILD_CPPFLAGS := $(ccflags-vdso) -mabi=32
144$(obj)/vdso-o32.lds: $(src)/vdso.lds.S FORCE
145	$(call if_changed_dep,cpp_lds_S)
146
147$(obj)/vdso-o32.so.dbg.raw: $(obj)/vdso-o32.lds $(obj-vdso-o32) FORCE
148	$(call if_changed,vdsold_and_vdso_check)
149
150$(obj)/vdso-o32-image.c: VDSO_NAME := o32
151$(obj)/vdso-o32-image.c: $(obj)/vdso-o32.so.dbg.raw $(obj)/vdso-o32.so.raw \
152                         $(obj)/genvdso FORCE
153	$(call if_changed,genvdso)
154
155obj-y += vdso-o32-image.o
156
157endif
158
159#
160# Build N32 VDSO.
161#
162
163targets += $(obj-vdso-y:%.o=%-n32.o)
164targets += vdso-n32.lds
165targets += vdso-n32.so.dbg.raw vdso-n32.so.raw
166targets += vdso-n32.so.dbg vdso-n32.so
167targets += vdso-n32-image.c
168
169ifdef CONFIG_MIPS32_N32
170
171obj-vdso-n32 := $(obj-vdso-y:%.o=$(obj)/%-n32.o)
172
173$(obj-vdso-n32): KBUILD_CFLAGS := $(cflags-vdso) -mabi=n32
174$(obj-vdso-n32): KBUILD_AFLAGS := $(aflags-vdso) -mabi=n32
175
176$(obj)/%-n32.o: $(src)/%.S FORCE
177	$(call if_changed_dep,vdsoas_o_S)
178
179$(obj)/%-n32.o: $(src)/%.c FORCE
180	$(call cmd,force_checksrc)
181	$(call if_changed_rule,cc_o_c)
182
183$(obj)/vdso-n32.lds: KBUILD_CPPFLAGS := $(ccflags-vdso) -mabi=n32
184$(obj)/vdso-n32.lds: $(src)/vdso.lds.S FORCE
185	$(call if_changed_dep,cpp_lds_S)
186
187$(obj)/vdso-n32.so.dbg.raw: $(obj)/vdso-n32.lds $(obj-vdso-n32) FORCE
188	$(call if_changed,vdsold_and_vdso_check)
189
190$(obj)/vdso-n32-image.c: VDSO_NAME := n32
191$(obj)/vdso-n32-image.c: $(obj)/vdso-n32.so.dbg.raw $(obj)/vdso-n32.so.raw \
192                         $(obj)/genvdso FORCE
193	$(call if_changed,genvdso)
194
195obj-y += vdso-n32-image.o
196
197endif
198
199# FIXME: Need install rule for debug.
200# Needs to deal with dependency for generation of dbg by cmd_genvdso...
201