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