Blackfin arch: vmlinux.lds.S, break up our .init into separate sections
authorMike Frysinger <michael.frysinger@analog.com>
Mon, 27 Aug 2007 08:08:53 +0000 (16:08 +0800)
committerBryan Wu <bryan.wu@analog.com>
Mon, 27 Aug 2007 08:08:53 +0000 (16:08 +0800)
Break up our .init into separate section like all other ports do and
so that we dont mix text and data (causes disassembly headaches as
pointed out by Robin)

Cc: Robin Getz <robin.getz@analog.com>
Signed-off-by: Mike Frysinger <michael.frysinger@analog.com>
Signed-off-by: Bryan Wu <bryan.wu@analog.com>
arch/blackfin/kernel/vmlinux.lds.S

index e40b66ae1b79dee39543386be68914cd6ab13e95..cd1cea05f1a84f70f3d2eec46a4d56c8552d0e88 100644 (file)
@@ -46,11 +46,11 @@ SECTIONS
                __text = .;
                _text = .;
                __stext = .;
-               *(.text.*)
                TEXT_TEXT
                SCHED_TEXT
                LOCK_TEXT
-               *(.text.lock)
+               KPROBES_TEXT
+               *(.text.*)
                *(.fixup)
 
                . = ALIGN(16);
@@ -62,7 +62,7 @@ SECTIONS
                __etext = .;
        }
 
-       RODATA
+       RO_DATA(PAGE_SIZE)
 
        .data :
        {
@@ -73,51 +73,63 @@ SECTIONS
                __sdata = .;
                . = ALIGN(THREAD_SIZE);
                *(.data.init_task)
-               DATA_DATA
-               *(.data.*)
-               CONSTRUCTORS
 
                . = ALIGN(32);
                *(.data.cacheline_aligned)
 
+               DATA_DATA
+               *(.data.*)
+               CONSTRUCTORS
+
                . = ALIGN(THREAD_SIZE);
                __edata = .;
        }
 
        ___init_begin = .;
-       .init :
+
+       .init.text :
        {
                . = ALIGN(PAGE_SIZE);
                __sinittext = .;
                *(.init.text)
                __einittext = .;
+       }
+       .init.data :
+       {
+               . = ALIGN(16);
                *(.init.data)
+       }
+       .init.setup :
+       {
                . = ALIGN(16);
                ___setup_start = .;
                *(.init.setup)
                ___setup_end = .;
-               ___start___param = .;
-               *(__param)
-               ___stop___param = .;
+       }
+       .initcall.init :
+       {
                ___initcall_start = .;
                INITCALLS
                ___initcall_end = .;
+       }
+       .con_initcall.init :
+       {
                ___con_initcall_start = .;
                *(.con_initcall.init)
                ___con_initcall_end = .;
-               ___security_initcall_start = .;
-               *(.security_initcall.init)
-               ___security_initcall_end = .;
+       }
+       SECURITY_INIT
+       .init.ramfs :
+       {
                . = ALIGN(4);
                ___initramfs_start = .;
                *(.init.ramfs)
                ___initramfs_end = .;
-               . = ALIGN(4);
        }
 
        __l1_lma_start = .;
 
-       .text_l1 L1_CODE_START : AT(LOADADDR(.init) + SIZEOF(.init))
+       .text_l1 L1_CODE_START : AT(LOADADDR(.init.ramfs) + SIZEOF(.init.ramfs))
        {
                . = ALIGN(4);
                __stext_l1 = .;