vmlinux.lds.S 2.7 KB
Newer Older
H
Haavard Skinnemoen 已提交
1 2 3 4 5 6 7 8 9 10 11
/*
 * AVR32 linker script for the Linux kernel
 *
 * Copyright (C) 2004-2006 Atmel Corporation
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 */
#define LOAD_OFFSET 0x00000000
#include <asm-generic/vmlinux.lds.h>
12 13
#include <asm/cache.h>
#include <asm/thread_info.h>
H
Haavard Skinnemoen 已提交
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

OUTPUT_FORMAT("elf32-avr32", "elf32-avr32", "elf32-avr32")
OUTPUT_ARCH(avr32)
ENTRY(_start)

/* Big endian */
jiffies = jiffies_64 + 4;

SECTIONS
{
	. = CONFIG_ENTRY_ADDRESS;
	.init		: AT(ADDR(.init) - LOAD_OFFSET) {
		_stext = .;
		__init_begin = .;
			_sinittext = .;
			*(.text.reset)
			*(.init.text)
31 32 33 34 35 36
			/*
			 * .exit.text is discarded at runtime, not
			 * link time, to deal with references from
			 * __bug_table
			 */
			*(.exit.text)
H
Haavard Skinnemoen 已提交
37 38 39
			_einittext = .;
		. = ALIGN(4);
		__tagtable_begin = .;
40
			*(.taglist.init)
H
Haavard Skinnemoen 已提交
41 42 43 44 45 46 47 48
		__tagtable_end = .;
			*(.init.data)
		. = ALIGN(16);
		__setup_start = .;
			*(.init.setup)
		__setup_end = .;
		. = ALIGN(4);
		__initcall_start = .;
49
			INITCALLS
H
Haavard Skinnemoen 已提交
50 51 52 53 54 55 56
		__initcall_end = .;
		__con_initcall_start = .;
			*(.con_initcall.init)
		__con_initcall_end = .;
		__security_initcall_start = .;
			*(.security_initcall.init)
		__security_initcall_end = .;
57
#ifdef CONFIG_BLK_DEV_INITRD
H
Haavard Skinnemoen 已提交
58 59 60 61
		. = ALIGN(32);
		__initramfs_start = .;
			*(.init.ramfs)
		__initramfs_end = .;
62
#endif
63
		. = ALIGN(PAGE_SIZE);
H
Haavard Skinnemoen 已提交
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
		__init_end = .;
	}

	.text		: AT(ADDR(.text) - LOAD_OFFSET) {
		_evba = .;
		_text = .;
		*(.ex.text)
		. = 0x50;
		*(.tlbx.ex.text)
		. = 0x60;
		*(.tlbr.ex.text)
		. = 0x70;
		*(.tlbw.ex.text)
		. = 0x100;
		*(.scall.text)
		*(.irq.text)
80
		KPROBES_TEXT
81
		TEXT_TEXT
H
Haavard Skinnemoen 已提交
82 83 84 85 86 87 88 89 90 91 92 93 94 95
		SCHED_TEXT
		LOCK_TEXT
		*(.fixup)
		*(.gnu.warning)
		_etext = .;
	} = 0xd703d703

	. = ALIGN(4);
	__ex_table	: AT(ADDR(__ex_table) - LOAD_OFFSET) {
		__start___ex_table = .;
		*(__ex_table)
		__stop___ex_table = .;
	}

96 97
	BUG_TABLE

H
Haavard Skinnemoen 已提交
98 99
	RODATA

100
	. = ALIGN(THREAD_SIZE);
H
Haavard Skinnemoen 已提交
101 102 103 104 105 106 107 108 109 110

	.data		: AT(ADDR(.data) - LOAD_OFFSET) {
		_data = .;
		_sdata = .;
		/*
		 * First, the init task union, aligned to an 8K boundary.
		 */
		*(.data.init_task)

		/* Then, the cacheline aligned data */
111
		. = ALIGN(L1_CACHE_BYTES);
H
Haavard Skinnemoen 已提交
112 113 114 115
		*(.data.cacheline_aligned)

		/* And the rest... */
		*(.data.rel*)
116
		DATA_DATA
H
Haavard Skinnemoen 已提交
117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
		CONSTRUCTORS

		_edata = .;
	}


	. = ALIGN(8);
	.bss    	: AT(ADDR(.bss) - LOAD_OFFSET) {
		__bss_start = .;
		*(.bss)
		*(COMMON)
		. = ALIGN(8);
		__bss_stop = .;
		_end = .;
	}

	/* When something in the kernel is NOT compiled as a module, the module
	 * cleanup code and data are put into these segments. Both can then be
	 * thrown away, as cleanup code is never called unless it's a module.
	 */
	/DISCARD/       	: {
		*(.exit.data)
		*(.exitcall.exit)
	}

	DWARF_DEBUG
}