Merge commit 'v2.6.29-rc4' into perfcounters/core
[safe/jmp/linux-2.6] / arch / arm / kernel / vmlinux.lds.S
index 9a47770..85598f7 100644 (file)
@@ -4,7 +4,6 @@
  */
 
 #include <asm-generic/vmlinux.lds.h>
-#include <linux/config.h>
 #include <asm/thread_info.h>
 #include <asm/memory.h>
        
@@ -17,20 +16,22 @@ jiffies = jiffies_64;
 jiffies = jiffies_64 + 4;
 #endif
 
+SECTIONS
+{
 #ifdef CONFIG_XIP_KERNEL
-#define TEXTADDR  XIP_VIRT_ADDR(CONFIG_XIP_PHYS_ADDR)
+       . = XIP_VIRT_ADDR(CONFIG_XIP_PHYS_ADDR);
 #else
-#define TEXTADDR  KERNEL_RAM_ADDR
+       . = PAGE_OFFSET + TEXT_OFFSET;
 #endif
+       .text.head : {
+               _stext = .;
+               _sinittext = .;
+               *(.text.head)
+       }
 
-SECTIONS
-{
-       . = TEXTADDR;
        .init : {                       /* Init code and data           */
-               _stext = .;
-                       _sinittext = .;
-                       *(.init.text)
-                       _einittext = .;
+                       INIT_TEXT
+               _einittext = .;
                __proc_info_begin = .;
                        *(.proc.info.init)
                __proc_info_end = .;
@@ -48,13 +49,7 @@ SECTIONS
                        *(.early_param.init)
                __early_end = .;
                __initcall_start = .;
-                       *(.initcall1.init)
-                       *(.initcall2.init)
-                       *(.initcall3.init)
-                       *(.initcall4.init)
-                       *(.initcall5.init)
-                       *(.initcall6.init)
-                       *(.initcall7.init)
+                       INITCALLS
                __initcall_end = .;
                __con_initcall_start = .;
                        *(.con_initcall.init)
@@ -62,34 +57,48 @@ SECTIONS
                __security_initcall_start = .;
                        *(.security_initcall.init)
                __security_initcall_end = .;
+#ifdef CONFIG_BLK_DEV_INITRD
                . = ALIGN(32);
                __initramfs_start = .;
                        usr/built-in.o(.init.ramfs)
                __initramfs_end = .;
-               . = ALIGN(64);
+#endif
+               . = ALIGN(4096);
                __per_cpu_start = .;
+                       *(.data.percpu.page_aligned)
                        *(.data.percpu)
+                       *(.data.percpu.shared_aligned)
                __per_cpu_end = .;
 #ifndef CONFIG_XIP_KERNEL
                __init_begin = _stext;
-               *(.init.data)
+               INIT_DATA
                . = ALIGN(4096);
                __init_end = .;
 #endif
        }
 
        /DISCARD/ : {                   /* Exit code and data           */
-               *(.exit.text)
-               *(.exit.data)
+               EXIT_TEXT
+               EXIT_DATA
                *(.exitcall.exit)
+#ifndef CONFIG_MMU
+               *(.fixup)
+               *(__ex_table)
+#endif
        }
 
        .text : {                       /* Real text segment            */
                _text = .;              /* Text and read-only data      */
-                       *(.text)
+                       __exception_text_start = .;
+                       *(.exception.text)
+                       __exception_text_end = .;
+                       TEXT_TEXT
                        SCHED_TEXT
                        LOCK_TEXT
+                       KPROBES_TEXT
+#ifdef CONFIG_MMU
                        *(.fixup)
+#endif
                        *(.gnu.warning)
                        *(.rodata)
                        *(.rodata.*)
@@ -104,25 +113,25 @@ SECTIONS
 
 #ifdef CONFIG_XIP_KERNEL
        __data_loc = ALIGN(4);          /* location in binary */
-       . = KERNEL_RAM_ADDR;
+       . = PAGE_OFFSET + TEXT_OFFSET;
 #else
        . = ALIGN(THREAD_SIZE);
        __data_loc = .;
 #endif
 
        .data : AT(__data_loc) {
-               __data_start = .;       /* address in memory */
+               _data = .;              /* address in memory */
 
                /*
                 * first, the init task union, aligned
                 * to an 8192 byte boundary.
                 */
-               *(.init.task)
+               *(.data.init_task)
 
 #ifdef CONFIG_XIP_KERNEL
                . = ALIGN(4096);
                __init_begin = .;
-               *(.init.data)
+               INIT_DATA
                . = ALIGN(4096);
                __init_end = .;
 #endif
@@ -144,17 +153,20 @@ SECTIONS
                 */
                . = ALIGN(32);
                __start___ex_table = .;
+#ifdef CONFIG_MMU
                *(__ex_table)
+#endif
                __stop___ex_table = .;
 
                /*
                 * and the usual data section
                 */
-               *(.data)
+               DATA_DATA
                CONSTRUCTORS
 
                _edata = .;
        }
+       _edata_loc = __data_loc + SIZEOF(.data);
 
        .bss : {
                __bss_start = .;        /* BSS                          */