On 08/03/2009 05:04 AM, Jean Delvare wrote: > Hi Sam, > > I am not able to build Linus' latest kernel on my oldest test system. I > get the following linking error at the end: > > LD .tmp_vmlinux1 > ld:arch/x86/kernel/vmlinux.lds:678: parse error > > Which is: > > ASSERT((_end - 0xC0000000 <= (512 * 1024 * 1024)), > "kernel image bigger than KERNEL_IMAGE_SIZE") > > Apparently this assertion is relatively new, as I was able to build > kernel 2.6.29 on the same system. The system has binutils 2.14.90.0.6, > which is more recent than what is listed in Documentation/Changes > (2.12). > > Any idea? > Old binutils doesn't accept the naked ASSERT(); there has to be a sink for the data; so one has to do crap like: __junk_symbol = ASSERT(...); or . = ASSERT(...); near the end. Does this patch fix it for you? -hpa -- H. Peter Anvin, Intel Open Source Technology Center I work for Intel. I don't speak on their behalf.
diff --git a/arch/x86/kernel/vmlinux.lds.S b/arch/x86/kernel/vmlinux.lds.S index 59f31d2..2eb6874 100644 --- a/arch/x86/kernel/vmlinux.lds.S +++ b/arch/x86/kernel/vmlinux.lds.S @@ -407,12 +407,12 @@ INIT_PER_CPU(irq_stack_union); /* * Build-time check on the image size: */ -ASSERT((_end - _text <= KERNEL_IMAGE_SIZE), - "kernel image bigger than KERNEL_IMAGE_SIZE") +. = ASSERT((_end - _text <= KERNEL_IMAGE_SIZE), + "kernel image bigger than KERNEL_IMAGE_SIZE"); #ifdef CONFIG_SMP -ASSERT((per_cpu__irq_stack_union == 0), - "irq_stack_union is not at start of per-cpu area"); +. = ASSERT((per_cpu__irq_stack_union == 0), + "irq_stack_union is not at start of per-cpu area"); #endif #endif /* CONFIG_X86_32 */ @@ -420,7 +420,6 @@ ASSERT((per_cpu__irq_stack_union == 0), #ifdef CONFIG_KEXEC #include <asm/kexec.h> -ASSERT(kexec_control_code_size <= KEXEC_CONTROL_CODE_MAX_SIZE, - "kexec control code size is too big") +. = ASSERT(kexec_control_code_size <= KEXEC_CONTROL_CODE_MAX_SIZE, + "kexec control code size is too big"); #endif -