Commit 86b1e8dd authored by Shaohua Li's avatar Shaohua Li Committed by Ingo Molnar

x86: Make relocatable kernel work with new binutils

The CONFIG_RELOCATABLE=y option is broken with new binutils, which will make
boot panic.

According to Lu Hongjiu, the affected binutils are from 2.20.51.0.12 to
2.21.51.0.3, which are release since Oct 22 this year. At least ubuntu 10.10 is
using such binutils. See:

    http://sourceware.org/bugzilla/show_bug.cgi?id=12327

The reason of the boot panic is that we have 'jiffies = jiffies_64;' in
vmlinux.lds.S. The jiffies isn't in any section. In kernel build, there is
warning saying jiffies is an absolute address and can't be relocatable. At
runtime, jiffies will have virtual address 0.

Signed-off-by: Shaohua Li<shaohua.li@intel.com>
Cc: Lu Hongjiu<hongjiu.lu@intel.com>
Cc: Huang Ying <ying.huang@intel.com>
Cc: Sam Ravnborg <sam@ravnborg.org>
LKML-Reference: <1295312269.1949.725.camel@sli10-conroe>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
parent 76d1f7bf
...@@ -34,11 +34,9 @@ OUTPUT_FORMAT(CONFIG_OUTPUT_FORMAT, CONFIG_OUTPUT_FORMAT, CONFIG_OUTPUT_FORMAT) ...@@ -34,11 +34,9 @@ OUTPUT_FORMAT(CONFIG_OUTPUT_FORMAT, CONFIG_OUTPUT_FORMAT, CONFIG_OUTPUT_FORMAT)
#ifdef CONFIG_X86_32 #ifdef CONFIG_X86_32
OUTPUT_ARCH(i386) OUTPUT_ARCH(i386)
ENTRY(phys_startup_32) ENTRY(phys_startup_32)
jiffies = jiffies_64;
#else #else
OUTPUT_ARCH(i386:x86-64) OUTPUT_ARCH(i386:x86-64)
ENTRY(phys_startup_64) ENTRY(phys_startup_64)
jiffies_64 = jiffies;
#endif #endif
#if defined(CONFIG_X86_64) && defined(CONFIG_DEBUG_RODATA) #if defined(CONFIG_X86_64) && defined(CONFIG_DEBUG_RODATA)
...@@ -142,6 +140,15 @@ SECTIONS ...@@ -142,6 +140,15 @@ SECTIONS
CACHELINE_ALIGNED_DATA(L1_CACHE_BYTES) CACHELINE_ALIGNED_DATA(L1_CACHE_BYTES)
DATA_DATA DATA_DATA
/*
* Workaround a binutils (2.20.51.0.12 to 2.21.51.0.3) bug.
* This makes jiffies relocatable in such binutils
*/
#ifdef CONFIG_X86_32
jiffies = jiffies_64;
#else
jiffies_64 = jiffies;
#endif
CONSTRUCTORS CONSTRUCTORS
/* rarely changed data like cpu maps */ /* rarely changed data like cpu maps */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment