1/* ld script to make the Linux/CRIS kernel 2 * Authors: Bjorn Wesen (bjornw@axis.com) 3 * 4 * It is VERY DANGEROUS to fiddle around with the symbols in this 5 * script. It is for example quite vital that all generated sections 6 * that are used are actually named here, otherwise the linker will 7 * put them at the end, where the init stuff is which is FREED after 8 * the kernel has booted. 9 */ 10 11#include <linux/autoconf.h> 12#include <asm-generic/vmlinux.lds.h> 13#include <asm/page.h> 14 15#ifdef CONFIG_ETRAX_VMEM_SIZE 16#define __CONFIG_ETRAX_VMEM_SIZE CONFIG_ETRAX_VMEM_SIZE 17#else 18#define __CONFIG_ETRAX_VMEM_SIZE 0 19#endif 20 21 22jiffies = jiffies_64; 23SECTIONS 24{ 25 . = DRAM_VIRTUAL_BASE; 26 dram_start = .; 27#ifdef CONFIG_ETRAX_ARCH_V10 28 ibr_start = .; 29#else 30 ebp_start = .; 31 /* The boot section is only necessary until the VCS top */ 32 /* level testbench includes both flash and DRAM. */ 33 .boot : { *(.boot) } 34#endif 35 36 /* see head.S and pages reserved at the start */ 37 . = DRAM_VIRTUAL_BASE + 0x4000; 38 39 _text = .; /* Text and read-only data. */ 40 text_start = .; /* Lots of aliases. */ 41 _stext = .; 42 __stext = .; 43 .text : { 44 TEXT_TEXT 45 SCHED_TEXT 46 LOCK_TEXT 47 *(.fixup) 48 *(.text.__*) 49 } 50 51 _etext = . ; /* End of text section. */ 52 __etext = .; 53 54 EXCEPTION_TABLE(4) 55 56 RODATA 57 58 . = ALIGN (4); 59 ___data_start = . ; 60 __Sdata = . ; 61 .data : { /* Data */ 62 DATA_DATA 63 } 64 __edata = . ; /* End of data section. */ 65 _edata = . ; 66 67 INIT_TASK_DATA_SECTION(PAGE_SIZE) 68 69 . = ALIGN(PAGE_SIZE); /* Init code and data. */ 70 __init_begin = .; 71 INIT_TEXT_SECTION(PAGE_SIZE) 72 .init.data : { INIT_DATA } 73 .init.setup : { INIT_SETUP(16) } 74#ifdef CONFIG_ETRAX_ARCH_V32 75 __start___param = .; 76 __param : { *(__param) } 77 __stop___param = .; 78#endif 79 .initcall.init : { 80 INIT_CALLS 81 } 82 83 .con_initcall.init : { 84 CON_INITCALL 85 } 86 SECURITY_INIT 87 88#ifdef CONFIG_ETRAX_ARCH_V10 89#ifdef CONFIG_BLK_DEV_INITRD 90 .init.ramfs : { 91 __initramfs_start = .; 92 *(.init.ramfs) 93 __initramfs_end = .; 94 } 95#endif 96#endif 97 __vmlinux_end = .; /* Last address of the physical file. */ 98#ifdef CONFIG_ETRAX_ARCH_V32 99 PERCPU(PAGE_SIZE) 100 101 .init.ramfs : { 102 INIT_RAM_FS 103 } 104#endif 105 106 /* 107 * We fill to the next page, so we can discard all init 108 * pages without needing to consider what payload might be 109 * appended to the kernel image. 110 */ 111 . = ALIGN(PAGE_SIZE); 112 113 __init_end = .; 114 115 __data_end = . ; /* Move to _edata ? */ 116 BSS_SECTION(0, 0, 0) 117 118 . = ALIGN (0x20); 119 _end = .; 120 __end = .; 121 122 dram_end = dram_start + (CONFIG_ETRAX_DRAM_SIZE - __CONFIG_ETRAX_VMEM_SIZE)*1024*1024; 123 124 DISCARDS 125} 126