1/* 2 * vmlinux.lds.S -- master linker script for m68knommu arch 3 * 4 * (C) Copyright 2002-2006, Greg Ungerer <gerg@snapgear.com> 5 * 6 * This linker script is equiped to build either ROM loaded or RAM 7 * run kernels. 8 */ 9 10#include <asm-generic/vmlinux.lds.h> 11 12#if defined(CONFIG_RAMKERNEL) 13#define RAM_START CONFIG_KERNELBASE 14#define RAM_LENGTH (CONFIG_RAMBASE + CONFIG_RAMSIZE - CONFIG_KERNELBASE) 15#define TEXT ram 16#define DATA ram 17#define INIT ram 18#define BSS ram 19#endif 20#if defined(CONFIG_ROMKERNEL) || defined(CONFIG_HIMEMKERNEL) 21#define RAM_START CONFIG_RAMBASE 22#define RAM_LENGTH CONFIG_RAMSIZE 23#define ROMVEC_START CONFIG_ROMVEC 24#define ROMVEC_LENGTH CONFIG_ROMVECSIZE 25#define ROM_START CONFIG_ROMSTART 26#define ROM_LENGTH CONFIG_ROMSIZE 27#define TEXT rom 28#define DATA ram 29#define INIT ram 30#define BSS ram 31#endif 32 33#ifndef DATA_ADDR 34#define DATA_ADDR 35#endif 36 37 38OUTPUT_ARCH(m68k) 39ENTRY(_start) 40 41MEMORY { 42 ram : ORIGIN = RAM_START, LENGTH = RAM_LENGTH 43#ifdef ROM_START 44 romvec : ORIGIN = ROMVEC_START, LENGTH = ROMVEC_LENGTH 45 rom : ORIGIN = ROM_START, LENGTH = ROM_LENGTH 46#endif 47} 48 49jiffies = jiffies_64 + 4; 50 51SECTIONS { 52 53#ifdef ROMVEC_START 54 . = ROMVEC_START ; 55 .romvec : { 56 __rom_start = . ; 57 _romvec = .; 58 *(.data.initvect) 59 } > romvec 60#endif 61 62 .text : { 63 _text = .; 64 _stext = . ; 65 HEAD_TEXT 66 TEXT_TEXT 67 SCHED_TEXT 68 LOCK_TEXT 69 *(.text.lock) 70 71 . = ALIGN(16); /* Exception table */ 72 __start___ex_table = .; 73 *(__ex_table) 74 __stop___ex_table = .; 75 76 *(.rodata) *(.rodata.*) 77 *(__vermagic) /* Kernel version magic */ 78 *(__markers_strings) 79 *(.rodata1) 80 *(.rodata.str1.1) 81 82 /* Kernel symbol table: Normal symbols */ 83 . = ALIGN(4); 84 __start___ksymtab = .; 85 *(__ksymtab) 86 __stop___ksymtab = .; 87 88 /* Kernel symbol table: GPL-only symbols */ 89 __start___ksymtab_gpl = .; 90 *(__ksymtab_gpl) 91 __stop___ksymtab_gpl = .; 92 93 /* Kernel symbol table: Normal unused symbols */ 94 __start___ksymtab_unused = .; 95 *(__ksymtab_unused) 96 __stop___ksymtab_unused = .; 97 98 /* Kernel symbol table: GPL-only unused symbols */ 99 __start___ksymtab_unused_gpl = .; 100 *(__ksymtab_unused_gpl) 101 __stop___ksymtab_unused_gpl = .; 102 103 /* Kernel symbol table: GPL-future symbols */ 104 __start___ksymtab_gpl_future = .; 105 *(__ksymtab_gpl_future) 106 __stop___ksymtab_gpl_future = .; 107 108 /* Kernel symbol table: Normal symbols */ 109 __start___kcrctab = .; 110 *(__kcrctab) 111 __stop___kcrctab = .; 112 113 /* Kernel symbol table: GPL-only symbols */ 114 __start___kcrctab_gpl = .; 115 *(__kcrctab_gpl) 116 __stop___kcrctab_gpl = .; 117 118 /* Kernel symbol table: Normal unused symbols */ 119 __start___kcrctab_unused = .; 120 *(__kcrctab_unused) 121 __stop___kcrctab_unused = .; 122 123 /* Kernel symbol table: GPL-only unused symbols */ 124 __start___kcrctab_unused_gpl = .; 125 *(__kcrctab_unused_gpl) 126 __stop___kcrctab_unused_gpl = .; 127 128 /* Kernel symbol table: GPL-future symbols */ 129 __start___kcrctab_gpl_future = .; 130 *(__kcrctab_gpl_future) 131 __stop___kcrctab_gpl_future = .; 132 133 /* Kernel symbol table: strings */ 134 *(__ksymtab_strings) 135 136 /* Built-in module parameters */ 137 . = ALIGN(4) ; 138 __start___param = .; 139 *(__param) 140 __stop___param = .; 141 142 . = ALIGN(4) ; 143 _etext = . ; 144 } > TEXT 145 146 .data DATA_ADDR : { 147 . = ALIGN(4); 148 _sdata = . ; 149 DATA_DATA 150 . = ALIGN(8192) ; 151 *(.data.init_task) 152 _edata = . ; 153 } > DATA 154 155 .init : { 156 . = ALIGN(4096); 157 __init_begin = .; 158 _sinittext = .; 159 INIT_TEXT 160 _einittext = .; 161 INIT_DATA 162 . = ALIGN(16); 163 __setup_start = .; 164 *(.init.setup) 165 __setup_end = .; 166 __initcall_start = .; 167 INITCALLS 168 __initcall_end = .; 169 __con_initcall_start = .; 170 *(.con_initcall.init) 171 __con_initcall_end = .; 172 __security_initcall_start = .; 173 *(.security_initcall.init) 174 __security_initcall_end = .; 175#ifdef CONFIG_BLK_DEV_INITRD 176 . = ALIGN(4); 177 __initramfs_start = .; 178 *(.init.ramfs) 179 __initramfs_end = .; 180#endif 181 . = ALIGN(4096); 182 __init_end = .; 183 } > INIT 184 185 /DISCARD/ : { 186 EXIT_TEXT 187 EXIT_DATA 188 *(.exitcall.exit) 189 } 190 191 .bss : { 192 . = ALIGN(4); 193 _sbss = . ; 194 *(.bss) 195 *(COMMON) 196 . = ALIGN(4) ; 197 _ebss = . ; 198 _end = . ; 199 } > BSS 200 201} 202 203