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

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)
30
			INIT_TEXT
31 32 33 34 35
			/*
			 * .exit.text is discarded at runtime, not
			 * link time, to deal with references from
			 * __bug_table
			 */
36
			EXIT_TEXT
H
Haavard Skinnemoen 已提交
37 38 39
			_einittext = .;
		. = ALIGN(4);
		__tagtable_begin = .;
40
			*(.taglist.init)
H
Haavard Skinnemoen 已提交
41
		__tagtable_end = .;
42
			INIT_DATA
H
Haavard Skinnemoen 已提交
43 44 45 46 47 48
		. = 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
		__init_end = .;
	}

	.text		: AT(ADDR(.text) - LOAD_OFFSET) {
		_evba = .;
		_text = .;
		*(.ex.text)
		*(.irq.text)
72
		KPROBES_TEXT
73
		TEXT_TEXT
H
Haavard Skinnemoen 已提交
74 75 76 77 78 79 80 81 82 83 84 85 86 87
		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 = .;
	}

88 89
	BUG_TABLE

H
Haavard Skinnemoen 已提交
90 91
	RODATA

92
	. = ALIGN(THREAD_SIZE);
H
Haavard Skinnemoen 已提交
93 94 95 96 97 98 99 100 101

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

102 103 104 105
		/* Then, the page-aligned data */
		. = ALIGN(PAGE_SIZE);
		*(.data.page_aligned)

H
Haavard Skinnemoen 已提交
106
		/* Then, the cacheline aligned data */
107
		. = ALIGN(L1_CACHE_BYTES);
H
Haavard Skinnemoen 已提交
108 109 110 111
		*(.data.cacheline_aligned)

		/* And the rest... */
		*(.data.rel*)
112
		DATA_DATA
H
Haavard Skinnemoen 已提交
113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133
		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/       	: {
134
		EXIT_DATA
H
Haavard Skinnemoen 已提交
135 136 137 138 139
		*(.exitcall.exit)
	}

	DWARF_DEBUG
}