* ld:arch/x86/kernel/vmlinux.lds:678: parse error
@ 2009-08-03 12:04 Jean Delvare
2009-08-03 15:31 ` H. Peter Anvin
0 siblings, 1 reply; 3+ messages in thread
From: Jean Delvare @ 2009-08-03 12:04 UTC (permalink / raw)
To: Sam Ravnborg; +Cc: linux-kbuild
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?
Thanks,
--
Jean Delvare
^ permalink raw reply [flat|nested] 3+ messages in thread* Re: ld:arch/x86/kernel/vmlinux.lds:678: parse error 2009-08-03 12:04 ld:arch/x86/kernel/vmlinux.lds:678: parse error Jean Delvare @ 2009-08-03 15:31 ` H. Peter Anvin 2009-08-03 19:32 ` Jean Delvare 0 siblings, 1 reply; 3+ messages in thread From: H. Peter Anvin @ 2009-08-03 15:31 UTC (permalink / raw) To: Jean Delvare; +Cc: Sam Ravnborg, linux-kbuild, the arch/x86 maintainers [-- Attachment #1: Type: text/plain, Size: 954 bytes --] 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. [-- Attachment #2: diff --] [-- Type: text/plain, Size: 1089 bytes --] 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 - ^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: ld:arch/x86/kernel/vmlinux.lds:678: parse error 2009-08-03 15:31 ` H. Peter Anvin @ 2009-08-03 19:32 ` Jean Delvare 0 siblings, 0 replies; 3+ messages in thread From: Jean Delvare @ 2009-08-03 19:32 UTC (permalink / raw) To: H. Peter Anvin; +Cc: Sam Ravnborg, linux-kbuild, the arch/x86 maintainers Hi Peter, Thanks for your fast answer. On Mon, 03 Aug 2009 08:31:37 -0700, H. Peter Anvin wrote: > 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? You patch doesn't, because you forgot to fix the one ASSERT() call that failed for me ;) but the updated version below does indeed fix the build for me: Index: linux-2.6.31-rc5/arch/x86/kernel/vmlinux.lds.S =================================================================== --- linux-2.6.31-rc5.orig/arch/x86/kernel/vmlinux.lds.S 2009-08-01 22:24:12.000000000 +0200 +++ linux-2.6.31-rc5/arch/x86/kernel/vmlinux.lds.S 2009-08-03 21:22:31.000000000 +0200 @@ -393,8 +393,8 @@ #ifdef CONFIG_X86_32 -ASSERT((_end - LOAD_OFFSET <= KERNEL_IMAGE_SIZE), - "kernel image bigger than KERNEL_IMAGE_SIZE") +. = ASSERT((_end - LOAD_OFFSET <= KERNEL_IMAGE_SIZE), + "kernel image bigger than KERNEL_IMAGE_SIZE"); #else /* * Per-cpu symbols which need to be offset from __per_cpu_load @@ -407,12 +407,12 @@ /* * 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,7 @@ #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 So I guess you can send this to Linus. Thanks! -- Jean Delvare ^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2009-08-03 19:32 UTC | newest] Thread overview: 3+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2009-08-03 12:04 ld:arch/x86/kernel/vmlinux.lds:678: parse error Jean Delvare 2009-08-03 15:31 ` H. Peter Anvin 2009-08-03 19:32 ` Jean Delvare
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox