aboutsummaryrefslogtreecommitdiffstats
path: root/arch/mips/vdso
diff options
context:
space:
mode:
authorJames Hogan <james.hogan@imgtec.com>2016-05-13 14:41:06 -0400
committerRalf Baechle <ralf@linux-mips.org>2016-05-13 16:47:39 -0400
commit2afb97454347f641dd2435a3956ba12f816fb1df (patch)
tree60dc1b929cb56b69eb0a08a0de6e028aa806b5a7 /arch/mips/vdso
parentb071c5d7998a79919e83565ddfb98fdf6fa804bc (diff)
MIPS: Fix genvdso error on rebuild
The genvdso program modifies the debug and stripped versions of the VDSOs in place, and errors if the modification has already taken place. Unfortunately this means that a rebuild which tries to rerun genvdso to generate vdso*-image.c without also rebuilding vdso.so.dbg (for example if genvdso.c is modified) hits a build error like this: arch/mips/vdso/genvdso 'arch/mips/vdso/vdso.so.dbg' already contains a '.MIPS.abiflags' section This is fixed by reorganising the rules such that unmodified .so files have a .raw suffix, and these are copied in the same rule that runs genvdso on the copies. I.e. previously we had: cmd_vdsold: link objects -> vdso.so.dbg cmd_genvdso: strip vdso.so.dbg -> vdso.so run genvdso -> vdso-image.c and modify vdso.so.dbg and vdso.so in place Now we have: cmd_vdsold: link objects -> vdso.so.dbg.raw a new cmd_objcopy based strip rule (inspired by ARM): strip vdso.so.dbg.raw -> vdso.so.raw cmd_genvdso: copy vdso.so.dbg.raw -> vdso.so.dbg copy vdso.so.raw -> vdso.so run genvdso -> vdso-image.c and modify vdso.so.dbg and vdso.so in place Signed-off-by: James Hogan <james.hogan@imgtec.com> Cc: linux-mips@linux-mips.org Patchwork: https://patchwork.linux-mips.org/patch/13250/ Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Diffstat (limited to 'arch/mips/vdso')
-rw-r--r--arch/mips/vdso/Makefile40
1 files changed, 28 insertions, 12 deletions
diff --git a/arch/mips/vdso/Makefile b/arch/mips/vdso/Makefile
index ee3617c0c5e2..b369509e9753 100644
--- a/arch/mips/vdso/Makefile
+++ b/arch/mips/vdso/Makefile
@@ -50,13 +50,17 @@ quiet_cmd_vdsold = VDSO $@
50 cmd_vdsold = $(CC) $(c_flags) $(VDSO_LDFLAGS) \ 50 cmd_vdsold = $(CC) $(c_flags) $(VDSO_LDFLAGS) \
51 -Wl,-T $(filter %.lds,$^) $(filter %.o,$^) -o $@ 51 -Wl,-T $(filter %.lds,$^) $(filter %.o,$^) -o $@
52 52
53# Strip rule for the raw .so files
54$(obj)/%.so.raw: OBJCOPYFLAGS := -S
55$(obj)/%.so.raw: $(obj)/%.so.dbg.raw FORCE
56 $(call if_changed,objcopy)
57
53hostprogs-y := genvdso 58hostprogs-y := genvdso
54 59
55quiet_cmd_genvdso = GENVDSO $@ 60quiet_cmd_genvdso = GENVDSO $@
56define cmd_genvdso 61define cmd_genvdso
57 cp $< $(<:%.dbg=%) && \ 62 $(foreach file,$(filter %.raw,$^),cp $(file) $(file:%.raw=%) &&) \
58 $(OBJCOPY) -S $< $(<:%.dbg=%) && \ 63 $(obj)/genvdso $(<:%.raw=%) $(<:%.dbg.raw=%) $@ $(VDSO_NAME)
59 $(obj)/genvdso $< $(<:%.dbg=%) $@ $(VDSO_NAME)
60endef 64endef
61 65
62# 66#
@@ -66,7 +70,10 @@ endef
66native-abi := $(filter -mabi=%,$(KBUILD_CFLAGS)) 70native-abi := $(filter -mabi=%,$(KBUILD_CFLAGS))
67 71
68targets += $(obj-vdso-y) 72targets += $(obj-vdso-y)
69targets += vdso.lds vdso.so.dbg vdso.so vdso-image.c 73targets += vdso.lds
74targets += vdso.so.dbg.raw vdso.so.raw
75targets += vdso.so.dbg vdso.so
76targets += vdso-image.c
70 77
71obj-vdso := $(obj-vdso-y:%.o=$(obj)/%.o) 78obj-vdso := $(obj-vdso-y:%.o=$(obj)/%.o)
72 79
@@ -75,10 +82,11 @@ $(obj-vdso): KBUILD_AFLAGS := $(aflags-vdso) $(native-abi)
75 82
76$(obj)/vdso.lds: KBUILD_CPPFLAGS := $(native-abi) 83$(obj)/vdso.lds: KBUILD_CPPFLAGS := $(native-abi)
77 84
78$(obj)/vdso.so.dbg: $(obj)/vdso.lds $(obj-vdso) FORCE 85$(obj)/vdso.so.dbg.raw: $(obj)/vdso.lds $(obj-vdso) FORCE
79 $(call if_changed,vdsold) 86 $(call if_changed,vdsold)
80 87
81$(obj)/vdso-image.c: $(obj)/vdso.so.dbg $(obj)/genvdso FORCE 88$(obj)/vdso-image.c: $(obj)/vdso.so.dbg.raw $(obj)/vdso.so.raw \
89 $(obj)/genvdso FORCE
82 $(call if_changed,genvdso) 90 $(call if_changed,genvdso)
83 91
84obj-y += vdso-image.o 92obj-y += vdso-image.o
@@ -89,7 +97,10 @@ obj-y += vdso-image.o
89 97
90# Define these outside the ifdef to ensure they are picked up by clean. 98# Define these outside the ifdef to ensure they are picked up by clean.
91targets += $(obj-vdso-y:%.o=%-o32.o) 99targets += $(obj-vdso-y:%.o=%-o32.o)
92targets += vdso-o32.lds vdso-o32.so.dbg vdso-o32.so vdso-o32-image.c 100targets += vdso-o32.lds
101targets += vdso-o32.so.dbg.raw vdso-o32.so.raw
102targets += vdso-o32.so.dbg vdso-o32.so
103targets += vdso-o32-image.c
93 104
94ifdef CONFIG_MIPS32_O32 105ifdef CONFIG_MIPS32_O32
95 106
@@ -109,11 +120,12 @@ $(obj)/vdso-o32.lds: KBUILD_CPPFLAGS := -mabi=32
109$(obj)/vdso-o32.lds: $(src)/vdso.lds.S FORCE 120$(obj)/vdso-o32.lds: $(src)/vdso.lds.S FORCE
110 $(call if_changed_dep,cpp_lds_S) 121 $(call if_changed_dep,cpp_lds_S)
111 122
112$(obj)/vdso-o32.so.dbg: $(obj)/vdso-o32.lds $(obj-vdso-o32) FORCE 123$(obj)/vdso-o32.so.dbg.raw: $(obj)/vdso-o32.lds $(obj-vdso-o32) FORCE
113 $(call if_changed,vdsold) 124 $(call if_changed,vdsold)
114 125
115$(obj)/vdso-o32-image.c: VDSO_NAME := o32 126$(obj)/vdso-o32-image.c: VDSO_NAME := o32
116$(obj)/vdso-o32-image.c: $(obj)/vdso-o32.so.dbg $(obj)/genvdso FORCE 127$(obj)/vdso-o32-image.c: $(obj)/vdso-o32.so.dbg.raw $(obj)/vdso-o32.so.raw \
128 $(obj)/genvdso FORCE
117 $(call if_changed,genvdso) 129 $(call if_changed,genvdso)
118 130
119obj-y += vdso-o32-image.o 131obj-y += vdso-o32-image.o
@@ -125,7 +137,10 @@ endif
125# 137#
126 138
127targets += $(obj-vdso-y:%.o=%-n32.o) 139targets += $(obj-vdso-y:%.o=%-n32.o)
128targets += vdso-n32.lds vdso-n32.so.dbg vdso-n32.so vdso-n32-image.c 140targets += vdso-n32.lds
141targets += vdso-n32.so.dbg.raw vdso-n32.so.raw
142targets += vdso-n32.so.dbg vdso-n32.so
143targets += vdso-n32-image.c
129 144
130ifdef CONFIG_MIPS32_N32 145ifdef CONFIG_MIPS32_N32
131 146
@@ -145,11 +160,12 @@ $(obj)/vdso-n32.lds: KBUILD_CPPFLAGS := -mabi=n32
145$(obj)/vdso-n32.lds: $(src)/vdso.lds.S FORCE 160$(obj)/vdso-n32.lds: $(src)/vdso.lds.S FORCE
146 $(call if_changed_dep,cpp_lds_S) 161 $(call if_changed_dep,cpp_lds_S)
147 162
148$(obj)/vdso-n32.so.dbg: $(obj)/vdso-n32.lds $(obj-vdso-n32) FORCE 163$(obj)/vdso-n32.so.dbg.raw: $(obj)/vdso-n32.lds $(obj-vdso-n32) FORCE
149 $(call if_changed,vdsold) 164 $(call if_changed,vdsold)
150 165
151$(obj)/vdso-n32-image.c: VDSO_NAME := n32 166$(obj)/vdso-n32-image.c: VDSO_NAME := n32
152$(obj)/vdso-n32-image.c: $(obj)/vdso-n32.so.dbg $(obj)/genvdso FORCE 167$(obj)/vdso-n32-image.c: $(obj)/vdso-n32.so.dbg.raw $(obj)/vdso-n32.so.raw \
168 $(obj)/genvdso FORCE
153 $(call if_changed,genvdso) 169 $(call if_changed,genvdso)
154 170
155obj-y += vdso-n32-image.o 171obj-y += vdso-n32-image.o