Arm64: Fix build error while switching from LE to BE
PATCH 1/1 Arm64: Fix build error while switching from LE to BE
Selecting CPU_BIG_ENDIAN and building the kernel fails just after building it for little endian. According to Documentation/kbuild/makefiles.txt, it is a common mistake to forget 'FORCE' while using 'if_changed'
So fix it by 'Forcing' the build of vdso. Fixes build errors like these:
arch/arm64/kernel/vdso/note.o: compiled for a little endian system and target is big endian failed to merge target specific data of file arch/arm64/kernel/vdso/note.o
arch/arm64/kernel/vdso/sigreturn.o: compiled for a little endian system and target is big endian failed to merge target specific data of file arch/arm64/kernel/vdso/sigreturn.o
--- arch/arm64/kernel/vdso/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/arm64/kernel/vdso/Makefile +1 -1
@@ -43,7 +43,7 @@ $(obj)/vdso-offsets.h: $(obj)/vdso.so.dbg FORCE $(call if_changed,vdsosym) # Assembly rules for the .S files -$(obj-vdso): %.o: %.S +$(obj-vdso): %.o: %.S FORCE $(call if_changed_dep,vdsoas) # Actual build commands
Signature · 1 line
1.7.9.5
Mark Rutland
reviewerPATCH 1/1 Arm64: Fix build error while switching from LE to BE
Quoted 3 lines · Arun Chandran
Selecting
CPU_BIG_ENDIANand building the kernel fails just after building it for little endian. According toDocumentation/kbuild/makefiles.txt, it is a common mistake to forget 'FORCE' while using 'if_changed'
This is a little confusing, because we jump from the high level problem to a very specific problem detail with nothing to link the two.
How about:
Building a kernel with CPU_BIG_ENDIAN fails if there are stale objects from a !CPU_BIG_ENDIAN build. Due to a missing FORCE prerequisite on an if_changed rule in the VDSO Makefile, we attempt to link a stale LE object into the new BE kernel. According to Documentation/kbuild/makefiles.txt FORCE is required for if_changed rules, and forgetting it is a common mistake.
Quoted 9 lines
So fix it by 'Forcing' the build of vdso. Fixes build errors like these:
arch/arm64/kernel/vdso/note.o: compiled for a little endian system and target is big endian failed to merge target specific data of filearch/arm64/kernel/vdso/note.o
arch/arm64/kernel/vdso/sigreturn.o: compiled for a little endian system and target is big endian failed to merge target specific data of filearch/arm64/kernel/vdso/sigreturn.oSigned-off-by Arun Chandran <[email protected]>
Any reason for bot picking up my Tested-by [1]? The patch seems to be the same.
Mark.
[1] http://lists.infradead.org/pipermail/linux-arm-kernel/2014-June/266571.html
Quoted 21 lines
--- arch/arm64/kernel/vdso/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)arch/arm64/kernel/vdso/Makefile +1
-1@@ -43,7 +43,7 @@ $(obj)/vdso-offsets.h: $(obj)/vdso.so.dbg FORCE $(call if_changed,vdsosym) # Assembly rules for the .S files -$(obj-vdso): %.o: %.S +$(obj-vdso): %.o: %.S FORCE $(call if_changed_dep,vdsoas) # Actual build commandsSignature · 1 line
1.7.9.5
PATCH 1/1 Arm64: Fix build error while switching from LE to BE
Hi,
Quoted 8 lines · Mark Rutland
Quoted 3 lines · Arun Chandran
Selecting
CPU_BIG_ENDIANand building the kernel fails just after building it for little endian. According toDocumentation/kbuild/makefiles.txt, it is a common mistake to forget 'FORCE' while using 'if_changed'This is a little confusing, because we jump from the high level problem to a very specific problem detail with nothing to link the two.
Quoted 9 lines
How about:
Building a kernel with
CPU_BIG_ENDIANfails if there are stale objects from a !CPU_BIG_ENDIAN build. Due to a missing FORCE prerequisite on anif_changedrule in the VDSOMakefile, we attempt to link a stale LE object into the new BE kernel. According toDocumentation/kbuild/makefiles.txtFORCE is required forif_changedrules, and forgetting it is a common mistake.
Yes that is a better one. I will make the change.
Quoted 5 lines
Quoted 5 lines
So fix it by 'Forcing' the build of vdso. Fixes build errors like these:
arch/arm64/kernel/vdso/note.o: compiled for a little endian system and target is big endian failed to merge target specific data of filearch/arm64/kernel/vdso/note.o
Quoted 7 lines
Quoted 4 lines
arch/arm64/kernel/vdso/sigreturn.o: compiled for a little endian system and target is big endian failed to merge target specific data of filearch/arm64/kernel/vdso/sigreturn.oSigned-off-by Arun Chandran <[email protected]>Any reason for bot picking up my Tested-by [1]? The patch seems to be the same.
Sorry I missed that. Will include in my next patch
--Arun
Quoted 26 lines
Mark.
[1] http://lists.infradead.org/pipermail/linux-arm-kernel/2014-June/266571.html
Quoted 21 lines
--- arch/arm64/kernel/vdso/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)arch/arm64/kernel/vdso/Makefile +1
-2@@ -43,7 +43,7 @@ $(obj)/vdso-offsets.h: $(obj)/vdso.so.dbg FORCE $(call if_changed,vdsosym) # Assembly rules for the .S files -$(obj-vdso): %.o: %.S +$(obj-vdso): %.o: %.S FORCE $(call if_changed_dep,vdsoas) # Actual build commands --1.7.9.5