diff mbox

ld:arch/x86/kernel/vmlinux.lds:678: parse error

Message ID 4A7702D9.5080101@zytor.com (mailing list archive)
State New, archived
Headers show

Commit Message

H. Peter Anvin Aug. 3, 2009, 3:31 p.m. UTC
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
diff mbox

Patch

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
-