Hi I am using an Olimex A20 SOM with NAND and due to some binary blob for NAND driver, I am stuck with the sunxi kernel 3.4.xxx version. (Repo here: https://github.com/linux-sunxi/linux-sunxi) I am currently using buildroot-2016 and gcc-5.5 for building the kernel and every other package needed. Now the requirement is to move to the latest version of gcc-9.x, so that we can have glibc++ provided by the gcc-9.1 toolchain. Main problem for moving to later versions of buildroot is the kernel 3.4 which we couldn't to work with gcc-6 a few years ago _but_ now the gcc-9.1 requirement is mandatory so now have to look into compiling linux-3.4 with gcc-9.1 or above. Now I need some help. -- Is it realistic to expect 3.4 kernel compiling and boot successfully with gcc-9.1? -- Secondly, till now I am able to compile until the point when its going to generate the vmlinuz image, it failed with error at LD stage: arm-none-linux-gnueabihf-ld: no machine record defined Last few lines from compile log: ------------------------------------------------------------------------------- include/linux/init.h:267:24: note: in expansion of macro ‘__initcall’ 267 | #define module_init(x) __initcall(x); | ^~~~~~~~~~ net/sunrpc/auth_gss/auth_gss.c:1721:1: note: in expansion of macro ‘module_init’ 1721 | module_init(init_rpcsec_gss) | ^~~~~~~~~~~ In file included from include/linux/kernel.h:20, from include/linux/spinlock.h:55, from include/linux/mmzone.h:7, from include/linux/gfp.h:4, from include/linux/slab.h:12, from net/sunrpc/auth_gss/svcauth_gss.c:40: include/linux/log2.h:22:1: warning: ignoring attribute ‘noreturn’ because it conflicts with attribute ‘const’ [-Wattributes] 22 | int ____ilog2_NaN(void); | ^~~ LD net/sunrpc/auth_gss/auth_rpcgss.o LD net/sunrpc/auth_gss/built-in.o LD net/sunrpc/built-in.o LD net/built-in.o LD vmlinux.o MODPOST vmlinux.o GEN .version CHK include/generated/compile.h UPD include/generated/compile.h CC init/version.o In file included from include/linux/kernel.h:20, from include/linux/cache.h:4, from include/linux/time.h:7, from include/linux/stat.h:60, from include/linux/module.h:10, from init/version.c:10: include/linux/log2.h:22:1: warning: ignoring attribute ‘noreturn’ because it conflicts with attribute ‘const’ [-Wattributes] 22 | int ____ilog2_NaN(void); | ^~~ LD init/built-in.o LD .tmp_vmlinux1 arm-none-linux-gnueabihf-ld: no machine record defined Makefile:875: recipe for target '.tmp_vmlinux1' failed make: *** [.tmp_vmlinux1] Error 1 ------------------------------------------------------------------------------- After some investigation I found that the MACHINE_START macro from arch/arm/include/asm/mach/arch.h is optimised by compiler and removed from the object file during compilation of "arch/arm/plat-sunxi/core.c" due to the error here: --------------------------------------------------------------- flateef@flateef-XPS-13-9360:~/src/tmp/linux-custom-venus-gc-9.2$ make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabihf- EXTRAVERSION=-custom1 uImage LOADADDR="0x40008000" -j4 CHK include/linux/version.h CHK include/generated/utsrelease.h make[1]: 'include/generated/mach-types.h' is up to date. CALL scripts/checksyscalls.sh CHK include/generated/compile.h CC arch/arm/plat-sunxi/core.o In file included from include/linux/kernel.h:20, from arch/arm/plat-sunxi/core.c:20: include/linux/log2.h:22:1: warning: ignoring attribute ‘noreturn’ because it conflicts with attribute ‘const’ [-Wattributes] 22 | int ____ilog2_NaN(void); | ^~~ In file included from include/linux/scatterlist.h:10, from include/linux/dma-mapping.h:9, from arch/arm/plat-sunxi/core.c:24: arch/arm/plat-sunxi/core.c: In function ‘sw_irq_unmask’: arch/arm/plat-sunxi/core.c:287:14: warning: left shift count >= width of type [-Wshift-count-overflow] 287 | writel((1 << SW_INT_IRQNO_ENMI), SW_INT_IRQ_PENDING_REG0); | ^~ /home/flateef/src/tmp/linux-custom-venus-gc-9.2/arch/arm/include/asm/io.h:52:88: note: in definition of macro ‘__raw_writel’ 52 | #define __raw_writel(v,a) (__chk_io_ptr(a), *(volatile unsigned int __force *)(a) = (v)) | ^ include/linux/byteorder/generic.h:87:21: note: in expansion of macro ‘__cpu_to_le32’ 87 | #define cpu_to_le32 __cpu_to_le32 | ^~~~~~~~~~~~~ /home/flateef/src/tmp/linux-custom-venus-gc-9.2/arch/arm/include/asm/io.h:244:36: note: in expansion of macro ‘writel_relaxed’ 244 | #define writel(v,c) ({ __iowmb(); writel_relaxed(v,c); }) | ^~~~~~~~~~~~~~ arch/arm/plat-sunxi/core.c:287:4: note: in expansion of macro ‘writel’ 287 | writel((1 << SW_INT_IRQNO_ENMI), SW_INT_IRQ_PENDING_REG0); | ^~~~~~ In file included from arch/arm/plat-sunxi/core.c:53: At top level: /home/flateef/src/tmp/linux-custom-venus-gc-9.2/arch/arm/include/asm/mach/arch.h:69:34: warning: ‘__mach_desc_SUN7I’ defined but not used [-Wunused-const-variable=] 69 | static const struct machine_desc __mach_desc_##_type \ | ^~~~~~~~~~~~ arch/arm/plat-sunxi/core.c:424:1: note: in expansion of macro ‘MACHINE_START’ 424 | MACHINE_START(SUN7I, "sun7i") | ^~~~~~~~~~~~~ /home/flateef/src/tmp/linux-custom-venus-gc-9.2/arch/arm/include/asm/mach/arch.h:69:34: warning: ‘__mach_desc_SUN5I’ defined but not used [-Wunused-const-variable=] 69 | static const struct machine_desc __mach_desc_##_type \ | ^~~~~~~~~~~~ arch/arm/plat-sunxi/core.c:410:1: note: in expansion of macro ‘MACHINE_START’ 410 | MACHINE_START(SUN5I, "sun5i") | ^~~~~~~~~~~~~ /home/flateef/src/tmp/linux-custom-venus-gc-9.2/arch/arm/include/asm/mach/arch.h:69:34: warning: ‘__mach_desc_SUN4I’ defined but not used [-Wunused-const-variable=] 69 | static const struct machine_desc __mach_desc_##_type \ | ^~~~~~~~~~~~ arch/arm/plat-sunxi/core.c:396:1: note: in expansion of macro ‘MACHINE_START’ 396 | MACHINE_START(SUN4I, "sun4i") | ^~~~~~~~~~~~~ LD arch/arm/plat-sunxi/built-in.o LD vmlinux.o MODPOST vmlinux.o GEN .version CHK include/generated/compile.h UPD include/generated/compile.h CC init/version.o In file included from include/linux/kernel.h:20, from include/linux/cache.h:4, from include/linux/time.h:7, from include/linux/stat.h:60, from include/linux/module.h:10, from init/version.c:10: include/linux/log2.h:22:1: warning: ignoring attribute ‘noreturn’ because it conflicts with attribute ‘const’ [-Wattributes] 22 | int ____ilog2_NaN(void); | ^~~ LD init/built-in.o LD .tmp_vmlinux1 arm-none-linux-gnueabihf-ld: no machine record defined Makefile:875: recipe for target '.tmp_vmlinux1' failed make: *** [.tmp_vmlinux1] Error 1 --------------------------------------------------------------- I modified the MACHINE_START macro in arch/arm/include/asm/mach/arch.h and added "__attribute__((used))" so it became: static const struct machine_desc __mach_desc_##_type __attribute__((used)) \ And I managed to get the vmlinux image. ------------------------------------------------------------- arch/arm/mm/mmu.c:919:1: note: in expansion of macro ‘early_param’ 919 | early_param("vmalloc", early_vmalloc); | ^~~~~~~~~~~ include/linux/init.h:241:33: warning: ‘__setup_noalign_setup’ defined but not used [-Wunused-variable] 241 | static struct obs_kernel_param __setup_##unique_id \ | ^~~~~~~~ include/linux/init.h:247:2: note: in expansion of macro ‘__setup_param’ 247 | __setup_param(str, fn, fn, 0) | ^~~~~~~~~~~~~ arch/arm/mm/mmu.c:175:1: note: in expansion of macro ‘__setup’ 175 | __setup("noalign", noalign_setup); | ^~~~~~~ include/linux/init.h:241:33: warning: ‘__setup_early_ecc’ defined but not used [-Wunused-variable] 241 | static struct obs_kernel_param __setup_##unique_id \ | ^~~~~~~~ include/linux/init.h:252:2: note: in expansion of macro ‘__setup_param’ 252 | __setup_param(str, fn, fn, 1) | ^~~~~~~~~~~~~ arch/arm/mm/mmu.c:165:1: note: in expansion of macro ‘early_param’ 165 | early_param("ecc", early_ecc); | ^~~~~~~~~~~ include/linux/init.h:241:33: warning: ‘__setup_early_nowrite’ defined but not used [-Wunused-variable] 241 | static struct obs_kernel_param __setup_##unique_id \ | ^~~~~~~~ include/linux/init.h:252:2: note: in expansion of macro ‘__setup_param’ 252 | __setup_param(str, fn, fn, 1) | ^~~~~~~~~~~~~ arch/arm/mm/mmu.c:154:1: note: in expansion of macro ‘early_param’ 154 | early_param("nowb", early_nowrite); | ^~~~~~~~~~~ include/linux/init.h:241:33: warning: ‘__setup_early_nocache’ defined but not used [-Wunused-variable] 241 | static struct obs_kernel_param __setup_##unique_id \ | ^~~~~~~~ include/linux/init.h:252:2: note: in expansion of macro ‘__setup_param’ 252 | __setup_param(str, fn, fn, 1) | ^~~~~~~~~~~~~ arch/arm/mm/mmu.c:145:1: note: in expansion of macro ‘early_param’ 145 | early_param("nocache", early_nocache); | ^~~~~~~~~~~ include/linux/init.h:241:33: warning: ‘__setup_early_cachepolicy’ defined but not used [-Wunused-variable] 241 | static struct obs_kernel_param __setup_##unique_id \ | ^~~~~~~~ include/linux/init.h:252:2: note: in expansion of macro ‘__setup_param’ 252 | __setup_param(str, fn, fn, 1) | ^~~~~~~~~~~~~ arch/arm/mm/mmu.c:136:1: note: in expansion of macro ‘early_param’ 136 | early_param("cachepolicy", early_cachepolicy); | ^~~~~~~~~~~ AS arch/arm/kernel/head.o LD arch/arm/kernel/built-in.o AS arch/arm/mm/cache-v7.o AS arch/arm/mm/tlb-v7.o AS arch/arm/mm/proc-v7.o LD arch/arm/mm/built-in.o AS arch/arm/lib/copy_page.o AS arch/arm/lib/csumpartialcopyuser.o AR arch/arm/lib/lib.a LD vmlinux.o MODPOST vmlinux.o GEN .version CHK include/generated/compile.h UPD include/generated/compile.h CC init/version.o In file included from include/linux/kernel.h:20, from include/linux/cache.h:4, from include/linux/time.h:7, from include/linux/stat.h:60, from include/linux/module.h:10, from init/version.c:10: include/linux/log2.h:22:1: warning: ignoring attribute ‘noreturn’ because it conflicts with attribute ‘const’ [-Wattributes] 22 | int ____ilog2_NaN(void); | ^~~ LD init/built-in.o LD .tmp_vmlinux1 KSYM .tmp_kallsyms1.S AS .tmp_kallsyms1.o LD .tmp_vmlinux2 KSYM .tmp_kallsyms2.S AS .tmp_kallsyms2.o LD vmlinux SYSMAP System.map SYSMAP .tmp_System.map OBJCOPY arch/arm/boot/Image Kernel: arch/arm/boot/Image is ready AS arch/arm/boot/compressed/head.o XZKERN arch/arm/boot/compressed/piggy.xzkern CC arch/arm/boot/compressed/misc.o CC arch/arm/boot/compressed/decompress.o CC arch/arm/boot/compressed/string.o In file included from include/linux/kernel.h:20, from arch/arm/boot/compressed/../../../../lib/xz/xz_private.h:15, from arch/arm/boot/compressed/../../../../lib/decompress_unxz.c:145, from arch/arm/boot/compressed/decompress.c:50: include/linux/log2.h:22:1: warning: ignoring attribute ‘noreturn’ because it conflicts with attribute ‘const’ [-Wattributes] 22 | int ____ilog2_NaN(void); | ^~~ SHIPPED arch/arm/boot/compressed/lib1funcs.S SHIPPED arch/arm/boot/compressed/ashldi3.S AS arch/arm/boot/compressed/lib1funcs.o AS arch/arm/boot/compressed/ashldi3.o AS arch/arm/boot/compressed/piggy.xzkern.o LD arch/arm/boot/compressed/vmlinux OBJCOPY arch/arm/boot/zImage Kernel: arch/arm/boot/zImage is ready UIMAGE arch/arm/boot/uImage Image Name: Linux-3.4.113-custom1 Created: Sun Mar 28 20:27:03 2021 Image Type: ARM Linux Kernel Image (uncompressed) Data Size: 1869496 Bytes = 1825.68 KiB = 1.78 MiB Load Address: 40008000 Entry Point: 40008000 Image arch/arm/boot/uImage is ready ----------------------------------------------------------------------------- -- I still can't boot the kernel on the platform. I believe its because there were lots of warning like above (unused const variables etc) and might have removed some other code/functions OR macros? So please suggest what I can do for compiling working kernel-3.4 with gcc-9. Thanks in advance, -- Fawad Lateef _______________________________________________ Kernelnewbies mailing list Kernelnewbies@xxxxxxxxxxxxxxxxx https://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies