diff options
author | Mike Frysinger <michael.frysinger@analog.com> | 2007-06-11 17:27:05 +0800 |
---|---|---|
committer | Bryan Wu <bryan.wu@analog.com> | 2007-06-11 17:27:05 +0800 |
commit | de6a9520d4c799ce2079c59457b06251367e67b6 (patch) | |
tree | a7725822967ea0a946eb1f75745832664747b210 | |
parent | 43a3188ea348c41a197a754164ff96cc48124d85 (diff) |
Blackfin arch: redo our linker script a bit
- we can start taking advantages of defines in asm-generic/vmlinux.lds.h
- move our L1 relocated sections into init so it gets freed after relocation
Signed-off-by: Mike Frysinger <michael.frysinger@analog.com>
Signed-off-by: Bryan Wu <bryan.wu@analog.com>
-rw-r--r-- | arch/blackfin/kernel/vmlinux.lds.S | 167 |
1 files changed, 56 insertions, 111 deletions
diff --git a/arch/blackfin/kernel/vmlinux.lds.S b/arch/blackfin/kernel/vmlinux.lds.S index 19b853af4d7..1ef1e36b395 100644 --- a/arch/blackfin/kernel/vmlinux.lds.S +++ b/arch/blackfin/kernel/vmlinux.lds.S @@ -7,7 +7,7 @@ * Description: Master linker script for blackfin architecture * * Modified: - * Copyright 2004-2006 Analog Devices Inc. + * Copyright 2004-2007 Analog Devices Inc. * * Bugs: Enter bugs at http://blackfin.uclinux.org/ * @@ -32,98 +32,54 @@ #include <asm-generic/vmlinux.lds.h> #include <asm/mem_map.h> - OUTPUT_FORMAT("elf32-bfin") ENTRY(__start) _jiffies = _jiffies_64; -MEMORY -{ - ram : ORIGIN = CONFIG_BOOT_LOAD, LENGTH = (CONFIG_MEM_SIZE * 1024 * 1024) - (CONFIG_BOOT_LOAD) - l1_data_a : ORIGIN = L1_DATA_A_START, LENGTH = L1_DATA_A_LENGTH - l1_data_b : ORIGIN = L1_DATA_B_START, LENGTH = L1_DATA_B_LENGTH - l1_code : ORIGIN = L1_CODE_START, LENGTH = L1_CODE_LENGTH - l1_scratch : ORIGIN = L1_SCRATCH_START, LENGTH = L1_SCRATCH_LENGTH -} - SECTIONS { . = CONFIG_BOOT_LOAD; - .text : { - __text = .; - _text = .; - __stext = .; + __text = .; + _text = .; + __stext = .; TEXT_TEXT SCHED_TEXT + LOCK_TEXT *(.text.lock) + *(.fixup) + . = ALIGN(16); - ___start___ex_table = .; + ___start___ex_table = .; *(__ex_table) - ___stop___ex_table = .; - - *($code) - *(.rodata) - *(.rodata.*) - *(__vermagic) /* Kernel version magic */ - *(.rodata1) - *(.fixup) - *(.spinlock.text) + ___stop___ex_table = .; - /* Kernel symbol table: Normal symbols */ . = ALIGN(4); - ___start___ksymtab = .; - *(__ksymtab) - ___stop___ksymtab = .; - - /* Kernel symbol table: GPL-only symbols */ - ___start___ksymtab_gpl = .; - *(__ksymtab_gpl) - ___stop___ksymtab_gpl = .; - - /* Kernel symbol table: Normal unused symbols */ \ - ___start___ksymtab_unused = .; - *(__ksymtab_unused) - ___stop___ksymtab_unused = .; - - /* Kernel symbol table: GPL-only unused symbols */ - ___start___ksymtab_unused_gpl = .; - *(__ksymtab_unused_gpl) - ___stop___ksymtab_unused_gpl = .; - - - /* Kernel symbol table: GPL-future symbols */ - ___start___ksymtab_gpl_future = .; - *(__ksymtab_gpl_future) - ___stop___ksymtab_gpl_future = .; - - /* Kernel symbol table: Normal symbols */ - ___start___kcrctab = .; - *(__kcrctab) - ___stop___kcrctab = .; - - /* Kernel symbol table: GPL-only symbols */ - ___start___kcrctab_gpl = .; - *(__kcrctab_gpl) - ___stop___kcrctab_gpl = .; - - /* Kernel symbol table: GPL-future symbols */ - ___start___kcrctab_gpl_future = .; - *(__kcrctab_gpl_future) - ___stop___kcrctab_gpl_future = .; - - /* Kernel symbol table: strings */ - *(__ksymtab_strings) - - . = ALIGN(4); __etext = .; - } > ram + } + + RODATA + + .data : + { + __sdata = .; + . = ALIGN(0x2000); + *(.data.init_task) + DATA_DATA + CONSTRUCTORS + + . = ALIGN(32); + *(.data.cacheline_aligned) + + . = ALIGN(0x2000); + __edata = .; + } + ___init_begin = .; .init : { . = ALIGN(4096); - ___init_begin = .; __sinittext = .; *(.init.text) __einittext = .; @@ -149,39 +105,39 @@ SECTIONS *(.init.ramfs) ___initramfs_end = .; . = ALIGN(4); - ___init_end = .; - } > ram + } - __l1_lma_start = .; + __l1_lma_start = .; - .text_l1 : + .text_l1 L1_CODE_START : AT(LOADADDR(.init) + SIZEOF(.init)) { . = ALIGN(4); - __stext_l1 = .; + __stext_l1 = .; *(.l1.text) . = ALIGN(4); - __etext_l1 = .; - } > l1_code AT > ram + __etext_l1 = .; + } - .data_l1 : + .data_l1 L1_DATA_A_START : AT(LOADADDR(.text_l1) + SIZEOF(.text_l1)) { . = ALIGN(4); - __sdata_l1 = .; + __sdata_l1 = .; *(.l1.data) - __edata_l1 = .; + __edata_l1 = .; . = ALIGN(4); - __sbss_l1 = .; + __sbss_l1 = .; *(.l1.bss) . = ALIGN(32); *(.data_l1.cacheline_aligned) . = ALIGN(4); - __ebss_l1 = .; - } > l1_data_a AT > ram - .data_b_l1 : + __ebss_l1 = .; + } + + .data_b_l1 L1_DATA_B_START : AT(LOADADDR(.data_l1) + SIZEOF(.data_l1)) { . = ALIGN(4); __sdata_b_l1 = .; @@ -194,36 +150,25 @@ SECTIONS . = ALIGN(4); __ebss_b_l1 = .; - } > l1_data_b AT > ram + } - .data : - { - __sdata = .; - . = ALIGN(0x2000); - *(.data.init_task) - DATA_DATA + ___init_end = LOADADDR(.data_b_l1) + SIZEOF(.data_b_l1); - . = ALIGN(32); - *(.data.cacheline_aligned) - - . = ALIGN(0x2000); - __edata = .; - } > ram - - /DISCARD/ : { /* Exit code and data*/ - *(.exit.text) - *(.exit.data) - *(.exitcall.exit) - } > ram - - .bss : + .bss LOADADDR(.data_b_l1) + SIZEOF(.data_b_l1) : { . = ALIGN(4); - ___bss_start = .; + ___bss_start = .; *(.bss) *(COMMON) . = ALIGN(4); - ___bss_stop = .; - __end = . ; - } > ram + ___bss_stop = .; + __end = .; + } + + /DISCARD/ : + { + *(.exit.text) + *(.exit.data) + *(.exitcall.exit) + } } |