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 with the message
VDSOA arch/arm64/kernel/vdso/gettimeofday.o
VDSOL arch/arm64/kernel/vdso/vdso.so.dbg
/gcc-linaro-aarch64_be-linux-gnu-4.9-2014.05_linux/bin/../lib/gcc/aarch64_be-linux-gnu/4.9.1/../../../../aarch64_be-linux-gnu/bin/ld:arch/arm64/kernel/vdso/note.o: compiled for a little endian system and
target is big endian /gcc-linaro-aarch64_be-linux-gnu-4.9-2014.05_linux/bin/../lib/gcc/aarch64_be-linux-gnu/4.9.1/../../../../aarch64_be-linux-gnu/bin/ld:
failed to merge target specific data of filearch/arm64/kernel/vdso/note.o /gcc-linaro-aarch64_be-linux-gnu-4.9-2014.05_linux/bin/../lib/gcc/aarch64_be-linux-gnu/4.9.1/../../../../aarch64_be-linux-gnu/bin/ld:arch/arm64/kernel/vdso/sigreturn.o: compiled for a little endian system
and target is big endian /gcc-linaro-aarch64_be-linux-gnu-4.9-2014.05_linux/bin/../lib/gcc/aarch64_be-linux-gnu/4.9.1/../../../../aarch64_be-linux-gnu/bin/ld:
failed to merge target specific data of filearch/arm64/kernel/vdso/sigreturn.o
collect2: error: ld returned 1 exit status
make[2]: *** [arch/arm64/kernel/vdso/vdso.so.dbg] Error 1
make[1]: *** [arch/arm64/kernel/vdso] Error 2
make: *** [arch/arm64/kernel] Error 2
make: *** Waiting for unfinished jobs....
Fix it by 'Forcing' the build in arch/arm64/kernel/vdso/Makefile
--- arch/arm64/kernel/vdso/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
(quoted diff) +0 -0
b/arch/arm64/kernel/vdso/Makefile
index 6d20b7d..a268a9a 100644
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 · 9 lines
1.7.9.5 -------------- next part -------------- A non-text attachment was scrubbed... Name: 0001-Arm64-Fix-build-error-while-switching-from-LE-to-BE.patch Type: text/x-patch Size: 2189 bytes Desc: not available URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20140625/dff48525/attachment.bin>
Mark Rutland
reviewerPATCH 1/1 Arm64: Fix build error while switching from LE to BE
Quoted 28 lines · arun chandran
From
85134076eb06b90e295e46b083dc180a91c61ea2Mon Sep 17 00:00:00 2001
From: Arun Chandran <[email protected]>
Date: Wed, 25 Jun 2014 19:36:54 +0530
Subject: [PATCH] Arm64: Fix build error while switching from LE to BESelecting
CPU_BIG_ENDIANand building the kernel fails just after building it for little endian with the messageVDSOA
arch/arm64/kernel/vdso/gettimeofday.o
VDSOLarch/arm64/kernel/vdso/vdso.so.dbg
/gcc-linaro-aarch64_be-linux-gnu-4.9-2014.05_linux/bin/../lib/gcc/aarch64_be-linux-gnu/4.9.1/../../../../aarch64_be-linux-gnu/bin/ld:arch/arm64/kernel/vdso/note.o: compiled for a little endian system and
target is big endian /gcc-linaro-aarch64_be-linux-gnu-4.9-2014.05_linux/bin/../lib/gcc/aarch64_be-linux-gnu/4.9.1/../../../../aarch64_be-linux-gnu/bin/ld:
failed to merge target specific data of filearch/arm64/kernel/vdso/note.o/gcc-linaro-aarch64_be-linux-gnu-4.9-2014.05_linux/bin/../lib/gcc/aarch64_be-linux-gnu/4.9.1/../../../../aarch64_be-linux-gnu/bin/ld:arch/arm64/kernel/vdso/sigreturn.o: compiled for a little endian system
and target is big endian /gcc-linaro-aarch64_be-linux-gnu-4.9-2014.05_linux/bin/../lib/gcc/aarch64_be-linux-gnu/4.9.1/../../../../aarch64_be-linux-gnu/bin/ld:
failed to merge target specific data of filearch/arm64/kernel/vdso/sigreturn.o
collect2: error: ld returned 1 exit status
make[2]: *** [arch/arm64/kernel/vdso/vdso.so.dbg] Error 1
make[1]: *** [arch/arm64/kernel/vdso] Error 2
make: *** [arch/arm64/kernel] Error 2
make: *** Waiting for unfinished jobs....
Quoted 1 line
Fix it by 'Forcing' the build in
arch/arm64/kernel/vdso/Makefile
I see that Documentation/kbuild/makefiles.txt describes that if_changed requires FORCE, and forgetting FORCE is a common mistake. See "6.7 Commands useful for building a boot image".
It's probably worth mentioning that in the commit message.
I was able to build and boot LE, BE, and LE arm64 (defconfig) kernels in turn with this patch applied, and I didn't receive any unexpected errors from gcc or ld.
So FWIW:
Thanks,
Mark.
Quoted 20 lines
Signed-off-by Arun Chandran <[email protected]>--- 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
In reply to arun chandranHi Arun,
Quoted 23 lines · arun chandran
Selecting
CPU_BIG_ENDIANand building the kernel fails just after building it for little endian with the messageVDSOA
arch/arm64/kernel/vdso/gettimeofday.o
VDSOLarch/arm64/kernel/vdso/vdso.so.dbg
/gcc-linaro-aarch64_be-linux-gnu-4.9-2014.05_linux/bin/../lib/gcc/aarch64_be-linux-gnu/4.9.1/../../../../aarch64_be-linux-gnu/bin/ld:arch/arm64/kernel/vdso/note.o: compiled for a little endian system and
target is big endian /gcc-linaro-aarch64_be-linux-gnu-4.9-2014.05_linux/bin/../lib/gcc/aarch64_be-linux-gnu/4.9.1/../../../../aarch64_be-linux-gnu/bin/ld:
failed to merge target specific data of filearch/arm64/kernel/vdso/note.o/gcc-linaro-aarch64_be-linux-gnu-4.9-2014.05_linux/bin/../lib/gcc/aarch64_be-linux-gnu/4.9.1/../../../../aarch64_be-linux-gnu/bin/ld:arch/arm64/kernel/vdso/sigreturn.o: compiled for a little endian system
and target is big endian /gcc-linaro-aarch64_be-linux-gnu-4.9-2014.05_linux/bin/../lib/gcc/aarch64_be-linux-gnu/4.9.1/../../../../aarch64_be-linux-gnu/bin/ld:
failed to merge target specific data of filearch/arm64/kernel/vdso/sigreturn.o
collect2: error: ld returned 1 exit status
make[2]: *** [arch/arm64/kernel/vdso/vdso.so.dbg] Error 1
make[1]: *** [arch/arm64/kernel/vdso] Error 2
make: *** [arch/arm64/kernel] Error 2
make: *** Waiting for unfinished jobs....
Quoted 3 lines
Fix it by 'Forcing' the build in
arch/arm64/kernel/vdso/MakefileSigned-off-by Arun Chandran <[email protected]>
This seems like a bit too much to put into the commit log. What about something like:
Selecting CPU_BIG_ENDIAN and building the kernel fails just after building it for little endian. 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
-Geoff
PATCH 1/1 Arm64: Fix build error while switching from LE to BE
Hi Geoff,
Quoted 29 lines · arun chandran
Quoted 23 lines
Selecting
CPU_BIG_ENDIANand building the kernel fails just after building it for little endian with the messageVDSOA
arch/arm64/kernel/vdso/gettimeofday.o
VDSOLarch/arm64/kernel/vdso/vdso.so.dbg
/gcc-linaro-aarch64_be-linux-gnu-4.9-2014.05_linux/bin/../lib/gcc/aarch64_be-linux-gnu/4.9.1/../../../../aarch64_be-linux-gnu/bin/ld:arch/arm64/kernel/vdso/note.o: compiled for a little endian system and
target is big endian /gcc-linaro-aarch64_be-linux-gnu-4.9-2014.05_linux/bin/../lib/gcc/aarch64_be-linux-gnu/4.9.1/../../../../aarch64_be-linux-gnu/bin/ld:
failed to merge target specific data of filearch/arm64/kernel/vdso/note.o/gcc-linaro-aarch64_be-linux-gnu-4.9-2014.05_linux/bin/../lib/gcc/aarch64_be-linux-gnu/4.9.1/../../../../aarch64_be-linux-gnu/bin/ld:arch/arm64/kernel/vdso/sigreturn.o: compiled for a little endian system
and target is big endian /gcc-linaro-aarch64_be-linux-gnu-4.9-2014.05_linux/bin/../lib/gcc/aarch64_be-linux-gnu/4.9.1/../../../../aarch64_be-linux-gnu/bin/ld:
failed to merge target specific data of filearch/arm64/kernel/vdso/sigreturn.o
collect2: error: ld returned 1 exit status
make[2]: *** [arch/arm64/kernel/vdso/vdso.so.dbg] Error 1
make[1]: *** [arch/arm64/kernel/vdso] Error 2
make: *** [arch/arm64/kernel] Error 2
make: *** Waiting for unfinished jobs....Quoted 3 lines
Fix it by 'Forcing' the build in
arch/arm64/kernel/vdso/MakefileSigned-off-by Arun Chandran <[email protected]>
Quoted 9 lines
This seems like a bit too much to put into the commit log. What about something like:
Selecting
CPU_BIG_ENDIANand building the kernel fails just after building it for little endian. 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
Ok I will do that and resend it.
--Arun