1/* 2 * AVR32 linker script for the Linux kernel 3 * 4 * Copyright (C) 2004-2006 Atmel Corporation 5 * 6 * This program is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License version 2 as 8 * published by the Free Software Foundation. 9 */ 10#define LOAD_OFFSET 0x00000000 11#include <asm-generic/vmlinux.lds.h> 12 13OUTPUT_FORMAT("elf32-avr32", "elf32-avr32", "elf32-avr32") 14OUTPUT_ARCH(avr32) 15ENTRY(_start) 16 17/* Big endian */ 18jiffies = jiffies_64 + 4; 19 20SECTIONS 21{ 22 . = CONFIG_ENTRY_ADDRESS; 23 .init : AT(ADDR(.init) - LOAD_OFFSET) { 24 _stext = .; 25 __init_begin = .; 26 _sinittext = .; 27 *(.text.reset) 28 *(.init.text) 29 /* 30 * .exit.text is discarded at runtime, not 31 * link time, to deal with references from 32 * __bug_table 33 */ 34 *(.exit.text) 35 _einittext = .; 36 . = ALIGN(4); 37 __tagtable_begin = .; 38 *(.taglist.init) 39 __tagtable_end = .; 40 *(.init.data) 41 . = ALIGN(16); 42 __setup_start = .; 43 *(.init.setup) 44 __setup_end = .; 45 . = ALIGN(4); 46 __initcall_start = .; 47 INITCALLS 48 __initcall_end = .; 49 __con_initcall_start = .; 50 *(.con_initcall.init) 51 __con_initcall_end = .; 52 __security_initcall_start = .; 53 *(.security_initcall.init) 54 __security_initcall_end = .; 55#ifdef CONFIG_BLK_DEV_INITRD 56 . = ALIGN(32); 57 __initramfs_start = .; 58 *(.init.ramfs) 59 __initramfs_end = .; 60#endif 61 . = ALIGN(4096); 62 __init_end = .; 63 } 64 65 . = ALIGN(8192); 66 .text : AT(ADDR(.text) - LOAD_OFFSET) { 67 _evba = .; 68 _text = .; 69 *(.ex.text) 70 . = 0x50; 71 *(.tlbx.ex.text) 72 . = 0x60; 73 *(.tlbr.ex.text) 74 . = 0x70; 75 *(.tlbw.ex.text) 76 . = 0x100; 77 *(.scall.text) 78 *(.irq.text) 79 TEXT_TEXT 80 SCHED_TEXT 81 LOCK_TEXT 82 KPROBES_TEXT 83 *(.fixup) 84 *(.gnu.warning) 85 _etext = .; 86 } = 0xd703d703 87 88 . = ALIGN(4); 89 __ex_table : AT(ADDR(__ex_table) - LOAD_OFFSET) { 90 __start___ex_table = .; 91 *(__ex_table) 92 __stop___ex_table = .; 93 } 94 95 BUG_TABLE 96 97 RODATA 98 99 . = ALIGN(8192); 100 101 .data : AT(ADDR(.data) - LOAD_OFFSET) { 102 _data = .; 103 _sdata = .; 104 /* 105 * First, the init task union, aligned to an 8K boundary. 106 */ 107 *(.data.init_task) 108 109 /* Then, the cacheline aligned data */ 110 . = ALIGN(32); 111 *(.data.cacheline_aligned) 112 113 /* And the rest... */ 114 *(.data.rel*) 115 DATA_DATA 116 CONSTRUCTORS 117 118 _edata = .; 119 } 120 121 122 . = ALIGN(8); 123 .bss : AT(ADDR(.bss) - LOAD_OFFSET) { 124 __bss_start = .; 125 *(.bss) 126 *(COMMON) 127 . = ALIGN(8); 128 __bss_stop = .; 129 _end = .; 130 } 131 132 /* When something in the kernel is NOT compiled as a module, the module 133 * cleanup code and data are put into these segments. Both can then be 134 * thrown away, as cleanup code is never called unless it's a module. 135 */ 136 /DISCARD/ : { 137 *(.exit.data) 138 *(.exitcall.exit) 139 } 140 141 DWARF_DEBUG 142} 143