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#include <asm/cache.h> 13#include <asm/thread_info.h> 14 15OUTPUT_FORMAT("elf32-avr32", "elf32-avr32", "elf32-avr32") 16OUTPUT_ARCH(avr32) 17ENTRY(_start) 18 19/* Big endian */ 20jiffies = jiffies_64 + 4; 21 22SECTIONS 23{ 24 . = CONFIG_ENTRY_ADDRESS; 25 .init : AT(ADDR(.init) - LOAD_OFFSET) { 26 _stext = .; 27 __init_begin = .; 28 _sinittext = .; 29 *(.text.reset) 30 INIT_TEXT 31 /* 32 * .exit.text is discarded at runtime, not 33 * link time, to deal with references from 34 * __bug_table 35 */ 36 EXIT_TEXT 37 _einittext = .; 38 . = ALIGN(4); 39 __tagtable_begin = .; 40 *(.taglist.init) 41 __tagtable_end = .; 42 INIT_DATA 43 . = ALIGN(16); 44 __setup_start = .; 45 *(.init.setup) 46 __setup_end = .; 47 . = ALIGN(4); 48 __initcall_start = .; 49 INITCALLS 50 __initcall_end = .; 51 __con_initcall_start = .; 52 *(.con_initcall.init) 53 __con_initcall_end = .; 54 __security_initcall_start = .; 55 *(.security_initcall.init) 56 __security_initcall_end = .; 57#ifdef CONFIG_BLK_DEV_INITRD 58 . = ALIGN(32); 59 __initramfs_start = .; 60 *(.init.ramfs) 61 __initramfs_end = .; 62#endif 63 . = ALIGN(PAGE_SIZE); 64 __init_end = .; 65 } 66 67 .text : AT(ADDR(.text) - LOAD_OFFSET) { 68 _evba = .; 69 _text = .; 70 *(.ex.text) 71 *(.irq.text) 72 KPROBES_TEXT 73 TEXT_TEXT 74 SCHED_TEXT 75 LOCK_TEXT 76 *(.fixup) 77 *(.gnu.warning) 78 _etext = .; 79 } = 0xd703d703 80 81 . = ALIGN(4); 82 __ex_table : AT(ADDR(__ex_table) - LOAD_OFFSET) { 83 __start___ex_table = .; 84 *(__ex_table) 85 __stop___ex_table = .; 86 } 87 88 RODATA 89 90 . = ALIGN(THREAD_SIZE); 91 92 .data : AT(ADDR(.data) - LOAD_OFFSET) { 93 _data = .; 94 _sdata = .; 95 /* 96 * First, the init task union, aligned to an 8K boundary. 97 */ 98 *(.data.init_task) 99 100 /* Then, the page-aligned data */ 101 . = ALIGN(PAGE_SIZE); 102 *(.data.page_aligned) 103 104 /* Then, the cacheline aligned data */ 105 . = ALIGN(L1_CACHE_BYTES); 106 *(.data.cacheline_aligned) 107 108 /* And the rest... */ 109 *(.data.rel*) 110 DATA_DATA 111 CONSTRUCTORS 112 113 _edata = .; 114 } 115 116 117 . = ALIGN(8); 118 .bss : AT(ADDR(.bss) - LOAD_OFFSET) { 119 __bss_start = .; 120 *(.bss) 121 *(COMMON) 122 . = ALIGN(8); 123 __bss_stop = .; 124 _end = .; 125 } 126 127 DWARF_DEBUG 128 129 /* When something in the kernel is NOT compiled as a module, the module 130 * cleanup code and data are put into these segments. Both can then be 131 * thrown away, as cleanup code is never called unless it's a module. 132 */ 133 DISCARDS 134} 135