diff options
| author | Ingo Molnar <mingo@elte.hu> | 2009-10-16 01:18:46 -0400 |
|---|---|---|
| committer | Ingo Molnar <mingo@elte.hu> | 2009-10-16 01:18:46 -0400 |
| commit | a5912f6b3e20c137172460e6d4dd180866c00963 (patch) | |
| tree | ebe80998af843f31d5042845c542303ea96cecbe | |
| parent | 012abeea669ea49636cf952d13298bb68654146a (diff) | |
x86: Document linker script ASSERT() quirk
Older binutils breaks if ASSERT() is used without a sink
for the output.
For example 2.14.90.0.6 is known to be broken, the link
fails with:
LD .tmp_vmlinux1
ld:arch/x86/kernel/vmlinux.lds:678: parse error
Document this quirk in all three files that use it.
See: http://marc.info/?l=linux-kbuild&m=124930110427870&w=2
See[2]: d2ba8b2 ("x86: Fix assert syntax in vmlinux.lds.S")
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Roland McGrath <roland@redhat.com>
Cc: "H. Peter Anvin" <hpa@zytor.com>
Cc: Sam Ravnborg <sam@ravnborg.org>
LKML-Reference: <4AD6523D.5030909@zytor.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
| -rw-r--r-- | arch/x86/boot/setup.ld | 3 | ||||
| -rw-r--r-- | arch/x86/kernel/acpi/realmode/wakeup.lds.S | 3 | ||||
| -rw-r--r-- | arch/x86/kernel/vmlinux.lds.S | 3 |
3 files changed, 9 insertions, 0 deletions
diff --git a/arch/x86/boot/setup.ld b/arch/x86/boot/setup.ld index 0f6ec455a2b1..03c0683636b6 100644 --- a/arch/x86/boot/setup.ld +++ b/arch/x86/boot/setup.ld | |||
| @@ -53,6 +53,9 @@ SECTIONS | |||
| 53 | 53 | ||
| 54 | /DISCARD/ : { *(.note*) } | 54 | /DISCARD/ : { *(.note*) } |
| 55 | 55 | ||
| 56 | /* | ||
| 57 | * The ASSERT() sink to . is intentional, for binutils 2.14 compatibility: | ||
| 58 | */ | ||
| 56 | . = ASSERT(_end <= 0x8000, "Setup too big!"); | 59 | . = ASSERT(_end <= 0x8000, "Setup too big!"); |
| 57 | . = ASSERT(hdr == 0x1f1, "The setup header has the wrong offset!"); | 60 | . = ASSERT(hdr == 0x1f1, "The setup header has the wrong offset!"); |
| 58 | /* Necessary for the very-old-loader check to work... */ | 61 | /* Necessary for the very-old-loader check to work... */ |
diff --git a/arch/x86/kernel/acpi/realmode/wakeup.lds.S b/arch/x86/kernel/acpi/realmode/wakeup.lds.S index 7da00b799cda..060fff8f5c5b 100644 --- a/arch/x86/kernel/acpi/realmode/wakeup.lds.S +++ b/arch/x86/kernel/acpi/realmode/wakeup.lds.S | |||
| @@ -57,5 +57,8 @@ SECTIONS | |||
| 57 | *(.note*) | 57 | *(.note*) |
| 58 | } | 58 | } |
| 59 | 59 | ||
| 60 | /* | ||
| 61 | * The ASSERT() sink to . is intentional, for binutils 2.14 compatibility: | ||
| 62 | */ | ||
| 60 | . = ASSERT(_end <= WAKEUP_SIZE, "Wakeup too big!"); | 63 | . = ASSERT(_end <= WAKEUP_SIZE, "Wakeup too big!"); |
| 61 | } | 64 | } |
diff --git a/arch/x86/kernel/vmlinux.lds.S b/arch/x86/kernel/vmlinux.lds.S index 92929fb3f9fa..3c68fe2d46cf 100644 --- a/arch/x86/kernel/vmlinux.lds.S +++ b/arch/x86/kernel/vmlinux.lds.S | |||
| @@ -305,6 +305,9 @@ SECTIONS | |||
| 305 | 305 | ||
| 306 | 306 | ||
| 307 | #ifdef CONFIG_X86_32 | 307 | #ifdef CONFIG_X86_32 |
| 308 | /* | ||
| 309 | * The ASSERT() sink to . is intentional, for binutils 2.14 compatibility: | ||
| 310 | */ | ||
| 308 | . = ASSERT((_end - LOAD_OFFSET <= KERNEL_IMAGE_SIZE), | 311 | . = ASSERT((_end - LOAD_OFFSET <= KERNEL_IMAGE_SIZE), |
| 309 | "kernel image bigger than KERNEL_IMAGE_SIZE"); | 312 | "kernel image bigger than KERNEL_IMAGE_SIZE"); |
| 310 | #else | 313 | #else |
